SSL

SSL es un método para encriptar tráfico que circula por una red. Es un estándar industrial que se usa típicamente para encriptar tráfico HTTP, aunque también puede usarse con otros protocolos. Debe usarse siempre que se mande información sensible entre cliente y servidor (credenciales, datos personales,…) y el método de transmisión que se use no use ya ninguna forma de encriptación sobre los datos enviados. Por este motivo, usar SSL es imprescindible para hacer seguras autenticaciones como Basic.

SSL usa certificados y encriptación de clave pública [1] para identificar a los interlocutores y crear transmisiones seguras. Debido a que usan certificados, SSL puede usarse también para asegurarnos de la identidad de un interlocutor, evitando suplantaciones de máquinas en la red. El proceso que se sigue para encriptar tráfico por SSL es el siguiente:

  • Un cliente pide un recurso mediante https (suponemos que el servidor está configurado para permitirlo, algo que veremos cómo se hace posteriormente).
  • Ante esta petición, el servidor devuelve su certificado SSL. Entonces el cliente hacelo siguiente sobre dicho certificado:
    • Comprueba que no está caducado.
    • Comprueba que el nombre del servidor al que se conecta es el mismo que el que tiene el certificado (evita suplantación de sitios web).
    • Comprueba que el certificado ha sido emitido por una autoridad certificadora (CA) de confianza, es decir, comprueba que el certificado es creíble:
      • Los navegadores tienen una lista de CAs de confianza (como Verisign, Thawte, etc.). Como los navegadores confían en ellas, confían en los certificados que emiten y los dan por válidos.
      • Estas CAs se supone que verifican que quienes les piden certificados son usuarios válidos y legítimos, por lo que son entidades de confianza (como si fuesen notarios).
      • Por tanto, un navegador no confiará por defecto en otras CA desconocidas. No obstante, podemos montar una propia (de la empresa concreta) y configurar al navegador para que confíe en sus certificados manualmente.
        • Suele hacerse sobre todo en intranets, webs no públicas o empresas que no quieran hacer una inversión económica por este concepto.
    • Si el certificado no cumple con algún requisito, el usuario será avisado de los problemas encontrados y tendrá que decidir si continúa con la operación.
    • En caso de que sea válido o el usuario continúe, el navegador extrae la clave pública del servidor de su certificado SSL.
    • Posteriormente genera una clave de sesión (session key) aleatoria y la encripta con dicha clave pública, devolviendo este dato al servidor.
    • El servidor desencripta la session key con su clave privada. Las futuras comunicaciones entre cliente y servidor usarán encriptación simétrica usando esta session key como clave.
      • La encriptación simétrica es más rápida que la basada en clave pública, por lo que se usa en el resto de la comunicación por temas de rendimiento.

IIS 6 permite un gran control sobre lo que hacemos con los certificados y se integra perfectamente con Windows 2003. No obstante, el uso de SSL plantea ciertos problemas / limitaciones:

  • Cualquier información que se transmita como parte de la URL de la petición (la query string) no se encripta, ya que la URL es necesaria para localizar el servidor de destino y no puede encriptarse.
    • Si usamos la query string para pasar información sensible, cualquiera podrá leerla.
  • La información se transmite encriptada, pero estará presente en forma desencriptada tanto en el cliente como en el servidor para que éstos pueden manejarla correctamente. Si alguno de ellos se compromete, el atacante podrá leerla igualmente.
  • Existen limitaciones a la hora de usar múltiples webs con SSL sobre la misma IP usando Host Headers, ya que esta información de cabeceras se encripta y no puede leerse cuando es necesario.
    • Host Headers es un método para alojar múltiples sitios Web sobre una misma IP (lo veremos en el próximo capítulo).
    • Lo más sencillo en estos casos es que cada Web SSL se ejecute en su propia IP o en su propio puerto TCP.
    • No obstante, existen soluciones a este problema con usando un wilcard server certifícate [2] .

Una vez visto esto, la siguiente actividad práctica describe todo el proceso de gestión de SSL sobre IIS. Para hacer lo mismo sobre IIS 7, se recomienda consultar este enlace: http://learn.iis.net/page.aspx/144/how-to-set-up-ssl-on-iis-7/


[1] Más información en Microsoft Technet, buscando en Google Public Key Encryption (IIS 6.0)

[2] Podemos encontrar más información en Microsoft Technet, buscando en Google Configuring SSL HostHeaders (IIS 6.0)

Last modified: Thursday, 19 August 2010, 11:43 AM