Comment obtenir un fichier .pem à partir de fichiers .key et .crt?


Réponses:


801

Vos clés peuvent déjà être au format PEM, mais simplement nommées avec .crt ou .key.

Si le contenu du fichier commence par -----BEGINet que vous pouvez le lire dans un éditeur de texte:

Le fichier utilise base64, qui est lisible en format ASCII et non binaire. Le certificat est déjà au format PEM. Modifiez simplement l'extension en .pem.

Si le fichier est en binaire:

Pour le server.crt, vous utiliseriez

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

Pour server.key, utilisez openssl rsaà la place de openssl x509.

Le server.key est probablement votre clé privée et le fichier .crt est le certificat x509 renvoyé et signé.

S'il s'agit d'un serveur Web et que vous ne pouvez pas spécifier le chargement d'une clé privée et publique distincte:

Vous devrez peut-être concaténer les deux fichiers. Pour cette utilisation:

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

Je recommanderais de nommer les fichiers avec "includesprivatekey" pour vous aider à gérer les autorisations que vous conservez avec ce fichier.


2
Vérifiez le format du server.key. Je supposais seulement que c'était RSA. Mais la lecture de la première ligne du fichier vous le dira probablement.
maxwellb

10
Juste un avertissement qui cat server.crt server.key > server.pemne placera pas le commentaire ouvert sur sa propre ligne, ce qui semble être une exigence. Le courrier de messagerie m'a donné l'enfer et il m'a fallu des heures pour comprendre ce qui n'allait pas.
Graham Walters

1
Merci Graham. Différents outils généreront les fichiers différemment et, en fin de compte, une certaine vérification est bonne. Lorsque j'ai effectué ces étapes, les fichiers se terminaient par une nouvelle ligne, par exemple.
maxwellb

L'astuce sur la concaténation des fichiers .crt et .key ensemble a été très utile. Je voulais utiliser mon certificat avec stunnel3, mais il n'avait aucun moyen de spécifier le fichier de clés. L'utilisation de la concaténation a fonctionné. (En fait, puisque stunnel3 est un programme Perl, je lui ai moi-même ajouté une option pour lire le fichier clé. Cependant, depuis que j'ai vu plus tard la concaténation a fonctionné, j'ai rétabli stunnel3 à son code d'origine.)
LS

2
Juste une bosse pour dire que cat server.crt server.key > server.includesprivatekey.pemest utile pour SSL avec haproxy 1.5.
jimm101

224

J'avais besoin de le faire pour un AWS ELB. Après avoir été battu à plusieurs reprises par le dialogue, voici enfin ce qui a fonctionné pour moi:

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

Merci NCZ

Edit: Comme le dit @floatingrock

Avec AWS, n'oubliez pas d'ajouter le nom de fichier avec file://. Cela ressemblera donc à:

 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
Avec AWS, n'oubliez pas d'ajouter le nom de fichier avec file://. Cela ressemblera donc à: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
La deuxième commande ne fait rien si votre entrée est un fichier pem, donc en supposant que ce soit le cas, vous n'avez besoin que de la première commande
Kristofer

Impressionnant! Cela fonctionne bien pour moi! Je viens de convertir mes fichiers .key et .crt en .pem en utilisant vos lignes de code, puis j'ai téléchargé (copier / coller) via la console AWS. Merci!
Diego D

79

Un pemfichier contient le certificat et la clé privée. Cela dépend du format de votre certificat / clé, mais c'est probablement aussi simple que cela:

cat server.crt server.key > server.pem

je continue à obtenir-bash: server.key.pem: Permission denied
tq

2
@tq: Cela signifie que vous n'êtes pas autorisé à lire ou à écrire ce fichier.
STH

merci @sth cherchera la permission. mais je faisais cela avec les commandes sudo
tq

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

2
attention aux sauts de ligne manquants notre fichier pem peut avoir des lignes brouillées comme ----- FIN DU CERTIFICAT ---------- BEGIN CERTIFICATE -----
Wolfgang Fahl

24

De plus, si vous ne souhaitez pas qu'il demande une phrase secrète, vous devez exécuter la commande suivante:

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

