Gestión de SSL con IIS

Esta actividad práctica corresponde a este tema.

Ver las CA en los navegadores

Antes de comenzar a describir la gestión de SSL, es necesario saber dónde se pueden encontrar las autoridades certificadoras admitidas por los navegadores del cliente.

Con IE:

Para ver las CA válidas y reconocidas por este navegador debemos ir a Herramientas – Opciones de Internet – Contenido – Certificados –Autoridades Certificadoras raíz de Confianza:

CAs en Internet Explorer

Entidades certificadoras de confianza registradas en Internet Explorer

CAs en Firefox

Entidades certificadoras de confianza registradas en Firefox

Con Firefox (imagen anterior):

La opción que soporta esta operación está en Herramientas - Opciones - Avanzados - Ver Certificados – Autoridades.

Activar SSL en el servidor web

Para ello lo primero que debemos hacer es desactivar URLScan si estuviese activo, ya que puede plantear conflictos con SSL. Aunque se puedan arreglar adaptando la configuración, optaremos por esta opción más sencilla para nuestras pruebas. Para ello, basta con ir al IISManager y quitarlo como filtro ISAPI. Si lo queremos activar de nuevo, solo debemos agregar la dll correspondiente. Esta es la forma general de eliminar filtros ISAPI del servidor.

Gestión de SSL (3)

Hecho esto, configuraremos a continuación IIS para que admita tráfico HTTPS. Para ello, lo primero que necesitamos es pedir un certificado para el servidor y por tanto necesitamos una CA (Certification Authority, una autoridad certificadora) que nos lo emita. El servidor 2003 de nuestra infraestructura de pruebas ya tiene software de CA instalado. Este software es un servicio que está incluido de serie para instalar en Windows 2003 Server y por ello no tenemos que adquirir un producto independiente. No es lo adecuado para una web pública, pero es gratis y sirve perfectamente en intranets, donde nuestros clientes conozcan la CA certificadora y sepan que pueden confiar en ella. De todas formas, podemos dejar público el certificado de nuestra CA para que los clientes lo instalen y así cualquiera de ellos (tanto si son clientes de una intranet como si vienen de Internet) puedan configurar su browser para confiar en nuestra autoridad certificadora.

En caso de no estar instalado software de CA en el servidor, este se instalaría con: Panel de Control – Agregar o Quitar Programas – Componentes de Windows – Servicios de Certificate Server:

Gestión de SSL (4)

Instalando los servicios necesarios para convertir Windows 2003 en una autoridad certificadora

En nuestra configuración de pruebas hemos creado una CA raíz de empresa a la que llamamos WEBCERT . Para hacer esto es necesario activar páginas ASP, lo que puede ir contra la política de seguridad de la empresa o la política que queremos para nuestro IIS, ya que hay que activar la extensión de servicio correspondiente. No obstante, en este caso lo haremos para poder seguir instalando esta funcionalidad con normalidad.

Tras tener una CA operativa, podremos solicitar el certificado necesario para IIS. Para ello, basta con ir a IIS Manager – Web a habilitar (la de por defecto en este caso) – propiedades – Seguridad de Directorios – Certificado de Servidor, tal y como se ve en la siguiente imagen:

Gestión de SSL (5)

Tras esto pulsamos en “Siguiente” y solicitamos crear un certificado nuevo, pidiéndolo inmediatamente al propio servidor, tal y como se ve en las siguientes imágenes:

Gestión de SSL (6)

Asistente para solicitar un certificado de servidor

Gestión de SSL (7)

Asistente para solicitar un certificado de servidor (II)

Gestión de SSL (8)

Asistente para solicitar un certificado de servidor (III): Envío inmediato de la petición a la CA

Ahora se nos solicitará un nombre para el certificado y una longitud en bits. 1024 es adecuado, aunque a mayor longitud mayor dificultad de desencriptación (a costa del rendimiento):

Gestión de SSL (9)

Asistente para solicitar un certificado de servidor (IV)

Posteriormente se nos pedirán datos de localización (Organización y Unidad Organizativa), que son solo cosméticos (para que los vea el usuario que examine el certificado):

Gestión de SSL (10)

Asistente para solicitar un certificado de servidor (V)

