Share via


IIS: Administración de diferentes certificados en diferentes servidores web

Aunque la administración de varios certificados de seguridad puede ser engorrosa, Windows PowerShell permite facilitar el proceso.

Jason Helmick

Gestión de certificados en entornos a gran escala de la Web es un desafío a gran escala. Puede haber cientos de servidores que alojan cientos de sitios Web SSL, todos con certificados únicos. Instalación y mantenimiento de certificados en esta escala son un proceso lento con la interfaz gráfica de usuario del administrador de IIS.

No tengas miedo — se es una mejor manera. Si tienes dos o 200 servidores de Web, Windows PowerShell pueden convertir días, semanas o meses de su tiempo en tan sólo minutos. Durante todo el proceso de implementación, instalación y configuración de certificados y SSL para su sitio Web, hay algunos trucos que puede utilizar para localizar certificados que están a punto de caducar por lo que pueden reemplazarlos.

Las reglas son simples: Esto funciona con IIS 7.5 y 8 de IIS, pero necesita Windows PowerShell remoting habilitado. En este ejemplo, hay dos servidores de Web configurados en un equilibrio de la carga con su propia dirección IP del clúster. Cada uno está ejecutando tres nuevos sitios Web que necesitan certificados y enlaces para SSL. He cambiado la dirección IP del clúster en el código para las direcciones internas para ocultar los reales sitios de la Web, pero usted consigue la idea. He comprado mis nuevos certificados y tener los archivos PFX listos para desplegar. Este es el Resumen de los sitios Web existentes:

  • Shop.Company.com – Dirección IP 192.168.3.201 – Cert: Shop.Company.com.pfx
  • Update.Company.com – Dirección IP 192.168.3.202 – Cert: Update.Company.com.pfx
  • Register.Company.com – Dirección IP 192.168.3.203 – Cert: Register.Company.com.pfx

Vamos a empezar por la implementación e instalación de los certificados en los servidores de Web de equilibrio de carga.

Desplegar e instalar

Se necesitan dos cosas para empezar: una variable que contiene una lista de los nombres de equipo del servidor Web y una sesión remota de Windows PowerShell para cada uno de esos servidores. Mis nombres de equipo llegaron desde un archivo de texto en mi equipo, pero usted puede asir de Active Directory si los servidores Web son miembros del dominio:

PS> $servers = Get-Content c:\webservers.txt PS> $session = New-PsSession –ComputerName $servers

Copiar los certificados a los servidores remotos, por lo que fácilmente puede instalarlos. No te preocupes alguien robar archivos PFX. A eliminarlos antes de completar esta sección. Para esta demostración, mis archivos PFX son en mi cliente equipo c:\sites\certpfx:

PS> $servers | foreach-Object{ copy-item -Path c:\sites\certpfx\*.* -Destination "\\$_\c$"}

CertUtil.exe es una gran herramienta para instalar certificados en sesiones de interacción remota de Windows PowerShell. En los siguientes parcializados, cada servidor Web instalará los certificados. Recuerde, hay tres certificados para instalar (uno para cada sitio Web), por lo que he repetido los comandos:

PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\shop.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\update.company.com.pfx} PS> Invoke-command -Session $session { certutil -p P@ssw0rd -importpfx c:\register.company.com.pfx}

Al utilizar CertUtil.exe, necesitará especificar la contraseña para el PFX. Ya he realizado esto en tiempo real, acaba de escribir las contraseñas. Si vas a construir una secuencia de comandos, recomiendo cambiar las contraseñas con una variable que obtiene la contraseña de un símbolo del sistema, tales como:

PS> $Cred = (Get-Credential).password

Asegúrese de eliminar los archivos PFX desde los servidores Web remotos para evitar cualquier robo de posible certificado:

PS> $servers | foreach-object {Remove-Item -Path "\\$_\c$\*.pfx"}

Con los certificados instalados en los servidores remotos, el siguiente paso es crear los enlaces HTTPS para los sitios Web.

Crear sitio Web enlaces

Cada sitio Web en cada servidor en el equilibrio de carga necesita un enlace HTTPS. Use el cmdlet New-WebBinding desde el módulo deusuario y el proceso será un broche de presión. Los parámetros de cmdlet especifican el nombre del sitio, Protocolo, puerto y la dirección IP del clúster para el sitio. Los SSLFlags determinar dónde se encuentra el certificado que se utilizará para el enlace:

