09 septiembre, 2017

Convertir certificados digitales .pfx .csr .pem o .crt y extraer la clave privada de certificados con OpenSSL

En Windows Server cuando se genera un certificado autofirmado por el propio servidor este se puede exportar por defecto en formato .pfx. Los certificados en formato .pfx contienen tanto la clave pública como la privada.

Comentará antes las diferencias que existen entre los diferentes formatos más frecuentes de certificados.

  • .csr (Certificate Signing Request): Sería el archivo generado normalmente por el servidor que usará el certificado SSL. El CSR contiene información relativa a la organización.
  • .key: Es el archivo de clave de privada para cifrar las solicitudes.
  • .pem .crt .cert .cer: Ambos son usados indistintamente. .pem contiene el certificado y la clave, mientras que un fichero .crt solo contiene el certificado.
  • .crl (Certificate Revocation List): Fichero que contiene una lista de recovación de certificados.
  • .pkcs12 .p12 .pfx: Se usa en servidores Windows. Cotiene todos los archivos en un único archivo, tanto la clave pública como la clave privada asociada, generada por el servidor en el momento en el que se generó el CSR.

Si necesitamos extraer la clave privada podemos usar OpenSSL el cual utilizará uno de los estándares de criptografía PKCS (Public-Key Cryptography Standards) concretamente PKCS#12 (formatos PFX) que define un formato de fichero usado comúnmente para almacenar claves privadas con su certificado de clave pública protegido mediante clave simétrica (es decir, una passphrase o contraseña).

Exportamos el certificado autofirmado del servidor IIS. Estará en formato PKCS#12.

Figura 1: Exportando certificado del servidor IIS.

Podemos exportar dicho certificado del propio equipo local a través de la consola de Microsoft para la administración de certificados certmgr.msc. Agregar administrador de certificados a través de un MMC. En el asistente de exportación nos permite la opción de incluir la clave privada en el certificado.

Figura 2: Exportando certificado desde certmgr.msc

Descargar OpenSSL para Windows. A través de una CLI de Windows Server ejecutamos OpenSSL con PKCS12 para la obtención de la clave privada del certificado. Tendremos que extraer el certificado (clave pública), la clave privada (nos pedirá la contraseña en ambos casos) y finalmente eliminar el passphrase de la clave privada extraída.

Figura 3: Usando OpenSSL para la extracción de certificados.


Extraer la clave pública del certificado .pfx
openssl pkcs12 -in certificado.pfx -out clavepublica.pem -nokeys
certificado.pfx: Certificado pfx del servidor.
clavepublica.pem: Clave pública. (También se podría exportar a un formato de salida .crt o .cer).
-nokeys: Separará la clave pública de la clave privada del certificado .pfx.

Figura 4: Fichero de salida de la clave pública.


Extraer la clave privada del certificado .pfx
openssl pkcs12 -in certificado.pfx -out claveprivada.pem -nocerts -nodes
certificado.pfx: Certificado pfx del servidor.
claveprivada.pem: Clave privada. (También se podría exportar a un formato de salida .crt o .cer).
-nocerts: Separará la clave privada de la clave pública del certificado .pfx.
-nodes: No cifra la salida de la clave privada (quedando visible en texto plano).

Figura 5: Fichero de salida de la clave privada en texto plano (-nodes).


Eliminar la contraseña de la clave privada extraída del certificado .pfx
openssl rsa -in claveprivada.pem -out claveprivadasinpassphrase.key
Figura 6: Fichero de salida de la clave privada sin passphrase.

Con esto finalmente tendremos la clave privada sin contraseña para poder utilizarla en lo que nos sea necesario.


Convertir certificados CRT, CRT (CA) y clave privada .key a un solo archivo PFX

En el caso de tener el archivo .crt del certificado en sí, el archivo .crt de la CA y el archivo de la clave privada en un .key. Para poder fusionar estos tres ficheros en un solo fichero .pfx (usado en sistemas Windows).
openssl pkcs12 -export -out certificate.pfx -inkey rsaprivate.key -in certificate.crt -certfile fileca.crt
  • certificate.pfx: Certificado de salida en formato pfx.
  • rsaprivate.key: La clave privada.
  • certificate.crt: La clave pública.
  • fileca.crt: Fichero de autoridad de la entidad de certificadora (CA)

Saludos!

No hay comentarios:

Publicar un comentario

Entradas Relacionadas