El HTTPS no es otra cosa que el mismo protocolo de transferencia de hipertexto pero seguro, protegido por el protocolo criptográfico TLS. Que un servidor implemente el protocolo HTTPS implica que la información que es transferida entre el cliente y un servidor está protegida, no de ser interceptada, sino de ser interpretada.

Para proteger la conexión se necesita de contar con un certificado SSL/TLS. Una vez que obtenemos el certificado lo instalamos en el servidor de nuestra aplicación. De él se desprenden un par de llaves asimétricas: una privada y una pública. Este es un proceso que debe hacerse una sola vez en el servidor.

Ahora, esto es lo que ocurre cuando un cliente hace una petición:

  1. El cliente que se quiere conectar a un sitio web inicia un "saludo" hacia el servidor.
  2. El servidor responde el "saludo", enviando su certificado público.
  3. El cliente comprueba que el certificado sea válido, una vez que lo comprobó toma la llave pública.
  4. El cliente genera una especie de cadena llamada pre-master secret, la cual encripta usando la llave pública del servidor. Una vez encriptado este secreto es enviado de vuelta al servidor.
  5. En este momento, tanto el cliente como el servidor usan este pre-master secret para generar un ya ahora sí el master secret del cual tanto el servidor como el cliente obtendrán la llave compartida, que es una llave simétrica, es decir que sirve para proteger y desproteger.
  6. Entonces, ya teniendo esta llave se pueden comunicar entre ellos sin que nadie más entienda lo que se está comunicando entre ambos.

Como viste en la explicación anterior, parte importante del protocolo HTTPS son los certificados: El él viene la llave pública, así como la información de la autoridad certificadora.

Los certificados pueden ser adquiridos gratuitamente en https://letsencrypt.org/ o pagar una buena cantidad de dinero para obtenerlos en DigiCert, GlobalSign, GoDaddy. La diferencia radica en el grado de verfificación requerido, por ejemplo el más sencillo que únicamente garantizan que te estés conectando a cierto dominio/servidor como el que usa YouTube (que es un certificado de dominio) hasta los certificados de validación extendida que realizan tienen un proceso más complicado para ser emitidos puesto que se tiene que validar que la entidad que lo solicita exista, estos certificados tienen la única intención de asegurarle al usuario que en realidad se está conectando a donde se desea conectar, ya que en el navegador le dan más pistas al usuario para averiguar a donde se está conectando. La barra de navegador se pinta de color verde y aparece el nombre de la compañía. Usualmente los sitios de transacciones monetarias tienen este tipo de certificados, como los bancos o PayPal.com.

Aclaraciones sobre HTTPS

Una de los malentendidos más comunes con respecto a los certificados es que hay quienes dan por hecho que tu información está 100% segura porque el sitio al que se están conectando utiliza HTTPS, pero no. El protocolo protege la información mientras que es transmitida, lo que ocurra con ella cuando llegue al otro extremo ya no está contemplado por este. Dicho de otra manera: con https podrías estar teniendo una comunicación segura con el demonio.

Otra de las preocupaciones que he escuchado es que el habilitar SSL nos hace sufrir de una degradación de desempeño debido al proceso de encriptación y validación de los mensajes… pero la realidad es que esto no es un problema para nada, es un hecho, tanto tu computadora como el servidor están haciendo cálculos, pero la velocidad a las que los realizan los convierte en algo insignificante como para ser considerados.

Seguramente tu también te has encontrado con páginas en las que el navegador te presenta algún tipo de advertencia como esta. Lo cual ciertamente hace ver terriblemente a la empresa dueña de la página. Este error ocurre por algún problema con el certificado, siendo los más comunes: que el certificado haya expirado, que no haya sido generado para el servidor en el que se instaló o que la autoridad certificadora no sea de confianza para el navegador, de cualquier manera, si una página pública te recibe con ese error toma en cuenta que algo anda mal y que seguramente no debes enviar tus datos a través de ella.