Si quieres aprender cómo generar una solicitud de certificado de IIS, has llegado al lugar correcto. En este artículo, voy a explicar cómo hice esto con PowerShell y también cómo vincular un certificado a un sitio web de IIS.
Dejemos las cosas claras. Odio la criptografía y los certificados. A lo largo de mi carrera, he sido el “chico de los certificados” en algunas ocasiones. Sin embargo, era solo otro sombrero para un administrador de sistemas.
I never got to the point where I completely understood the technology and it seemed like every task I tried to accomplish around that area seemed to never work out. It’s definitely an unforgiving technology for sure.
Déjame contarte una historia sobre cómo automatizar la instalación de un certificado en un servidor de IIS con PowerShell.
La misión
Desde un cliente, solicitar un nuevo certificado público de Digicert, instalarlo en un servidor remoto de Windows Server 2012 R2 Core que ejecute IIS 8.5 en un grupo de trabajo, establecer una asignación de SSL a un sitio web y utilizar el certificado instalado para la asignación. Sencillo, ¿verdad? ¡Ja, ja!
Cómo se hace, hijo
En pocas palabras, se necesitan X pasos para lograr esto.
- Generar una solicitud de firma de certificado de IIS en la computadora donde se instalará el certificado. En mi caso, solo tenía acceso a WinRM, por lo que tuve que ejecutar certreq.exe en el servidor remoto utilizando
Invoke-Command
y enviar el contenido de la solicitud de certificado a un archivo local. - Obtenga el CSR firmado por una CA pública. (No ayuda aquí, acaba de regresar una bonita certificación de seguridad con la que trabajé). En mi caso, el equipo de seguridad me devolvió una colección P7B de certificaciones enrolladas en un archivo .CER que incluía el certificado que estaba buscando, así como los certificados intermedios. Esto requirió un poco de ajuste para funcionar.
- Complete la solicitud de firma de certificado en la computadora donde se instalará el certificado. Esto colocará el certificado en el almacén de certificados.
- Cree un enlace web SSL IIS en el servidor.
- Adjunte el certificado al enlace web.
Generando la Solicitud de Certificado de IIS
Su primera tarea será ejecutar certreq.exe con este script de PowerShell de IIS en el servidor remoto para recopilar un archivo de solicitud. Para hacer esto, certreq.exe requiere un archivo INF como entrada. Este archivo se utiliza para todas las diferentes opciones que su certificado terminará teniendo. Sin entrar en muchos detalles, esta es una copia del archivo INF que estaba utilizando.
Verá en la función New-CertificateSigningRequest
que lo hago muy fácil para que personalice esto. En realidad, si utiliza mis funciones, ni siquiera verá este archivo, ya que solo se necesita temporalmente para crear el CSR (archivo de solicitud).
A continuación, deberá obtener este archivo INF en el servidor remoto y ejecutar certreq.exe con los siguientes parámetros como certreq.exe -new "$InfFilePath" "$reqFilePath"
.
Esto generará un archivo CSR (solicitud) en el equipo remoto. Luego deberá enviar este archivo a su equipo de seguridad. Esto también creará un certificado que contiene tanto la clave privada como la clave pública en la sección Solicitudes de emisión de certificados en el contexto de la máquina local.

Completando la solicitud de certificado de IIS
En mi caso, recibí un único archivo CER. Creé una función en este script de PowerShell IIS para importarlo directamente en el almacén Personal en el contexto de la máquina local, pero no podía verlo en IIS. La razón era que el certificado también debía contener la clave privada. Simplemente importar el certificado en el almacén Personal no funcionaría. Tuve que completar la solicitud de certificado usando certreq.exe.
Para hacer esto, deberá copiar el certificado que reciba de su equipo de seguridad en el servidor remoto y luego ejecutar certreq.exe de la siguiente manera: certreq.exe -accept -machine "C:\issuedcert.cer"
.
Siempre deberá asegurarse de que el certificado de respuesta vaya al contexto de la máquina local utilizando el parámetro -machine
. Esto debería completarse correctamente según todo lo que leí, pero definitivamente no fue así en mi caso. Por alguna razón, estaba recibiendo un error que se veía así:

Resulta que esto significa que la clave pública en el archivo de solicitud no coincide con lo que devolvió el equipo de seguridad. Para probar esto, simplemente ejecute certutil.exe -dump requestfile.req
y certutil -dumpissuedcert.cer
. Desplácese hacia abajo en la salida hasta que vea el área de la clave pública.

Copia cada una de estas claves privadas y compáralas en un editor de texto para asegurarte de que sean iguales. ¡Si no lo son, contacta a tu equipo de seguridad por no firmar tu solicitud correctamente!
Si coinciden, estás bien y no deberías recibir ese error.
Crea el Vínculo SSL
En el servidor remoto, ejecuta:
Adjunta el Certificado al Vínculo SSL
En el servidor remoto, ejecuta:
Obtén el Script de PowerShell para IIS
¡Si todo va bien, deberías haber terminado! Ahora, si necesitas un poco de ayuda para hacer esto, he creado tres funciones para que sea mucho más fácil. Dirígete a mi repositorio en Github para obtener las funciones:
https://github.com/adbertram/Random-PowerShell-Work/tree/master/Certificates
https://github.com/adbertram/Random-PowerShell-Work/tree/master/IIS
Código de ejemplo
Lectura relacionada
Asegúrate de revisar otras publicaciones en el blog de ATA sobre cómo gestionar IIS con PowerShell
Source:
https://adamtheautomator.com/iis-certificate-request/