Powrót do strony głównej

Certyfikaty X.509: ASN.1 i generowanie

Artykuł analizuje strukturę certyfikatów X.509 na ASN.1, typy walidacji (DV/OV/EV), hierarchię łańcuchów. Podane są polecenia do generowania z openssl (ECC/RSA), keytool i certbot. Dla senior dev: rozszerzenia OID, kodowanie DER/BER.

Poradnik po X.509: od ASN.1 do kluczy ECC
Advertisement 728x90

Certyfikaty X.509: struktura, typy i generowanie dla programistów

Certyfikaty X.509 to kluczowy element PKI, przechowujący klucz publiczny i atrybuty podmiotu. Standard wywodzi się z X.500 DAP, zastąpionego przez LDAP. Wszystkie struktury opisane są w ASN.1 — meta-języku do serializacji danych. Kodowanie odbywa się zgodnie z regułami BER, CER, DER z X.690 lub XER.

Podstawowa 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 w ASN.1 jest analogiczne do struct w C. Do analizy składni użyj X.680 (2008). Pierwsza rola certyfikatu — kontener klucza publicznego. Druga — potwierdzenie posiadania domeny lub tożsamości, choć wiarygodność się różni.

Google AdInline article slot

Hierarchia i typy certyfikatów

Łańcuch zaufania buduje się od głównego CA do końcowego podmiotu.

  • Główne (root): issuer = subject, basicConstraints.cA = TRUE.
  • Pośrednie: podpisane przez wyższy CA, tworzą łańcuch.
  • Końcowe (leaf): nie podpisują innych, używane przez systemy końcowe.

Według poziomu weryfikacji:

  • DV (Domain Validated): automatyczna weryfikacja domeny przez e-mail lub wyzwanie HTTP.
  • OV (Organization Validated): sprawdzenie whois, rejestracji, kontaktów — kilka dni.
  • EV (Extended Validation): audyt firmy, wyłączne prawo do domeny, autoryzacja. Widoczny zielonym paskiem z nazwą organizacji. Wymaga jurisdictionOfIncorporationCountryName, businessCategory, serialNumber w subject.

Inne warianty:

Google AdInline article slot
  • Wielodomenowe: SAN (subjectAltName) dla wielu domen.
  • Wildcard: CN=*.example.net dla poddomen.
  • Kwalifikowane: osobiste wg RFC 3739 z GN, dateOfBirth, countryOfCitizenship.

Generowanie certyfikatów

Samopodpisane z ECC

Krzywe eliptyczne (ECC) są efektywniejsze od RSA pod względem CPU i rozmiaru klucza, ale obsługa w TLS<1.2 bywa różna.

Generowanie klucza prywatnego secp521r1:

openssl ecparam -name secp521r1 -genkey -param_enc explicit -out private-key.pem

CSR z 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

Podgląd:

openssl x509 -text -noout -in public.crt

Pomoc: openssl -help, openssl x509 -help.

Z Java keytool

RSA 2048:

keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048

Konwersja do PKCS12:

keytool -importkeystore -srckeystore keystore.jks -destkeystore keystore.p12 -deststoretype pkcs12

Wyjście zawiera SubjectKeyIdentifier (OID 2.5.29.14, non-critical wg RFC 3280).

Let's Encrypt (DV)

Instalacja certbot i uzyskanie:

sudo certbot certonly --standalone -d example.com -d www.example.com

(Dla Gentoo: sudo emerge certbot; Debian: sudo apt-get install certbot -t stretch-backports; Fedora: sudo dnf install certbot).

Rozszerzenia i analiza

Certyfikaty zawierają OID do identyfikacji: subjectKeyIdentifier ::= KeyIdentifier. Pełna analiza — przez openssl x509 -text. Łańcuchy budują zaufanie: root → pośrednie → leaf.

Co ważne:

  • X.509 na ASN.1: SEQUENCE jak struct, kodowanie DER/BER.
  • Typy: DV/OV/EV wg weryfikacji, wildcard/SAN dla elastyczności.
  • Generowanie: openssl dla ECC/RSA, keytool dla JKS/PKCS12, certbot dla LE.
  • Łańcuch: root (cA=TRUE) → pośrednie → leaf.

Do debugowania łańcuchów użyj openssl s_client -connect host:443 -showcerts. Zestaw standardów (X.680/690, RFC 3280/3739) zapewnia interoperacyjność w PKI.

— Editorial Team

Advertisement 728x90

Czytaj dalej