Luego debemos introducir exactamente el nombre del servidor web. Si la web fuese pública, tendríamos que usar el nombre de la web (www…..). Si el servidor web se va a identificar por una dirección IP (como es nuestro caso, donde tiene la IP 5.0.0.2), aquí deberíamos dar dicha IP para evitar uno de los errores que se le mostrará al cliente cuando se haga una solicitud del certificado. Aun así, el error de que el certificado no proviene de una autoridad certificadora de confianza sólo podremos quitarlo asignando como fiable dicha autoridad en el navegador que usemos. Para esta prueba pondremos el nombre del servidor de forma que se nos muestren varios errores en la solicitud del certificado para que podamos verlos, aunque la encriptación seguirá funcionando igualmente.

Gestión de SSL (11)

Asistente para solicitar un certificado de servidor (VI)

Lo siguiente que se nos solicita son más datos de localización “cosméticos”:

Gestión de SSL (12)

Asistente para solicitar un certificado de servidor (VII): Datos geográficos

El resto de opciones se pueden dejar por defecto. Con esto completamos la petición de certificado. Al hacerlo así se instala y configura sólo, tal y como se muestra en las imágenes siguientes:

Gestión de SSL (13)

Asistente para solicitar un certificado de servidor (VIII): Puerto SSL

Gestión de SSL (14)

Asistente para solicitar un certificado de servidor (IX): Selección de CA

Gestión de SSL (15)

Asistente para solicitar un certificado de servidor (X): Resumen final

Gestión de SSL (16)

Asistente para solicitar un certificado de servidor (XI): Creación final del certificado

NOTA: ESTA ES LA SECUENCIA DE PASOS NECESARIA PARA CREAR UNA SOLICITUD DE CERTIFICADO PARA ENVIARLO MÁS TARDE

La secuencia de pasos a seguir es análoga a la anterior, sólo que esta vez tendremos que pulsar en “Preparar ahora pero enviarla más tarde” cuando lleguemos a ese punto. También nos seguirá pidiendo un nombre y una longitud en bits, siguiendo los mismos criterios anteriores. Para el resto de información del certificado podemos seguir los pasos mostrados anteriormente.

