¿Cómo obtener el archivo .pem de los archivos .key y .crt?

¿Cómo puedo crear un archivo PEM desde un certificado SSL?

Estos son los archivos que tengo disponibles:

  • .crt
  • server.csr
  • server.key

Es posible que sus claves ya estén en formato PEM, pero solo se hayan nombrado con .crt o .key.

Si el contenido del archivo comienza con -----BEGIN y puede leerlo en un editor de texto:

El archivo usa base64, que es legible en formato ASCII, no binario. El certificado ya está en formato PEM. Simplemente cambie la extensión a .pem.

Si el archivo está en binario:

Para server.crt, usarías

 openssl x509 -inform DER -outform PEM -in server.crt -out server.crt.pem 

Para server.key, use openssl rsa en lugar de openssl x509 .

El servidor.key es probablemente su clave privada, y el archivo .crt es el certificado devuelto, firmado, x509.

Si esto es para un servidor web y no puede especificar cargar una clave privada y pública separada:

Es posible que necesite concatenar los dos archivos. Para este uso:

 cat server.crt server.key > server.includesprivatekey.pem 

Recomendaría nombrar archivos con “includesprivatekey” para ayudarlo a administrar los permisos que conserva con este archivo.

Necesitaba hacer esto para AWS ELB. Después de haber sido golpeado por el diálogo muchas veces, finalmente esto es lo que funcionó para mí:

 openssl rsa -in server.key -text > private.pem openssl x509 -inform PEM -in server.crt > public.pem 

Gracias NCZ

Editar: como dice @floatingrock

Con AWS, no olvide incluir el nombre de file:// en file:// . Entonces se verá así:

  aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://path/to/server.crt --private-key file://path/to/private.key --path /cloudfront/static/ 

http://docs.aws.amazon.com/cli/latest/reference/iam/upload-server-certificate.html

Un archivo pem contiene el certificado y la clave privada. Depende del formato de su certificado / clave, pero probablemente sea tan simple como esto:

 cat server.crt server.key > server.pem 

Además, si no desea que solicite una frase de contraseña, debe ejecutar el siguiente comando:

 openssl rsa -in server.key -out server.key 

esta es la mejor opción para crear el archivo .pem

 openssl pkcs12 -in MyPushApp.p12 -out MyPushApp.pem -nodes -clcerts 

Lo que he observado es: si usa openssl para generar certificados, captura tanto la parte del texto como la parte del certificado base64 en el archivo crt. El formato de pem estricto dice ( definición wiki ) que el archivo debe comenzar y terminar con BEGIN y END.

.pem – (Correo mejorado de privacidad) Certificado BAS codificado en Base64, encerrado entre “—– BEGIN CERTIFICATE —–” y “—– END CERTIFICATE —–”

Entonces, para algunas bibliotecas (encontré esto en Java) que esperan un formato de pem estricto, el crt generado fallaría la validación como un “formato de pem no válido”.

Incluso si copia o grep las líneas con BEGIN / END CERTIFICATE, y lo pega en un archivo cert.pem, debería funcionar.

Esto es lo que hago, no muy limpio, pero funciona para mí, básicamente filtra el texto comenzando desde la línea BEGIN:

grep -A 1000 BEGIN cert.crt> cert.pem

Estaba tratando de pasar de godaddy al motor de aplicaciones. ¿Cuál fue el truco usando esta línea?

 openssl req -new -newkey rsa:2048 -nodes -keyout name.unencrypted.priv.key -out name.csr 

Exactamente como es, pero reemplazando el nombre con mi nombre de dominio (aunque realmente no importó)

Y respondí todas las preguntas relacionadas con el nombre / organización común como http://www.name.com

Luego abrí el csr, lo copié, lo pegué en go daddy, luego lo descargué, lo descomprimí, navegué hasta la carpeta descomprimida con el terminal e ingresé:

 cat otherfilegodaddygivesyou.crt gd_bundle-g2-g1.crt > name.crt 

Luego usé estas instrucciones de Trouble with Google Apps Custom Domain SSL , que fueron:

 openssl rsa -in privateKey.key -text > private.pem openssl x509 -inform PEM -in www_mydomain_com.crt > public.pem 

exactamente como está, excepto que en lugar de privateKey.key utilicé name.unencrypted.priv.key, y en lugar de www_mydomain_com.crt, utilicé name.crt

Luego cargué el public.pem en la consola de administración para el “certificado X.509 codificado en PEM”, y cargué el private.pem para la “clave privada RSA codificada PEM no encriptada”.

.. Y eso finalmente funcionó.

Al intentar cargar un certificado de GoDaddy a AWS fallé varias veces, pero al final fue bastante simple. No es necesario convertir nada a .pem. Simplemente debe asegurarse de incluir el certificado del paquete GoDaddy en el parámetro de la cadena, por ejemplo

 aws iam upload-server-certificate --server-certificate-name mycert --certificate-body file://try2/40271b1b25236fd1.crt --private-key file://server.key --path /cloudfront/production/ --certificate-chain file://try2/gdig2_bundle.crt 

Y para eliminar su carga fallida anterior puede hacer

 aws iam delete-server-certificate --server-certificate-name mypreviouscert 
  1. Descargar certificado del portal provisional por appleId,
  2. Exportar certificado de Key chain y dar nombre (Certificates.p12),
  3. Abra el terminal y vaya a la carpeta donde guarda el archivo de arriba de Certificates.p12,
  4. Ejecutar debajo de los comandos:

    a) openssl pkcs12 -in Certificates.p12 -out CertificateName.pem -nodes ,

    b) openssl pkcs12 -in Certificates.p12 -out pushcert.pem -nodes -clcerts

  5. Su archivo .pem listo “pushcert.pem”.
  • Terminal abierto.
  • Vaya a la carpeta donde se encuentra su certificado.
  • Ejecute el comando debajo reemplazando el nombre con su certificado.

openssl pkcs12 -en YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts

  • Espero que funcione!