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


Respuestas:


801

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

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

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

Si el archivo está en binario:

Para el servidor.crt, usaría

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

Para server.key, use openssl rsaen lugar de openssl x509.

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

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

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

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

Recomendaría nombrar archivos con "incluye clave privada" para ayudarlo a administrar los permisos que mantiene con este archivo.


2
Verifique el formato de server.key. Solo asumí que era RSA. Pero leer la primera línea del archivo probablemente te dirá eso.
maxwellb

10
Solo un aviso que cat server.crt server.key > server.pemno colocará el comentario abierto en su propia línea, lo que parece ser un requisito. El correo de mensajería me dio un infierno y me llevó horas descubrir qué iba mal.
Graham Walters

1
Gracias Graham Diferentes herramientas generarán los archivos de manera diferente y, en última instancia, algunas verificaciones son buenas. Cuando realicé estos pasos, los archivos terminaron con una nueva línea, por ejemplo.
maxwellb

El consejo sobre la concatenación de los archivos .crt y .key juntos fue muy útil. Quería usar mi certificado con stunnel3, pero no tenía forma de especificar el archivo de clave. Utilizando la concatenación funcionó. (En realidad, ya stunnel3 es un programa Perl, he añadido una opción para mí mismo para leer el archivo de la clave Sin embargo, desde que vi más tarde la concatenación trabajado, he invertí stunnel3 a su código original..)
LS

2
Solo un golpe para decir que cat server.crt server.key > server.includesprivatekey.pemes útil para SSL con haproxy 1.5.
jimm101

224

Necesitaba hacer esto para un AWS ELB. Después de ser 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 olvides anteponer el nombre del archivo con 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


19
Con AWS, no olvides anteponer el nombre del archivo con file://. Entonces se verá así:aws iam upload-server-certificate --server-certificate-name blah --certificate-body file://~/Desktop/server.crt --private-key file://~/Desktop/private.key --path /cloudfront/static/
FloatingRock

1
El segundo comando no hace nada si su entrada es un archivo pem, por lo que suponiendo que lo sea, solo necesita el primer comando
Kristofer el

¡Increíble! ¡Esto funcionó bien para mí! Acabo de convertir mis archivos .key y .crt a .pem usando sus líneas de código y luego cargué (copiar / pegar) a través de la consola de AWS. ¡Gracias!
Diego D

79

Un pemarchivo contiene el certificado y la clave privada. Depende del formato en que se encuentre su certificado / clave, pero probablemente sea tan simple como esto:

cat server.crt server.key > server.pem

sigo recibiendo-bash: server.key.pem: Permission denied
tq

2
@tq: Eso significa que no tienes permiso para leer o escribir ese archivo.
algo

gracias @sth buscará permiso. pero estaba haciendo esto con los comandos sudo
tq

8
@tq: cat server.crt server.key | sudo tee server.pem
dimir

2
cuidado con las nuevas líneas faltantes, nuestro archivo pem podría tener líneas ilegibles como ----- CERTIFICADO FINAL ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl

24

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

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

99
Si desea un archivo que comience -----BEGIN RSA PRIVATE KEY-----y tiene uno que comience -----BEGIN ENCRYPTED PRIVATE KEY-----, este es el comando que desea usar.
Philippe Gerber

18

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

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

4

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

.pem - (Privacy Enhanced Mail) Certificado DER codificado en Base64, 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á la validación como un 'formato de pem no válido'.

Incluso si copia o agrupa 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 a partir de la línea BEGIN:

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


1
Otra opción es simplemente pasar el certificado no estricto openssl x509. cat certificate.crt | openssl x509 > certificate.pem
Producirá

Si desea obtener todo, desde "BEGIN" hasta el final del archivo, es un trabajo para sed. Específicamente, quieres algo como sed -n '/--BEGIN/,$p' cert.crten este caso. Para explicar eso: el "-n" le dice a sed que no imprima nada de manera predeterminada, y luego la expresión de rango /--BEGIN/,$hace que el pcomando (imprimir) se aplique a las líneas entre la primera línea que contiene --BEGINy el final del archivo ( $).
dannysauer

4

Intenté pasar de godaddy a motor de aplicaciones. ¿Cuál fue el truco fue usar 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 (no es que realmente importara)

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

Luego abrí el csr, lo copié, lo pegué en Go Daddy, luego lo descargué, lo descomprimí, navegué a la carpeta descomprimida con el terminal e ingresé:

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

Luego utilicé estas instrucciones de Problemas con el dominio personalizado de Google Apps SSL , que fueron:

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

exactamente como es, excepto que en lugar de privateKey.key usé name.unencrypted.priv.key, y en lugar de www_mydomain_com.crt, usé name.crt

Luego cargué public.pem a la consola de administración para obtener el "certificado X.509 codificado por PEM", y cargué el private.pem por la "clave privada RSA codificada por PEM sin cifrar".

.. Y eso finalmente funcionó.


4

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

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

Esto no funcionó para míAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. Descargar certificado del portal provisional por appleId,
  2. Exporte el certificado del llavero y dé el nombre (Certificados.p12),
  3. Abra el terminal y vaya a la carpeta donde guarda el archivo de Certificados.p12,
  4. Ejecute los siguientes comandos:

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

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

  5. Su archivo .pem listo "pushcert.pem".

0
  • Terminal abierto
  • Vaya a la carpeta donde se encuentra su certificado.
  • Ejecute el siguiente comando reemplazando el nombre con su certificado.

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

  • ¡Espero que funcione!
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.