Tras eso, debemos enviar la solicitud de certificado a la CA para que nos lo emita. Para ello, abriremos la web de solicitud de certificados que las CA de Windows habilitan cuando se instala (http://localhost/certsrv en la máquina donde esté instalada la CA) y seguimos los siguientes pasos:

  1. Pulsar en “Solicitar un certificado”. Esto podría darnos un error ya que URLScan puede estar filtrando las peticiones antes de que lleguen a IIS, y bloquear las páginas ASP que usa la web de la CA. Aunque IIS tenga activado ASP, URLScan lo podría estar bloqueando antes de que la petición llegue al mismo. Para arreglarlo podemos desactivar URLScan como se indicó anteriormente o bien ir a C:\WINDOWS\system32\inetsrv\urlscan y abrir el fichero urlscan.ini, buscando la entrada “UseAllowExtensions=1” y colocando .ASP y .cer debajo de ese epígrafe. Por último salvamos el .ini y reiniciamos IIS.
  2. Pulsamos en solicitud avanzada de certificado - Enviar una solicitud de certificados, usando un archivo cifrado de base64 CMC o PKCS #10 o una solicitud de renovación usando un archivo cifrado de base64 PKCS #7.
  3. Meter el sitio actual en “Sitios de Confianza” copiando la URL a mano y bajar la seguridad del navegador del cliente al mínimo para que la CA pueda operar correctamente. Buscar el archivo (que habremos guardado en c:\certreq.txt), cargarlo (leer) y enviarlo.
  4. Seleccionar Base64 y descargar el certificado al disco duro del servidor Web.
  5. Ir a IIS Manager - web – propiedades – Seguridad en Directorios – Certificado de servidor – Procesar la petición pendiente e instalar certificado, aceptando los valores por defecto. Con esto completaríamos la instalación del certificado emitido en “diferido”. IIS recordará que hay una petición de certificados pendiente de la última vez y dará la opción de completarla automáticamente en ese caso.

Una vez terminado este proceso, la página debería funcionar exactamente igual que antes.


Independientemente de si solicitamos el certificado inmediatamente o lo hacemos “en diferido”, hay una herramienta que nos permite saber si estos certificados se han instalado o no correctamente. Esta herramienta se llama SSLDiag [1] y podemos ejecutarlo sobre el servidor para ver que no nos muestra ningún mensaje en rojo (errores).

Gestión de SSL (17)

Comprobando nuestra configuración SSL con SSLDiag

Gestión de SSL (18)

Resultado de los test de SSLDiag : No hay ningún test en rojo (errores)

Probaremos ahora la web del servidor de pruebas sin encriptación http://5.0.0.2 y con ella (https://5.0.0.2) para ver las diferencias entre ambas peticiones. En este último caso vemos como se muestran los errores esperados del certificado (CA no reconocida y sitio erróneo al no haber introducido su IP, que es la forma de designar al sitio a falta de un servidor DNS activo). No obstante, podemos seguir con la petición puesto que conocemos y confiamos la entidad certificadora que está emitiendo los certificados (la nuestra) y el error con el sitio lo hemos introducido a sabiendas. ¿Funcionará igualmente SSL?, es decir, ¿se encripta la información enviada? Las siguientes imágenes muestran el proceso por el cual comprobamos que efectivamente lo hace:

Gestión de SSL (19)

Tráfico sin encriptar con http://5.0.0.2

Gestión de SSL (20)

Error de certificado: La CA no es de confianza cuando hacemos https ://5.0.0.2

Gestión de SSL (21)

Añadiendo una excepción de seguridad en Firefox 3 para admitir el certificado

Gestión de SSL (22)

Página encriptada mediante HTTPS

Gestión de SSL (23)

Tráfico encriptado por SSL gracias al certificado creado

NOTA: HTTPS es un protocolo que surge de la combinación del protocolo HTTP sobre una conexión encriptada con SSL (Secure Socket Layer) o TLS (Transport Layer Security). TLS puede considerarse como una mejora de SSL.

En la imagen anterior podemos ver que el tráfico ha sido encriptado por SSL gracias a nuestro certificado y que por tanto Wireshark es incapaz de interpretar el contenido de las tramas.

Otra opción que puede ser conveniente es hacer que un archivo o una parte de la web sólo se pueda ver mediante una conexión segura SSL. Nosotros lo haremos a modo de ejemplo con el index.html de la sección de “contacto” de la web. Para ello haremos clic derecho en el archivo index.html de dicha sección – Propiedades – Seguridad en archivos – Comunicaciones Seguras –Modificar y marcamos “Requerir canal seguro SSL”. Ahora podemos probar desde el cliente XP a acceder a ese archivo con y sin SSL y ver el resultado que nos devuelve el browser. Ésta es la forma de hacer que partes de una web sean siempre accesibles mediante conexiones seguras SSL y que nos permitiría hacer, por ejemplo, que nadie accediese a una pantalla de login empleando una conexión no segura y por tanto dejando sus credenciales de usuario vulnerables. Las siguientes tres imágenes muestran el proceso seguido:

Gestión de SSL (24)

Requiriendo un canal seguro para una parte de nuestra página

Gestión de SSL (25)

Conectándose mediante HTTP cuando se requiere HTTPS

Gestión de SSL (26)

Página protegida por HTTPS obligatoriamente

Por último, a la hora de usar certificados también podemos configurarlas siguientes opciones:

  • Requerir 128 bits. Para browsers antiguos, no se recomienda por la menor seguridad que ofrece. En general debemos desactivar por razones de seguridad el soporte para browsers antiguos.
  • Ignorar, aceptar o requerir certificados del cliente. Los certificados del cliente pueden usarse para identificar clientes que se conectan. Estos pueden asignarse a cuentas de usuario de Windows y de esta forma usarlas para controlar los permisos de acceso al archivo concreto. De esta forma usamos certificados para designar cuentas de usuario y con ellas asignamos permisos. Podemos ver el proceso completo de cómo instalarlos y usarlos en esta dirección: http://www.windowsecurity.com/articles/Client-Certificate-Authentication-IIS6.html
  • Si hacemos esta misma operación sobre el sitio web predeterminado (o bien sobre un directorio del mismo) en lugar de un archivo suelto como antes, podemos comprobar que ahora también nos permite establecer una lista de CA de las que se van a aceptar en los certificados de cliente. De esta manera podemos limitar los clientes válidos de forma que sólo se admitan sus certificados si vienen de unas CA concretas. En caso de una intranet de empresa, podríamos incluso limitar las conexiones de los clientes a aquellos que presenten un certificado de nuestras CA internas (de todas o de algunas concretas), lo que redundaría en una mayor seguridad y una capacidad de personalización de los accesos superior.

Gestión de SSL (27)

Aceptando certificados de cliente



[1] http://www.microsoft.com/downloads/details.aspx?familyid=cabea1d0-5a10-41bc-83d4-06c814265282&displaylang=en

Última modificación: martes, 3 de agosto de 2010, 13:55