1858 votes

Qu'est-ce qu'un fichier Pem et en quoi diffère-t-il des autres formats de fichier de clé générés par OpenSSL ?

Je suis responsable de la maintenance de deux serveurs Debian. Chaque fois que je dois faire quelque chose avec des certificats de sécurité, je recherche des tutoriels sur Google et je m'acharne jusqu'à ce que cela fonctionne enfin.

Cependant, dans mes recherches, je rencontre souvent différents formats de fichiers (.key, .csr, .pem), mais je n'ai jamais pu trouver une bonne explication de l'objectif de chaque format de fichier.

Je me demandais si les bons gens ici, sur ServerFault, pourraient apporter quelques éclaircissements à ce sujet ?

4 votes

3 votes

Dans ce gist, j'explique ce qu'un fichier PEM contient généralement et comment convertir le contenu entre différents formats.

0 votes

2267voto

sysadmin1138 Points 129885

SSL a été autour depuis suffisamment longtemps pour penser qu'il y aurait des formats de conteneur convenus. Et vous avez raison, il y en a. Trop de normes en fait. En fin de compte, toutes ces façons différentes d'encoder la Notation Syntaxique Abstraite 1 (ASN.1) sont des façons de formater les données en lecture machine — qui se trouve être le format dans lequel les certificats x509 sont définis.

  • .csr - Il s'agit d'une Demande de Signature de Certificat. Certaines applications peuvent générer ce format pour soumission à des autorités de certification. Le format réel est le PKCS10 qui est défini dans RFC 2986. Il inclut certains/tous les détails clés du certificat demandé tels que le sujet, l'organisation, l'état, etc., ainsi que la clé publique du certificat à signer. Ceux-ci sont signés par l'AC et un certificat est retourné. Le certificat retourné est le certificat public (qui inclut la clé publique mais pas la clé privée), qui lui-même peut être dans quelques formats.
  • .pem - Défini dans le RFC 1422 (partie d'une série allant de 1421 à 1424), c'est un format conteneur qui peut inclure juste le certificat public (tel que dans les installations Apache, et des fichiers de certificat CA /etc/ssl/certs), ou peut inclure toute une chaîne de certificats incluant clé publique, clé privée, et certificats racine. De manière confuse, il peut également encoder une CSR (par exemple tel que utilisé ici) car le format PKCS10 peut être traduit en PEM. Le nom vient de Privacy Enhanced Mail (PEM), une méthode échouée pour les e-mails sécurisés mais le format conteneur qu'il utilisait perdure, et est une traduction en base64 des clés x509 ASN.1.
  • .key - Ceci est un fichier formaté (habituellement) PEM contenant juste la clé privée d'un certificat spécifique et est simplement un nom conventionnel et non standardisé. Dans les installations Apache, cela réside fréquemment dans /etc/ssl/private. Les droits sur ces fichiers sont très importants, et certains programmes refuseront de charger ces certificats s'ils sont incorrectement configurés.
  • .pkcs12 .pfx .p12 - Défini à l'origine par RSA dans les Standards de Cryptographie à Clé Publique (abrégé PKCS), la variante "12" a été à l'origine améliorée par Microsoft, et plus tard soumise en tant que RFC 7292. C'est un format conteneur protégé par mot de passe qui contient à la fois des paires de certificats publics et privés. Contrairement aux fichiers .pem, ce conteneur est entièrement chiffré. Openssl peut convertir ceci en un fichier .pem avec à la fois les clés publiques et privées: openssl pkcs12 -in fichier-a-convertir.p12 -out fichier-converti.pem -nodes

Quelques autres formats qui apparaissent de temps en temps:

  • .der - Une façon d'encoder la syntaxe ASN.1 en binaire, un fichier .pem est juste un fichier .der encodé en Base64. OpenSSL peut convertir ces fichiers en .pem (openssl x509 -inform der -in a-convertir.der -out converti.pem). Windows voit ceux-ci comme des fichiers de Certificat. Par défaut, Windows exportera les certificats sous forme de fichiers formatés .DER avec une extension différente. Comme...
  • .cert .cer .crt - Un fichier formaté .pem (ou rarement .der) avec une extension différente, une extension que Windows Explorer reconnait comme un certificat, ce que .pem n'est pas.
  • .p7b .keystore - Défini dans RFC 2315 comme le PKCS numéro 7, c'est un format utilisé par Windows pour l'interopérabilité des certificats. Java comprend ceux-ci nativement, et utilise souvent .keystore comme une extension à la place. Contrairement aux certificats de style .pem, ce format a une façon définie d'inclure des certificats de chemin de certification.
  • .crl - Une liste de révocation de certificats. Les Autorités de Certification produisent ceci comme moyen de révoquer des certificats avant leur expiration. Vous pouvez parfois les télécharger depuis les sites web des AC.

En résumé, il y a quatre façons différentes de présenter des certificats et leurs composants:

  • PEM - Gouverné par des RFCs, utilisé de manière préférentielle par les logiciels open-source car il est basé sur du texte et donc moins sujet aux erreurs de traduction/transmission. Il peut avoir une variété d'extensions (.pem, .key, .cer, .cert, et plus)
  • PKCS7 - Un standard ouvert utilisé par Java et supporté par Windows. Ne contient pas de matériel de clé privée.
  • PKCS12 - Un standard privé de Microsoft qui a plus tard été défini dans un RFC offrant une sécurité renforcée par rapport au format PEM en texte brut. Cela peut contenir du matériel de clé privée et de chaîne de certificats. Il est utilisé de manière préférentielle par les systèmes Windows, et peut être librement converti en format PEM grâce à l'utilisation de openssl.
  • DER - Le format parent de PEM. Il est utile de le considérer comme une version binaire du fichier PEM encodé en base64. Il n'est pas couramment utilisé en dehors de Windows.

J'espère que cela vous aide.

416 votes

La grande chose à propos des normes est qu'il y en a tellement à choisir...

49 votes

.crt est une autre extension commune pour .cert et .cer.

59 votes

PEM est un format de fichier qui peut comprendre un certificat (alias clé publique), une clé privée ou même les deux concaténés ensemble. Ne faites pas trop attention à l'extension de fichier; cela signifie Privacy Enhanced Mail, une utilisation à laquelle on n'a pas beaucoup donné de poids mais le format de fichier est resté en vigueur.

190voto

Yar Points 25421

PEM en soi n'est pas un certificat, c'est juste une façon d'encoder des données. Les certificats X.509 sont un type de données qui est couramment encodé en utilisant PEM.

PEM est un certificat X.509 (dont la structure est définie en utilisant ASN.1), encodé en utilisant les règles d'encodage distinguées ASN.1 DER, puis passé à travers l'encodage Base64 et placé entre des lignes ancrées en texte brut (BEGIN CERTIFICATE et END CERTIFICATE).

Vous pouvez représenter les mêmes données en utilisant les représentations PKCS#7 ou PKCS#12, et l'utilitaire en ligne de commande openssl peut être utilisé pour le faire.

Les avantages évidents de PEM sont qu'il est sûr de coller dans le corps d'un message électronique car il a des lignes ancrées et est propre à 7 bits.

RFC1422 a plus de détails sur la norme PEM telle qu'elle est liée aux clés et aux certificats.

1 votes

Comment faites-vous cela "en utilisant la ligne de commande openssl"?

10 votes

Pour convertir un fichier DER (.crt .cer .der) en PEM : openssl x509 -inform der -in cert.cer -out cert.pem. Pour convertir un fichier PEM en DER : openssl x509 -outform der -in cert.pem -out certi.der. Pour convertir un fichier PKCS#12 (.pfx .p12) contenant une clé privée et des certificats en PEM : openssl pkcs12 -in keyStore.pfx -out keyStore.pem -nodes. Pour convertir un fichier de certificat PEM et une clé privée en PKCS#12 (.pfx .p12) : openssl pkcs12 -export -out cert.pfx -inkey privateKey.key -in cert.crt -certfile CACert.crt Depuis ici

4 votes

"PEM par lui-même n'est pas un certificat..." et "PEM est un certificat X.509..." sont des phrases un peu controversées.

72voto

mgold Points 721

Parfois, un fichier .crt est déjà un .pem. Voir : https://stackoverflow.com/questions/991758/openssl-pem-key

4 votes

En effet, c'est vrai, je viens de m'en rendre compte aujourd'hui. J'ai dû entrer un certificat PEM dans le répartiteur de charge de rackspace et je me demandais si le crt généré était dans ce format. Mais cela a fonctionné comme ça, donc c'était aussi ma conclusion, il semble que la plupart de ces .crt soient au format PEM.

3 votes

@GlennPlas concentrez-vous plutôt sur le contenu du fichier, pas sur son nom ou son extension. Il pourrait s'appeler .foobar pour autant que cela importe...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X