Formats et encodage des certificats

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche

Portail > Le certificat X.509

Un même certificat peut exister sous plusieurs encodages et être empaqueté dans plusieurs conteneurs. Bien les distinguer évite la plupart des erreurs d'import/export.

ASN.1 : la structure abstraite

Les certificats X.509 sont décrits en ASN.1 (Abstract Syntax Notation One), une notation qui définit la structure logique (séquences, entiers, OID…) indépendamment de sa représentation binaire. ASN.1 n'est pas un encodage : c'est la grammaire.

DER et PEM : les deux encodages

DER

DER (Distinguished Encoding Rules) est l'encodage binaire canonique de la structure ASN.1. Compact, non lisible par un humain. C'est la forme « réelle » du certificat ; tout le reste n'est qu'emballage autour du DER.

PEM

PEM encapsule le DER en Base64, encadré de lignes -----BEGIN CERTIFICATE----- / -----END CERTIFICATE-----. Lisible en texte, facile à copier-coller et à concaténer. C'est le format dominant sous Linux (Apache, nginx, RKE2, cert-manager…).

Un fichier PEM peut contenir plusieurs blocs à la suite : c'est ainsi qu'on assemble une chaîne (feuille + intermédiaires) dans un seul fichier (fullchain).

Conteneurs

PKCS#7 (.p7b / .p7c)

Conteneur transportant un ou plusieurs certificats (typiquement une chaîne), sans clé privée. Fréquent dans les environnements Windows pour diffuser une chaîne de CA.

PKCS#12 (.pfx / .p12)

Conteneur chiffré par mot de passe regroupant la clé privée + le certificat + sa chaîne. Idéal pour migrer une identité complète d'un système à un autre (Windows, Java, équilibreurs de charge).

Formats de clés privées

  • PKCS#1 : clé RSA brute (-----BEGIN RSA PRIVATE KEY-----).
  • PKCS#8 : conteneur générique de clé privée, tout algorithme (-----BEGIN PRIVATE KEY-----), chiffrable.

Récapitulatif des extensions de fichier

Extension Contenu typique Encodage
.pem Certificat(s) et/ou clé Base64 (PEM)
.crt / .cer Certificat seul PEM ou DER selon le cas
.der Certificat seul DER (binaire)
.key Clé privée PEM (souvent)
.p7b / .p7c Chaîne de certificats, sans clé PKCS#7
.pfx / .p12 Clé privée + certificat + chaîne PKCS#12 (chiffré)

Attention : l'extension ne garantit pas l'encodage. Un .crt peut être en PEM ou en DER ; toujours vérifier.

Conversions courantes (openssl)

# PEM -> DER
openssl x509 -in cert.pem -outform der -out cert.der

# DER -> PEM
openssl x509 -in cert.der -inform der -out cert.pem 

# DER -> PEM
openssl x509 -in cert.der -inform der -out cert.pem -outform PEM

# Construire un PKCS#12 (clé + cert + chaîne)
openssl pkcs12 -export -inkey key.pem -in cert.pem -certfile chain.pem -out bundle.pfx

# Extraire d'un PKCS#12
openssl pkcs12 -in bundle.pfx -out tout.pem -nodes

# Lister les certificats d'un PKCS#7
openssl pkcs7 -in chain.p7b -print_certs -out chain.pem

# Détecter l'encodage d'un fichier
openssl x509 -in mystere.crt -inform pem -noout -text   # sinon réessayer avec -inform der

Ordre des certificats dans un fichier de chaîne

Pour TLS, la convention est : feuille en premier, puis les intermédiaires du plus proche au plus lointain, sans la racine (déjà dans les magasins de confiance). Un mauvais ordre est une cause classique de chaîne invalide.

Points clés à retenir

  • DER = binaire canonique ; PEM = DER en Base64 lisible. Le reste empaquète du DER.
  • PKCS#7 = certificats sans clé ; PKCS#12 = identité complète (clé incluse), chiffrée.
  • L'extension de fichier ne fait pas foi sur l'encodage.
  • Chaîne TLS : feuille → intermédiaires, sans la racine.

Voir aussi

Chaînes de certificats — Portail
Fondamentaux Cryptographie asymétrique · Signatures et hachage
Certificat X.509 Structure X.509 · Extensions X.509 · Formats et encodage
PKI et autorités PKI · Autorités de certification · Ancres de confiance
Chaîne Principe · Construction du chemin · Validation · Contraintes de chemin
Cycle de vie CSR et émission · Cycle de vie · Révocation
Avancé Cross-signing · Dépannage