Zpět na domů

X.509 certifikáty: ASN.1 a generování

Článek rozebere strukturu X.509 certifikátů na ASN.1, typy podle validace (DV/OV/EV), hierarchii řetězců. Uvádějí se příkazy pro generování s openssl (ECC/RSA), keytool a certbot. Pro senior dev: OID rozšíření, kódování DER/BER.

Průvodce X.509: od ASN.1 po ECC klíče
Advertisement 728x90

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ší.

Google AdInline article slot

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
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

Advertisement 728x90

Číst dál