Certifikáty X.509: struktura, typy a generování pro vývojáře
X.509 certifikáty jsou klíčovým prvkem PKI, který obsahuje veřejný klíč a atributy subjektu. Standard pochází z X.500 DAP, nahrazeného LDAP. Všechny struktury jsou popsány v ASN.1 – meta-jazyce pro serializaci dat. Kódování dodržuje pravidla BER, CER, DER podle X.690 nebo XER.
Základní struktura 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
}
SEQUENCE v ASN.1 je podobné struct v C. Pro rozbor syntaxe použijte X.680 (2008). První role certifikátu je kontejner veřejného klíče. Druhá je potvrzení vlastnictví domény nebo identity, ale spolehlivost se liší.
Hierarchie a typy certifikátů
Řetězec důvěry se buduje od kořenového CA k cílovému subjektu.
- Kořenové: issuer = subject, basicConstraints.cA = TRUE.
- Meziprodukty: podepsané vyšším CA, tvoří řetězec.
- Listové: nepodepisují další, používají se v koncových systémech.
Podle úrovně ověření:
- DV (Domain Validated): automatická kontrola domény e-mailem nebo HTTP výzvou.
- OV (Organization Validated): ověření whois, registru, kontaktů – několik dní.
- EV (Extended Validation): audit firmy, exkluzivní právo na doménu, autorizace. Viditelné zeleným pruhem s názvem organizace. Vyžaduje jurisdictionOfIncorporationCountryName, businessCategory, serialNumber v subject.
Další varianty:
- Vícedoménové: SAN (subjectAltName) pro více domén.
- Wildcard: CN=*.example.net pro podsoubory.
- Kvalifikované: osobní podle RFC 3739 s GN, dateOfBirth, countryOfCitizenship.
Generování certifikátů
Samopodepsané s ECC
Eliptické křivky (ECC) jsou efektivnější než RSA z hlediska CPU a velikosti klíče, ale podpora v TLS<1.2 se liší.
Generování privátního klíče secp521r1:
openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem
CSR s SHA256:
openssl req -new -sha256 -key private-key.pem -out server.csr -days 730
Podpis:
openssl x509 -req -sha256 -days 365 -in server.csr -signkey private-key.pem -out public.crt
Prohlížení:
openssl x509 -text -noout -in public.crt
Nápověda: openssl -help, openssl x509 -help.
S Java keytool
RSA 2048:
keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
Převod do PKCS12:
keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12
Výstup obsahuje SubjectKeyIdentifier (OID 2.5.29.14, non-critical podle RFC 3280).
Let's Encrypt (DV)
Instalace certbot a získání:
sudo certbot certonly --standalone -d example.com -d www.example.com
(Ubuntu/Debian: sudo apt-get install certbot; Fedora: sudo dnf install certbot; Gentoo: sudo emerge certbot).
Rozšíření a analýza
Certifikáty obsahují OID pro identifikaci: subjectKeyIdentifier ::= KeyIdentifier. Kompletní rozbor přes openssl x509 -text. Řetězce budují důvěru: kořen → meziprodukty → listový.
Co je důležité:
- X.509 na ASN.1: SEQUENCE jako struct, kódování DER/BER.
- Typy: DV/OV/EV podle ověření, wildcard/SAN pro flexibilitu.
- Generování: openssl pro ECC/RSA, keytool pro JKS/PKCS12, certbot pro LE.
- Řetězec: kořen (cA=TRUE) → meziprodukty → list.
Pro ladění řetězců použijte openssl s_client -connect host:443 -showcerts. Soubor standardů (X.680/690, RFC 3280/3739) zajišťuje interoperability v PKI.
— Editorial Team
Zatím žádné komentáře.