¿Cómo puedo crear un archivo PEM a partir de un certificado SSL?
Estos son los archivos que tengo disponibles:
.crt
server.csr
server.key
¿Cómo puedo crear un archivo PEM a partir de un certificado SSL?
Estos son los archivos que tengo disponibles:
.crt
server.csr
server.key
Respuestas:
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 -----BEGIN
y 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 rsa
en 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.
cat server.crt server.key > server.pem
no 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.
server.crt server.key > server.includesprivatekey.pem
es útil para SSL con haproxy 1.5.
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
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/
Un pem
archivo 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
-bash: server.key.pem: Permission denied
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
-----BEGIN RSA PRIVATE KEY-----
y tiene uno que comience -----BEGIN ENCRYPTED PRIVATE KEY-----
, este es el comando que desea usar.
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
openssl x509
. cat certificate.crt | openssl x509 > certificate.pem
sed -n '/--BEGIN/,$p' cert.crt
en 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 p
comando (imprimir) se aplique a las líneas entre la primera línea que contiene --BEGIN
y el final del archivo ( $
).
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ó.
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
An error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
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
openssl pkcs12 -in YOUR_CERTIFICATE.p12 -out YOUR_CERTIFICATE.pem -nodes -clcerts
.pem
a.crt
y.key
.