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 cherche des tutoriels sur Google et je me démène jusqu'à ce que ça marche enfin.
Cependant, au cours de mes recherches, je tombe souvent sur différents formats de fichiers (.key
, .csr
, .pem
) mais je n’ai jamais pu trouver une bonne explication de la finalité de chaque format de fichier.
Je me demandais si les bonnes gens de ServerFault pouvaient fournir quelques éclaircissements à ce sujet ?
SSL existe depuis assez longtemps pour que l'on puisse penser qu'il existe des formats de conteneurs reconnus. Et vous avez raison, il y en a. Il y a trop de normes comme ça. Voici donc ce que je sais, et je suis sûr que d'autres personnes apporteront leur contribution.
/etc/ssl/certs
), ou peut inclure une chaîne de certificat entière incluant la clé publique, la clé privée, et les certificats racine. Il peut également encoder un CSR (par exemple, tel qu'utilisé [ici][4]) car le format PKCS10 peut être traduit en PEM. Le nom provient de [Privacy Enhanced Mail (PEM)] (https://en.wikipedia.org/wiki/Privacy-enhanced_Electronic_Mail), une méthode de sécurisation du courrier électronique qui a échoué, mais le format de conteneur qu'il utilisait a survécu, et est une traduction en base64 des clés ASN.1 x509./etc/ssl/private
. Les droits sur ces fichiers sont très importants, et certains programmes refuseront de charger ces certificats s'ils sont mal définis.openssl pkcs12 -in file-to-convert.p12 -out converted-file.pem -nodes
Quelques autres formats qui apparaissent de temps en temps :
openssl x509 -inform der -in to-convert.der -out converted.pem
). Windows les voit comme des fichiers de certificat. Par défaut, Windows exporte les certificats sous forme de fichiers au format .DER avec une extension différente. Comme....keystore
comme extension à la place. Contrairement aux certificats de style .pem, ce format a une façon définie d'inclure les certificats de chemin de certification.En résumé, il existe quatre façons différentes de présenter les certificats et leurs composants :
J'espère que cela vous aidera.
[1] : https://tools.ietf.org/html/rfc2986 [2] : https://tools.ietf.org/html/rfc1421 [3] : https://tools.ietf.org/html/rfc1424 [4] : https://jamielinux.com/docs/openssl-certificate-authority/create-the-intermediate-pair.html [5] : https://en.wikipedia.org/wiki/PKCS [6] : https://tools.ietf.org/html/rfc7292 [7] : https://tools.ietf.org/html/rfc2315
PEM n'est pas un certificat en soi, c'est juste un moyen d'encoder des données. Les certificats X.509 sont un type de données couramment codées à l'aide de PEM.
Le PEM est un certificat X.509 (dont la structure est définie à l'aide de l'ASN.1), codé à l'aide de l'ASN.1 DER (distinguished encoding rules), puis passé par le codage Base64 et coincé entre des lignes d'ancrage 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 de ligne de commande openssl peut être utilisé pour ce faire.
L'avantage évident du PEM est qu'il peut être collé en toute sécurité dans le corps d'un message électronique, car il comporte des lignes d'ancrage et est propre sur 7 bits.
La [RFC1422] (https://tools.ietf.org/html/rfc1422) contient plus de détails sur la norme PEM en ce qui concerne les clés et les certificats.
Parfois, un fichier .crt
est déjà un .pem
. Voir : https://stackoverflow.com/questions/991758/openssl-pem-key