Crear certificado para Webserver
Si tiene la necesidad de crear un certificado con la PKI para una web interna. Suponiendo que el dominio de la web va a ser test.psc.local.
Generar WARNING!
Actualmente da problemas por el campo SAN (Subject Alternative Name) ya que aunque al generar la key + csr se le indica, parece que al firmarlo con el nodo SUB CA, este elimina dicho campo. Esto provoca que los navegadores actuales siga saliendo el error, sin embargo en Internet Explorer es marcado como correcto. Pendiente de revisar como hacer que se firme con el SAN sin tener que especificar el dominio en la config del template.
Hay gente que indica que se añada el extensions=copy pero talCSR y como indican otros, es un peligro, ya que alguien podría solicitar en su CSR el campo CA=TRUE y le estariamos firmando una SUBCA.
Crear certificado desde SUBCA
Si usted se encarga de generar los certificados y administrar las web del entorno, entonces puede generar el certificado directamente desde la Subca y luego mover los ficheros al servidor que hara uso de ellos.
cd /root/ca
openssl genrsa -aes256 \
-out intermediate/private/test.psc.local.key 4096
cd /root/ca
openssl req -config intermediate/sub-ca-openssl.cnf \
-key intermediate/private/test.psc.local.key \
-new -sha512 -out intermediate/csr/test.psc.local.csr \
-addext "subjectAltName = DNS:test.psc.local" \
Se le preguntará por una password y los datos. Recuerde mantener en medida de lo posible, todos aquellos datos que identifican la empresa.
Este comando generará dos ficheros,
test.psc.local.key: Clave privada que no debe compartir con nadietest.psc.local.csr: Certificate Sign Request (petición de firma) que ha de firmar con la PKI para generar el certificado público (.crt / .pem)
Copie el fichero en la SUBCA y firmelo con el siguiente comando. Se eligen 375 días ya que navegadores como Chrome no permiten una longitud mas larga y darán error. Si no usa Chrome en el entorno, puede aumentar los dias (siempre y cuando no superen el máximo de la SubCA, 10 años).
cd /root/ca
openssl ca -config intermediate/sub-ca-openssl.cnf \
-extensions server_cert \
-days 375 -notext -md sha512 \
-in intermediate/csr/test.psc.local.csr \
-out intermediate/certs/test.psc.local.crt
Se le solicitará la contraseña de la clave privada de la SubCA. Copie los ficheros .key y .crt al servidor que alojará la web y configure el servidor Web con dichos certificados.
Generar request desde nodo externoKEY
Si el equipo IT de otra ciudad nos solicita un certificado, lo ideal sería que ellos generaran la request (quedando en sus manos la clave privada) y enviando unicamente el CSR.
Para generar el certificado, deben usar el siguiente comando (teniendo en cuenta los que valores del campo Subj
)
openssl req -nodes -new -newkey rsa:4096 \
-keyout test.psc.local.key \
-out test.psc.local.csr \
-addext "subjectAltName = DNS:test.psc.local" \
-subj "/C=ES/ST=Barcelona/L=Barcelona/O=GRG-CA/OU=GRG-CA/emailAddress=your@email.dot/CN=test.psc.local/"
Firmar con la SUBCA
Usted como administrador ha recibido una fichero CSR y debe firmarlo para poder generar el certificado y enviarselo al equipo IT.
Suponiendo que el certificado lo ha subido al servidor SubCA a la ruta /root/test.psc.local.csr
debe ejecutar el siguiente comando. Consulte con el que le ha enviado los días de validez que ha de tener el certificado, teniendo en cuenta las limitaciones que imponen navegadores como Chrome respecto a el tiempo de validez.
cd /root/ca
openssl ca -config intermediate/sub-ca-openssl.cnf \
-extensions server_cert \
-days 375 -notext -md sha512 \
-in /root/test.psc.local.csr \
-out /root/test.psc.local.crt
Validar firma y certificado
Una vez ha sido firmado, puede consultar en el archivo /root/ca/intermediate/subordinate-ca-database.txt
que ha quedado registrada la firma.
A continuación valide que el certificado tiene los datos correctamente configurados
openssl x509 -noout -text -in test.psc.local.crt
Debería ver los siguientes datos
Atributo | Datos |
---|---|
Issuer | Firmado por la SubCA |
Subject | Datos propios del certificado |
CA | False (No se podrá usar para firmar peticiones de certificados) |
Verifique la cadena de certificación con el comando, debería devolver como resultado OK
openssl verify -CAfile full-chain.pem test.psc.local.crt
Copie el fichero .crt
ya firmado y envielo al solicitante. Para ello deberá añadir al certificado la full-chain (Subca + RootCA).
cat test.psc.local.crt sub-ca.crt root-ca.crt > test.psc.local.fullchain.crt
Si ejecuta un cat test.psc.local.fullchain.crt | grep BEGIN
deberían aparecer 3.
Convertir a formato PFX
Los servidores Web IIS de Microsoft solo admiten el formato PFX. Puede convertir el .key y el .crt a dicho formato haciendo uso del siguiente comando.
openssl pkcs12 -export \
-out test.psc.local.pfx \
-inkey test.psc.local.key \
-in test.psc.local.pem