JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo asignar nombres de dominio a certificados SSL en Internet Information Server 7.x

La semana pasada explicaba en un post qué era SNI (Server Name Indication) y cómo podíamos sacarle partido en Internet Information Server 8.0 para albergar varios certificados SSL/TSL en una misma IP, y restringir a dicha IP el acceso solo desde los dominios apropiados.

En teoría en IIS 7.x bajo Windows Server 2008 o 2008 R2, no está disponible esta opción, al menos no para certificados SSL normales.

Sin embargo, si vamos a las propiedades de un "binding" para HTTPS, vemos que dispone de un cuadro de texto para el nombre de dominio, similar al de IIS 8.0, pero que está deshabilitado:

SSL-NombreHost-1

Así que parece que, aunque esté deshabilitado, algún tipo de soporte debe de haber para usar SNI en IIS 7.x ¿no?

Bien, el caso es que IIS 7.0 soporte SNI con certificados SSL de tipo wildcard, es decir, aquellos que son capaces de soportar múltiples subdominios de un mismo dominio con el mismo certificado. Este tipo de certificados se asocian a dominios de tipo *.midominio.com. Es decir, cualquier cosa delante del punto del dominio de segundo nivel (ver post anterior para más información).

De hecho si disponemos de uno de estos dominios wildcard y lo asignamos a un "binding" de un servidor web virtual, veremos que la casilla se habilita y podemos escribir el nombre del subdominio que queramos sin problema.

¿Cómo sacar partido a SNI con cualquier certificado normal?

Existen formas de asignar nombres de dominio con certificados usando herramientas de línea de comandos. Pero en este post me voy a centrar en cómo lograrlo desde la interfaz de usuario.

Para ello vamos a aprovecharnos de un fallo en la validación que hace el administrador de bindings de IIS.

Voy a suponer que tienes ya el certificado SSL instalado en el servidor, y que tienes creado el binding correspondiente.

Paso 1.- Abre el gestor de certificados digitales del sistema

Para ello usa el menú de "Ejecutar" (Windows+R) y escribe simplemente "MMC" para que se lance la consola de administración de Microsoft. Una vez en ella agrega el complemento de certificados digitales siguiendo las indicaciones de la imagen:

Agregar Snap-in - Certificados - Cuenta del equipo - Equipo local
Pulsa para aumentar

Una vez añadido el complemento verás que tienes acceso a los diversos certificados digitales del equipo. En este caso concreto debes ir a la rama "Personal" que es la que guarda los certificados SSL disponibles.

En ella verás todos los certificados apropiados para SSL que tiene el servidor.

Selecciona el certificado para el cual quieres habilitar el nombre de dominio y pulsa con el botón secundario del ratón sobre él. En el menú desplegable que aparece escoge "Propiedades". Verás aparecer la ventana de ajustes del certificado. En la pestaña "General" puedes escoger el nombre amigable que le quieres dar al certificado, que es el que luego te aparecerá en el desplegable de certificados de los "bindings":

Nombre amigable para el certificado
Pulsa para aumentar

El truco es el siguiente: coloca un asterisco (*) delante del nombre amigable del certificado, como en la figura anterior.

Con esto lo que consigues es "confundir" al gestor de bindings de IIS 7.x y se piensa que es un certificado de tipo wildcard (alucinante,pero cierto). A partir de ese momento, en el sitio web que tenga asociado dicho certificado te dejará especificar un nombre de dominio y restringir el uso del certificado al mismo:

SSL-NombreHost-2

De esta manera podrás disfrutar de SNI en IIS 7.x en certificados normales, aunque en teoría no estén disponibles :-)

Lo que no sé es porqué no lo facilitan un poco los de Microsoft. Supongo que sus buenas razones tendrán.

¡Espero que te sea útil!

José Manuel Alarcón José Manuel Alarcón
Fundador de campusMVP.es, el proyecto de referencia en formación on-line para programadores en lengua española. Autor de varios libros y cientos de artículos. Galardonado como MVP de Microsoft desde 2004. Gallego de Vigo, amante de la ciencia y la tecnología, la música y la lectura. Ayudando a la gente en Internet desde 1996.
Descarga GRATIS mi último libro (no técnico): "Tres Monos, Diez Minutos".
Banner

Comentarios (8) -

No funciona, permiteme los cambios que indicas, pero al aplicarlo muestra que otro sitio esta usando el mismo enlace, y modifica el otro sitio al nuevo certificado

Responder

by Jose M. Alarcon

Hola Gustavo:

Funcionar funciona para lo que yo indico, que es poder asignar un nombre de dominio concreto al certificado (que lógicamente debe coincidir con el nombre de dominio al que está asociado el certificado), y por lo tanto activar SNI. No sirve para asignar un mismo certificado a varios sitios, que es justo lo contrario y parece que es lo que te está ocurriendo.

Aquí se trata de poder tener la misma IP para varios certificados, pudiendo distinguir entre nombres de dominio, algo que de entrada noes posible. Pero no se trata de poner el mismo certificado para varios sitios.

Salvo que me esté perdiendo algún detalle, claro.

Saludos.

Responder

Hola Jose, estoy intentando instalar dos certificados SSL normales para dos dominios diferentes en un Server2008. He seguido los pasos que indicas pero cuando intento instalar el el segundo certificado me  aparece la alerta diciendo que no se pueden usar dos certificados en el mismo puerto aunque he podido indicar el host-name correspondiente en cada uno de ellos.
¿Puedes ayudarme?

Muchas gracias

Responder

by Jose M. Alarcon

Por favor, prueba a no asignar la IP en el binding del servidor virtual cuando defines el de HTTPS. Es decir, donde va la IP, en vez de poner la IP real que se asocia con el dominio, déjalo con "Cualquier IP". Debería irte.

No olvides de todos modos que esto no deja de ser un "hack" ya que no está soportado oficialmente en esta versión de Windows.

Saludos.

Responder

Hola Jose, así lo hago pero al asignar el segundo certificado al segundo dominio aparece el error diciendo que el https ya tiene un certificado asignado y que si deseo reasignar el nuevo.
No hay que hacer nada más?? solo poner el * al principio de los nombres amigables de los certificados? No se si se me escapa algo.

Muchas gracias por tu ayuda.

Responder

by Jose M. Alarcon

Buff, pues no sé qué decirte. Ahora no tengo a mano un IIS como ese para probar. Lamento que no te funcione. No te va a quedar otra que usar una IP diferente (de todos modos es algo bastante recomendable para poder hacer que funcionen con navegadores antiguos).

Lo siento :-S

Responder

No te preocupes, muchas gracias.

Responder

Buenísimo!

Responder

Agregar comentario