Saturday, August 09, 2008

Utilizando el mismo certificado digital en múltiples sitios de IIS

Por Hector Bejarano - http://citicr.org

 

En un artículo anterior, se explicó como se pueden generar certificados digitales que tengan varios DNS, de manera que uno podría utilizar ese mismo certificado para varios sitios web, este artículo se enfoca en la configuración que se debe de realizar en IIS para poder utilizar esos certificados.

La primera pregunta que el lector se puede hacer es, ¿de que me sirve esto? pues bien, resulta que uno no puede tener varios certificados digitales en un mismo end point (combinación de IP/puerto) en una configuración normal de Windows, lo que significa que si usted tuviera un solo IP real y necesita publicar varios sitios web en el puerto de HTTPS (443), no podría hacerlo. De hecho, muchas personas optan por publicar los sitios en puertos diferentes, pero como sabemos, esto puede resultar molesto y tedioso para el usuario final.

Lo ideal sería poder publicar todos los sitios que yo quiera en el puerto 443 utilizando un mismo certificado, pero ¿Como se logra esto?

Lo primero a tomar en cuenta es que se debe poseer un servidor Windows 2003 SP1 o superior (El SP1 es requerido porque este escenario no es soportado en un Windows normal). Además, se debe tomar en cuenta también que no se puede utilizar la consola de IIS para salvar la configuración de los sitios ya que esta tampoco soporta el escenario descrito anteriormente, por lo que si después de haber seguido los pasos descritos en este artículo alguien viene y salva la configuración desde la consola de IIS, habrá que reconstruir la configuración de la metabase.

Vamos a imaginar que tenemos los siguientes sitios web en un mismo servidor:

Website
Host Header
Site Identifier
IP
Puerto
Puerto SSL

Principal
www.misitio.org
1
190.30.12.78
80
443

Correo
correo.misitio.org
2
190.30.12.78
80
443

Recursos Humanos
rh.misitio.org
3
190.30.12.78
80
443

En un servidor Windows normal, si usted crea esa configuración en IIS (tomando en cuenta que usted ya instaló el mismo certificado digital en los 3 sitios), notará varias cosas:

1. Siempre obtendrá el mismo sitio utilizando todos los diferentes DNS (host headers)
2. Solo un sitio estará corriendo en IIS, los otros dos sitios van a aparecer como detenidos.
3. Si intenta iniciar uno de los sitios que está detenido, IIS le indicará que no puede hacerlo porque otro sitio ya está utilizando el mismo IP y puerto.

Entonces, el procedimiento para hacer que todos estos sitios corran al mismo tiempo con la configuración anteriormente descrita es la siguiente:

1. Determine el número de site identifier para cada sitio: En la consola de IIS, se puede posicionar en el nodo "Web Sites" del árbol de la izquierda, una vez hecho esto aparecerá una lista con todos los sitios web, la segunda columna (llamada Identifier) muestra el número de identificación para cada sitio.
2. Ejecute los siguientes comandos desde una sesión de línea de comando (DOS):

Sintaxis:

C:\Inetpub\AdminScripts>cscript.exe adsutil.vbs set /w3svc/<site identifier>/SecureBindings ":443:<host header>"

Ejemplos:

C:\Inetpub\AdminScripts>cscript.exe adsutil.vbs set /w3svc/1/SecureBindings ":443:www.misitio.org"
C:\Inetpub\AdminScripts>cscript.exe adsutil.vbs set /w3svc/2/SecureBindings ":443:correo.misitio.org"
C:\Inetpub\AdminScripts>cscript.exe adsutil.vbs set /w3svc/3/SecureBindings ":443:hr.misitio.org"

3. Inicie los sites desde la consola de IIS

2 comments:

deisbel said...

Muchas gracias, me ha servido mucho, pero aclaro: no sin antes romperme un poco la cabeza.
Es que el comando lo escribiste mal.

cscript.exe se encuentra en c:\windows\system32 y recibe como parametro C:\Inetpub\AdminScripts\adsutil.vbs ... mas el resto, quedando algo asi como: c:\windows\system32\cscript.exe c:\Inetpub\AdminScripts\adsutil.vbs set /w3svc/1/SecureBindings ":443:www.misitio.org"

Ahora, tengo una duda por si puedes responderla: que hay si quiero hacer lo mismo (compartir el 443 entre varios sitios) pero que tienen dieferentes certificados y que cada uno refleje el suyo? Lo intente pero entonces todos usan el utilizado por el ultimo de los sitios registrado con el comando en cuestion. Es decir si revisas el Certificado de cada sitio al solitarlo en un Navegador te muestra el mismo, a pesar que tienen uno diferente cada uno.

Gracias, una vez mas.

deisbel said...

Hola de nuevo, disculpa en el anterior comentario los caminos. En realidad si ejecutas tu comando desde C:\Inetpub\AdminScripts directamente pues te funciona. Lo que sucede es que yo queria ejecutarlo desde cualquier lugar. Asi que si quieres lo modificas un poco antes de publicarlo, y me respondes la pregunta final.

SQL Server 2016 Stretch Databases

El SQL Server Stretch Database permite que los datos históricos o de bitácoras puedan ser movidos hacia Azure, específicamente permite mover...