Certificats X.509 : Structure, Types et Génération pour Développeurs
Les certificats X.509 sont un pilier de l'Infrastructure à Clés Publiques (PKI), contenant les clés publiques et les informations sur le titulaire. Cette norme remonte à X.500 DAP, largement remplacée aujourd'hui par LDAP. Toutes les structures sont définies en ASN.1 — un métalangage pour la sérialisation des données — avec un encodage suivant les règles BER, CER, DER de X.690 ou XER.
Structure de base du TBSCertificate :
Certificate ::= SEQUENCE {
tbsCertificate TBSCertificate,
signatureAlgorithm AlgorithmIdentifier,
signatureValue BIT STRING
}
TBSCertificate ::= SEQUENCE {
version [0] EXPLICIT Version DEFAULT v1,
serialNumber CertificateSerialNumber,
signature AlgorithmIdentifier,
issuer Name,
validity Validity,
subject Name,
subjectPublicKeyInfo SubjectPublicKeyInfo,
issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL
}
En ASN.1, SEQUENCE ressemble à une struct en C. Pour les détails de syntaxe, consultez X.680 (2008). Les certificats servent principalement de conteneurs pour clés publiques. Ils vérifient aussi la propriété d'un domaine ou l'identité, mais la fiabilité varie.
Hiérarchie et Types de Certificats
Les chaînes de confiance vont de l'AC racine à l'entité finale.
- Racine : Émetteur = titulaire, basicConstraints.cA = TRUE.
- Intermédiaire : Signé par une AC supérieure, pour construire la chaîne.
- Entité finale : Ne signe pas d'autres ; utilisé par les systèmes finaux.
Par niveau de validation :
- DV (Domain Validated) : Vérification automatisée du domaine par e-mail ou défi HTTP.
- OV (Organization Validated) : Vérifie WHOIS, inscription, contacts — prend quelques jours.
- EV (Extended Validation) : Audit complet de l'entreprise, droits exclusifs sur le domaine, autorisation. Affiché comme une barre verte avec le nom de l'entreprise. Nécessite jurisdictionOfIncorporationCountryName, businessCategory, serialNumber dans le titulaire.
Autres types :
- Multi-domaine : SAN (subjectAltName) pour plusieurs domaines.
- Wildcard : *CN=.example.com** pour les sous-domaines.
- Qualifié : Certificats personnels selon RFC 3739 avec givenName, dateOfBirth, countryOfCitizenship.
Génération de Certificats
Auto-signé avec ECC
La Cryptographie sur Courbes Elliptiques (ECC) surpasse RSA en efficacité CPU et taille de clé, mais le support TLS <1.2 varie.
Générer une clé privée secp521r1 :
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
CSR avec SHA256 :
openssl req -new -sha256 -key private-key.pem -out server.csr -days 730
Auto-signature :
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private-key.pem -out public.crt
Inspection :
openssl x509 -text -noout -in public.crt
Aide : openssl -help, openssl x509 -help.
Avec Java keytool
RSA 2048 :
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
Convertir en PKCS12 :
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12
Le résultat inclut SubjectKeyIdentifier (OID 2.5.29.14, non critique selon RFC 5280).
Let's Encrypt (DV)
Installer certbot et obtenir des certificats :
sudo certbot certonly --standalone -d example.com -d www.example.com
(Pour Gentoo : sudo emerge certbot ; Debian : sudo apt-get install certbot -t stretch-backports ; Fedora : sudo dnf install certbot).
Extensions et Analyse
Les certificats utilisent des OIDs pour l'identification : subjectKeyIdentifier ::= KeyIdentifier. Analyse complète via openssl x509 -text. Les chaînes construisent la confiance : racine → intermédiaires → feuille.
Points clés :
- X.509 utilise ASN.1 : SEQUENCE comme des structs, encodage DER/BER.
- Types : DV/OV/EV par validation, wildcard/SAN pour la flexibilité.
- Génération : openssl pour ECC/RSA, keytool pour JKS/PKCS12, certbot pour Let's Encrypt.
- Chaîne : racine (cA=TRUE) → intermédiaires → entité finale.
Déboguer les chaînes avec openssl s_client -connect host:443 -showcerts. Les normes comme X.680/690, RFC 5280/3739 assurent l'interopérabilité PKI.
— Editorial Team
Aucun commentaire pour le moment.