X.509-Zertifikate: Struktur, Typen und Erstellung für Entwickler
X.509-Zertifikate bilden das Rückgrat der Public Key Infrastructure (PKI) und enthalten öffentliche Schlüssel sowie Angaben zum Betreff. Der Standard geht auf X.500 DAP zurück, das heute weitgehend durch LDAP ersetzt wurde. Alle Strukturen sind in ASN.1 definiert – einer Metasprache zur Daten-Serialisierung – mit Kodierung nach den Regeln BER, CER, DER aus X.690 oder XER.
Grundstruktur von 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
}
In ASN.1 entspricht SEQUENCE einer Struktur in C. Für Syntax-Details siehe X.680 (2008). Zertifikate dienen hauptsächlich als Behälter für öffentliche Schlüssel. Sie bestätigen auch Domain-Besitz oder Identität, wobei die Zuverlässigkeit variiert.
Zertifikatshierarchie und Typen
Vertrauenskette vom Root-CA bis zum Endentitäts-Zertifikat.
- Root: Issuer = Subject, basicConstraints.cA = TRUE.
- Intermediate: Signiert von höherer CA, baut die Kette auf.
- Endentität: Signiert keine anderen; für Endsysteme genutzt.
Nach Validierungsstufe:
- DV (Domain Validated): Automatisierte Domain-Prüfung per E-Mail oder HTTP-Challenge.
- OV (Organization Validated): Überprüfung von WHOIS, Registrierung, Kontakten – dauert ein paar Tage.
- EV (Extended Validation): Vollständiger Geschäftsaudit, exklusive Domain-Rechte, Vollmacht. Wird als grüne Leiste mit Firmennamen angezeigt. Erfordert jurisdictionOfIncorporationCountryName, businessCategory, serialNumber im Subject.
Andere Typen:
- Multi-Domain: SAN (subjectAltName) für mehrere Domains.
- Wildcard: CN=*.example.com für Subdomains.
- Qualified: Persönliche Zertifikate nach RFC 3739 mit givenName, dateOfBirth, countryOfCitizenship.
Zertifikate erstellen
Selbstsigniert mit ECC
Elliptic Curve Cryptography (ECC) ist RSA in CPU-Effizienz und Schlüssellänge überlegen, aber TLS <1.2-Unterstützung variiert.
Erzeuge secp521r1-Privatschlüssel:
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
CSR mit SHA256:
openssl req -new -sha256 -key private-key.pem -out server.csr -days 730
Selbstsignieren:
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private-key.pem -out public.crt
Prüfen:
openssl x509 -text -noout -in public.crt
Hilfe: openssl -help, openssl x509 -help.
Mit Java keytool
RSA 2048:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
Zu PKCS12 konvertieren:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12
Ausgabe enthält SubjectKeyIdentifier (OID 2.5.29.14, nicht-kritisch nach RFC 5280).
Let's Encrypt (DV)
Certbot installieren und Zertifikate holen:
sudo certbot certonly --standalone -d example.com -d www.example.com
(Für Gentoo: sudo emerge certbot; Debian: sudo apt-get install certbot -t stretch-backports; Fedora: sudo dnf install certbot).
Erweiterungen und Analyse
Zertifikate nutzen OIDs zur Identifikation: subjectKeyIdentifier ::= KeyIdentifier. Vollständige Analyse mit openssl x509 -text. Ketten bauen Vertrauen auf: root → intermediates → leaf.
Wichtige Erkenntnisse:
- X.509 nutzt ASN.1: SEQUENCE wie Structs, DER/BER-Kodierung.
- Typen: DV/OV/EV nach Validierung, Wildcard/SAN für Flexibilität.
- Erstellung: openssl für ECC/RSA, keytool für JKS/PKCS12, certbot für Let's Encrypt.
- Kette: root (cA=TRUE) → intermediates → Endentität.
Ketten debuggen mit openssl s_client -connect host:443 -showcerts. Standards wie X.680/690, RFC 5280/3739 gewährleisten PKI-Interoperabilität.
— Editorial Team
Noch keine Kommentare.