PS> Invoke-Command -session $session {Import-Module WebAdministration} PS> Invoke-command -Session $session { New-WebBinding -name shop -Protocol https -Port 443 -IPAddress 192.168.3.201 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name update -Protocol https -Port 443 -IPAddress 192.168.3.202 -SslFlags 0} PS> Invoke-command -Session $session { New-WebBinding -name register -Protocol https -Port 443 -IPAddress 192.168.3.203 -SslFlags 0}

Los certificados que sólo instalado en almacenamiento de certificados de Windows, pero aquí son las opciones:

  • 0 – Certificado regular en el almacenamiento de certificados de Windows
  • 1 – Certificado de servidor indicación de nombre (SNI)
  • 2 – Almacén de certificados central
  • 3 – Certificado SNI en almacén central

Hay un último paso para completar, que es a menudo pasado por alto y olvidado: vincular los certificados a los nuevos enlaces de sitio Web.

Enlazar los certificados

Este último paso puede ser confuso. El administrador de IIS gráfica oculta esta parte del proceso, pero no puede dejarlo si desea que los sitios para trabajar con SSL. Hay que vincular el certificado para el enlace del sitio Web.

Este es un proceso de dos fases. En primer lugar, usted tiene que obtener la huella digital del certificado para cada sitio Web, por lo que puede crear un enlace adecuado de SSL. Recuerde, estoy trabajando con tres sitios de la Web en este ejemplo. Necesitaré la huella digital de cada certificado único. Elegí guardar la huella digital en tres diferentes variables no confunden al vincular a los sitios Web:

PS> Invoke-Command -session $session { $CertShop=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*shop*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertUpdate=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*update*"} | Select-Object -ExpandProperty Thumbprint} PS> Invoke-Command -session $session { $CertRegister=Get-ChildItem -Path Cert:\LocalMachine\My | where-Object {$_.subject -like "*register*"} | Select-Object -ExpandProperty Thumbprint}

Ahora es el momento de utilizar la huella digital para agarrar el certificado completo y asignarlo como un enlace de SSL para cada sitio Web. El comando siguiente utiliza Get-Item para agarrar el certificado y, a continuación, nuevo elemento para crear el enlace SSL; el proveedor IIS IIS:\SSLBindings crea los enlaces SSL junto con la información de enlace:

PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certShop" | new-item -path IIS:\SslBindings\192.168.3.201!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certUpdate" | new-item -path IIS:\SslBindings\192.168.3.202!443} PS> Invoke-Command -Session $session { get-item -Path "cert:\localmachine\my\$certRegister" | new-item -path IIS:\SslBindings\192.168.3.203!443}

En IIS información vinculante se muestra normalmente como IPAddress:Port:Hostname (*: 80: *). Sin embargo, Windows PowerShell interpreta los dos puntos (:) como un indicador de la ruta. Cuando se utiliza Windows PowerShell para configurar información de enlace, utiliza el signo de exclamación (!) en su lugar.

Los enlaces son ahora completos y se pueden llegar a los sitios Web mediante HTTPS, como se muestra aquí:

PS> start iexplore https://shop.company.com PS> start iexplore https://update.company.com PS> start iexplore https://register.company.com

Verificación de caducidad

No hay otra solución útil que emplea toda la información que acabas de aprender. Es un desafío común de negocio para muchos de ustedes: ¿Son sus certificados a punto de caducar?

Parte de la administración de certificados es determinar si algunos están a punto de caducar por lo que pueden reemplazarlos. Puede aplicar los conceptos y las tácticas utilizadas aquí a este problema. Sólo necesitas una línea más. Una vez más, todavía necesitará un abierto de sesión remota de Windows PowerShell para los servidores de Web que desea comprobar para certificados que caducan.

En el ejemplo siguiente se analiza todos los certificados en el almacén de certificados de localmachine. Compara la notafter de propiedad de la caducidad de certificado en la fecha actual en una columna personalizada llamado I ExpireInDays. El filtro (donde-objeto) comprueba si todos los certificados tienen menos de 90 días antes de que caduquen. El comando muestra los nombres de servidor y certificados a punto de caducar:

PS> Invoke-Command -Session $session { Get-ChildItem -Path Cert:\LocalMachine\My | Select-Object -Property PSComputerName, Subject, @{ n='ExpireInDays';e={($_. notafter - (Get-Date)).Days}} | Where-Object {$_.ExpireInDays -lt 90}}

Con todo lo que has aprendido aquí, puede rápidamente y con éxito reemplazar todos los certificados — incluso a gran escala — uso de Windows PowerShell.

Jason Helmick

Jason Helmickes el director de tecnologías de Windows PowerShell para la interfaz de formación técnica, basado en Phoenix, Ariz. Es un altavoz, autor, profesor y Administrador IIS involuntaria.

Contenido relacionado