9
Si vous voulez un fichier commençant par -----BEGIN RSA PRIVATE KEY-----et en avoir un qui commence par -----BEGIN ENCRYPTED PRIVATE KEY-----, c'est la commande que vous souhaitez utiliser.
Philippe Gerber

18

c'est la meilleure option pour créer un fichier .pem

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

4

Ce que j'ai observé est: si vous utilisez openssl pour générer des certificats, il capture à la fois la partie texte et la partie certificat base64 dans le fichier crt. Le format pem strict indique ( définition wiki ) que le fichier doit commencer et se terminer par BEGIN et END.

.pem - (Privacy Enhanced Mail) Certificat DER encodé en Base64, entre "----- BEGIN CERTIFICATE -----" et "----- END CERTIFICATE -----"

Donc, pour certaines bibliothèques (j'ai rencontré cela en java) qui s'attendent à un format pem strict, le crt généré échouerait la validation en tant que 'format pem invalide'.

Même si vous copiez ou grepez les lignes avec BEGIN / END CERTIFICATE et que vous les collez dans un fichier cert.pem, cela devrait fonctionner.

Voici ce que je fais, pas très propre, mais ça marche pour moi, en gros ça filtre le texte à partir de la ligne BEGIN:

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


1
une autre option consiste simplement à transmettre le certificat non strict openssl x509. Il produira un certificat PEM valide: cat certificate.crt | openssl x509 > certificate.pem
T0xicCode

Si vous voulez tout obtenir, de "COMMENCER" à la fin du fichier, c'est un travail pour sed. Plus précisément, vous voulez quelque chose comme sed -n '/--BEGIN/,$p' cert.crtdans ce cas. Pour expliquer cela: le "-n" indique à sed de ne rien imprimer par défaut, puis l'expression de plage /--BEGIN/,$fait que la pcommande (print) s'applique aux lignes entre la première ligne qui contient --BEGINet la fin du fichier ( $).
dannysauer

4

J'essayais de passer de godaddy au moteur d'application. Qu'est-ce que l'astuce a été d'utiliser cette ligne:

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

Exactement tel quel, mais en remplaçant le nom par mon nom de domaine (pas que cela comptait vraiment)

Et j'ai répondu à toutes les questions concernant le nom commun / l'organisation comme www.name.com

Ensuite, j'ai ouvert le csr, l'ai copié, collé dans go daddy, puis téléchargé, décompressé, navigué vers le dossier décompressé avec le terminal et entré:

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

J'ai ensuite utilisé ces instructions de Trouble with Google Apps Custom Domain SSL , à savoir:

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

exactement comme c'est, sauf au lieu de privateKey.key j'ai utilisé name.unencrypted.priv.key, et au lieu de www_mydomain_com.crt, j'ai utilisé name.crt

Ensuite, j'ai téléchargé le fichier public.pem sur la console d'administration pour le "certificat X.509 codé PEM", et j'ai téléchargé le fichier private.pem pour la "clé privée RSA codée PEM non cryptée" ..

.. Et cela a finalement fonctionné.


4

En essayant de télécharger un certificat GoDaddy sur AWS, j'ai échoué plusieurs fois, mais au final, c'était assez simple. Pas besoin de convertir quoi que ce soit en .pem. Vous devez juste être sûr d'inclure le certificat de bundle GoDaddy dans le paramètre de chaîne, par exemple

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

Et pour supprimer votre téléchargement précédent, vous pouvez le faire

aws iam delete-server-certificate --server-certificate-name mypreviouscert

Cela n'a pas fonctionné pour moiAn error occurred (MalformedCertificate) when calling the UploadServerCertificate operation: Unable to parse certificate. Please ensure the certificate is in PEM format.
Adam Raudonis

4
  1. Téléchargez le certificat du portail provisoire par appleId,
  2. Exporter le certificat depuis le porte-clés et donner le nom (Certificates.p12),
  3. Ouvrez le dossier terminal et goto où vous enregistrez au-dessus du fichier Certificates.p12,
  4. Exécutez les commandes ci-dessous:

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

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

  5. Votre fichier .pem prêt "pushcert.pem".

0
  • Terminal ouvert.
  • Accédez au dossier où se trouve votre certificat.
  • Exécutez la commande ci-dessous en remplaçant nom par votre certificat.

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

  • J'espère que cela fonctionnera !!
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.