En este post, que forma parte de nuestra serie «cómo gestionar certificados SSL en sistemas Windows y Linux», mostraremos cómo convertir un certificado SSL a los formatos más comunes definidos en los estándares X.509: el formato PEM y el formato PKCS#12, también conocido como PFX. El proceso de conversión se llevará a cabo mediante el uso de OpenSSL, una herramienta gratuita disponible para plataformas Linux y Windows.
Antes de entrar en los comandos de consola de OpenSSL recomendamos echar un vistazo a nuestro resumen de X.509 y los formatos de archivo de certificados SSL más populares: CER, CRT, PEM, DER, P7B, PFX, P12, etc.
Instalación de OpenSSL
Lo primero que hay que hacer es asegurarse de que el sistema tiene instalado OpenSSL: se trata de una herramienta que proporciona una implementación de código abierto de los protocolos SSL y TLS y que puede utilizarse para convertir los archivos de certificados en los formatos más populares basados en X.509 v3 más populares.
OpenSSL en Linux
Si estás usando Linux, puedes instalar OpenSSL con el siguiente comando de consola YUM:
> yum install openssl
|
Si tu distribución está basada en APT en lugar de YUM, puedes utilizar el siguiente comando en su lugar:
1
|
> apt-get install openssl
|
OpenSSL en Windows
Si usas Windows, puedes instalar una de las muchas implementaciones de código abierto de OpenSSL: la que podemos recomendar es Win32 OpenSSL de Shining Light Production, disponible como versión ligera o completa, ambas compiladas en modo x86 (32 bits) y x64 (64 bits) . Puedes instalar cualquiera de estas versiones, siempre que tu sistema las soporte.
OpenSSL es básicamente una aplicación de consola, lo que significa que la utilizaremos desde la línea de comandos: una vez finalizado el proceso de instalación, es importante comprobar que la carpeta de instalación (C:\Archivos de programa\NOpenSSL-Win64\Npara la versión de 64 bits) ha sido añadida al PATH del sistema (Panel de control > Sistema> Avanzado > Variables de entorno): si no es el caso, recomendamos encarecidamente añadirla manualmente, para evitar escribir la ruta completa del ejecutable cada vez que tengas que lanzar la herramienta.
Una vez instalado OpenSSL, podremos utilizarlo para convertir nuestros certificados SSL en varios formatos.
De PEM (pem, cer, crt) a PKCS#12 (p12, pfx)
Este es el comando de consola que podemos utilizar para convertir un archivo de certificado PEM (extensiones .pem, .cer o .crt), junto con su clave privada (.key), en un único archivo PKCS#12 (extensiones .p12 y .pfx):
1
|
> openssl pkcs12 -export -in certificado.crt -inkey privatekey.key -out certificate.pfx
|
Si también tienes un archivo de certificados intermedios (por ejemplo, CAcert.crt) , puede añadirlo al «bundle» utilizando el parámetro del comando -certfile de la siguiente manera:
1
|
> openssl pkcs12 -export -in certificado.crt -inkey privatekey.key -out certificate.pfx -certfile CAcert.cr
|
De PKCS#12 a PEM
Si necesita «extraer» un certificado PEM (.pem, .cer o .crt) y/o su clave privada (.key)de un único archivo PKCS#12 (.p12 o .pfx), necesita emitir dos comandos.
El primero es para extraer el certificado:
1
|
> openssl pkcs12 -en el certificado.pfx -nokey -out certificado.crt
|
Y una segunda sería recuperar la clave privada:
1
|
> openssl pkcs12 -in certificado.pfx -out privatekey.key
|
IMPORTANTE: la clave privada obtenida con el comando anterior estará en formato cifrado: para convertirla en formato RSA, necesitarás introducir un tercer comando:
1
|
> openssl rsa -in privatekey.key -out privatekey_rsa.key
|
Huelga decir que, dado que PKCS#12 es un formato protegido por contraseña, para ejecutar todos los comandos anteriores se le pedirá la contraseña que se ha utilizado al crear el archivo .pfx.
Desde DER (.der, cer) a PEM
1
|
> openssl x509 -inform der -in certificado.cer -out certificado.pem
|
De PEM a DER
1
|
> openssl x509 -certificado outform der -in.pem -out certificado.der
|
De PEM a PKCS#7 (.p7b, .p7c)
1
|
> openssl crl2pkcs7 -nocrl -certfile certificado.pem -out certificado.p7b -certfile CAcert.cer
|
De PKCS#7 a PEM
1
|
> openssl pkcs7 -print_certs -en el certificado.p7b -out certificado.pem
|
De PKCS#7 a PFX
1
2
>
openssl pkcs7 -print_certs -in nombredelcertificado.p7b -out certificatename.cer > openssl pkcs12 -export -in certificatename.cer -inkey privateKey.key -out certificatename.pfx -certfile cacert.cer
|
Convertidores SSL en línea
Si no puedes (o no quieres) instalar OpenSSL, puedes convertir tus certificados SSL utilizando una de estas herramientas en línea basadas en la web:
- Herramienta de conversión de certificados SSL de SSLShopper.com
- SSL Converter by NameCheap
Ambos funcionan realmente bien y pueden convertir la mayoría, si no todos, los formatos detallados anteriormente: al mismo tiempo, tienes que pensar seriamente en las implicaciones de seguridad que conlleva subir tus certificados SSL (y posiblemente sus claves privadas) a un servicio de terceros. Por muy fiables y seguros que sean esos dos sitios a día de hoy, seguimos sin recomendar ese movimiento.
Conclusiones
Esto es todo, al menos por el momento: esperamos que estos comandos sean útiles para aquellos desarrolladores y administradores de sistemas que necesiten convertir certificados SSL en los distintos formatos que requieren sus aplicaciones.
¡Hasta la próxima!