X.509 est le standard international qui définit le format des certificats à clé publique. C’est le format utilisé par TLS/HTTPS, mTLS, S/MIME et la plupart des PKI modernes.
Pour le rôle des certificats dans TLS, voir TLS et SSL. Pour la hiérarchie des CA, voir PKI — Infrastructure à Clés Publiques.
Structure complète d’un certificat X.509
Certificate ::= {
tbsCertificate ← "to be signed" — le contenu signé
signatureAlgorithm ← algorithme utilisé par la CA pour signer
signatureValue ← signature de la CA sur tbsCertificate
}
tbsCertificate ::= {
version ← v3 (le plus courant)
serialNumber ← numéro unique dans le namespace de la CA
signature ← algo de signature (doit correspondre à signatureAlgorithm)
issuer ← Distinguished Name de la CA émettrice
validity {
notBefore ← date de début de validité
notAfter ← date d'expiration
}
subject ← Distinguished Name du titulaire
subjectPublicKeyInfo {
algorithm ← RSA / ECDSA / Ed25519…
subjectPublicKey ← la clé publique elle-même
}
extensions ← champs v3 (SAN, KeyUsage, OCSP…)
}
Les champs importants en détail
Subject et Issuer — Distinguished Name (DN)
CN = Common Name → le domaine ou l'identité principale
O = Organization → nom de l'organisation
OU = Organizational Unit → service / département
C = Country → code pays ISO 3166 (FR, US…)
ST = State / Province → région
L = Locality → ville
Exemple :
Subject: CN=api.monentreprise.fr, O=Mon Entreprise SAS, C=FR
Issuer: CN=R3, O=Let's Encrypt, C=US
Validity — durée de validité
# Lire les dates d'un certificat
openssl x509 -in cert.pem -noout -dates
# notBefore=Jan 1 00:00:00 2026 GMT
# notAfter =Apr 1 00:00:00 2026 GMT
# Durées typiques :
# Let's Encrypt : 90 jours ← force le renouvellement fréquent
# CA commerciales : 1 an ← maximum depuis 2020
# PKI interne : variable ← souvent 1-3 ans
# CA racine : 20-30 ansSubjectPublicKeyInfo — la clé publique
| Algorithme | Taille de clé | Recommandation |
|---|---|---|
| RSA | 2048 bits (minimum), 4096 | Compatible universel, plus lent |
| ECDSA P-256 | 256 bits ≈ RSA 3072 | Recommandé — rapide, compact |
| ECDSA P-384 | 384 bits ≈ RSA 7680 | Pour contextes haute sécurité |
| Ed25519 | 256 bits | Très rapide, signature déterministe |
Extensions X.509 v3
Les extensions enrichissent le certificat avec des contraintes et des métadonnées.
Subject Alternative Names (SAN) — critique
Extension : subjectAltName
DNS:monentreprise.fr
DNS:www.monentreprise.fr
DNS:api.monentreprise.fr
IP:93.184.1.10 ← adresse IP directe (rare mais possible)
email:admin@exemple.com ← pour les certificats S/MIME
Depuis 2017, le champ CN est ignoré par les navigateurs — seuls les SAN font foi.
Key Usage — ce que la clé peut faire
KeyUsage (doit être marquée Critical) :
digitalSignature → signer des données
keyEncipherment → chiffrer une clé de session (RSA key exchange)
keyAgreement → échange de clé DH (ECDH)
keyCertSign → signer d'autres certificats (CA uniquement)
cRLSign → signer des CRL (CA uniquement)
Extended Key Usage — usage applicatif
ExtendedKeyUsage :
serverAuth → TLS serveur (HTTPS)
clientAuth → TLS client (mTLS)
emailProtection → S/MIME
codeSigning → signature de code
timeStamping → horodatage
Basic Constraints — est-ce une CA ?
BasicConstraints (Critical) :
CA: TRUE → ce certificat peut signer d'autres certificats
CA: FALSE → certificat final (end-entity), ne peut pas signer
PathLength: → nombre maximum de CA intermédiaires sous cette CA
0 → peut signer uniquement des end-entity certificates
1 → peut signer une CA intermédiaire, qui signe les end-entity
Authority Information Access (AIA)
AuthorityInfoAccess :
OCSP - URI: http://ocsp.digicert.com ← où vérifier la révocation en temps réel
CA Issuers - URI: http://ca.digicert.com/r3 ← où télécharger le cert de la CA intermédiaire
Subject Key Identifier & Authority Key Identifier
SubjectKeyIdentifier:
3A:B4:E2:... ← empreinte de la clé publique de ce certificat
AuthorityKeyIdentifier:
keyIdentifier: 3A:B4:E2:... ← empreinte de la clé de la CA émettrice
Ces identifiants permettent de construire la chaîne sans se baser uniquement sur les DN.
Formats de fichiers
| Extension | Format | Contenu | Usage |
|---|---|---|---|
.pem | Base64 + headers -----BEGIN | Cert, clé, ou les deux | Linux, nginx, openssl |
.crt / .cer | PEM ou DER | Certificat uniquement | Varies |
.key | PEM | Clé privée uniquement | Linux |
.der | Binaire | Cert ou clé | Java, Windows |
.p12 / .pfx | Binaire PKCS#12 | Cert + clé privée + chaîne | Windows, Java |
.p7b | PEM PKCS#7 | Chaîne de certificats | Windows |
.csr | PEM PKCS#10 | Certificate Signing Request | Soumission à une CA |
# Conversions courantes avec openssl
# PEM → DER
openssl x509 -in cert.pem -outform DER -out cert.der
# DER → PEM
openssl x509 -in cert.der -inform DER -outform PEM -out cert.pem
# PEM → PKCS#12 (cert + clé + chaîne)
openssl pkcs12 -export -in cert.pem -inkey key.pem \
-certfile chain.pem -out bundle.p12
# PKCS#12 → PEM
openssl pkcs12 -in bundle.p12 -nodes -out bundle.pemLire un certificat avec openssl
# Lire le certificat d'un serveur distant
openssl s_client -connect monentreprise.fr:443 -servername monentreprise.fr \
2>/dev/null | openssl x509 -noout -text
# Lire un fichier certificat
openssl x509 -in cert.pem -noout -text
# Extraits rapides
openssl x509 -in cert.pem -noout -subject # qui est-ce ?
openssl x509 -in cert.pem -noout -issuer # qui a signé ?
openssl x509 -in cert.pem -noout -dates # validité
openssl x509 -in cert.pem -noout -fingerprint -sha256 # empreinte SHA-256
openssl x509 -in cert.pem -noout -ext subjectAltName # domaines couverts
# Vérifier la chaîne de confiance
openssl verify -CAfile chain.pem cert.pemExemple de certificat décodé (github.com)
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 04:d3:3b:6c:...
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=DigiCert Inc, CN=DigiCert TLS Hybrid ECC SHA384 2020 CA1
Validity:
Not Before: Mar 7 00:00:00 2025 GMT
Not After : Mar 8 23:59:59 2026 GMT
Subject: C=US, ST=California, L=San Francisco, O=GitHub, Inc., CN=github.com
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit) ← ECDSA P-256
X509v3 extensions:
X509v3 Subject Alternative Name:
DNS:github.com, DNS:www.github.com
X509v3 Key Usage: critical
Digital Signature
X509v3 Extended Key Usage:
TLS Web Server Authentication, TLS Web Client Authentication
X509v3 Basic Constraints: critical
CA:FALSE
Authority Information Access:
OCSP - URI:http://ocsp.digicert.com
CA Issuers - URI:http://cacerts.digicert.com/...
En relation avec
- Certificats — Vue d’ensemble — types et usages des certificats
- PKI — Infrastructure à Clés Publiques — comment les CA signent et valident les certificats
- Cycle de vie et révocation — CSR, émission, OCSP, CRL
- TLS et SSL — utilisation du certificat dans le handshake TLS