bitlvl
SR

Dekoder SSL sertifikata i CSR-ova

Nalepite jedan ili više PEM blokova. Svaki sertifikat se dekodira kao openssl x509 -text, sa istaknutim problemima na koje bi se pregledači žalili. Privatni ključevi se odbijaju i nikada nisu potrebni.

Svoj dobijate sa: openssl s_client -connect example.com:443 -showcerts </dev/null

Rezultati i poruke ovog alata prikazuju se na engleskom.

Šta se nalazi u sertifikatu

X.509 sertifikat vezuje javni ključ za ime, potpisano od strane izdavaoca. Polja koja su bitna kad nešto ne radi:

  • Subject Alternative Name: lista imena hostova (i IP adresa) za koje sertifikat važi. Pregledači potpuno ignorišu Common Name; sertifikat bez imena hosta u SAN-u pada sa NET::ERR_CERT_COMMON_NAME_INVALID bez obzira na to šta CN kaže.
  • Važenje: notBefore i notAfter. Javno pouzdani krajnji sertifikati mogu da traju najviše 398 dana (smanjuje se na 47 dana do 2029); Let's Encrypt izdaje sertifikate na 90 dana.
  • Izdavalac i lanac: server mora da pošalje svoj krajnji sertifikat plus svaki posredni do (ali ne uključujući) korenskog kome klijent veruje. „Unable to get local issuer certificate“ gotovo uvek znači da nedostaje posredni sertifikat.
  • Key usage / extended key usage: serverskom sertifikatu treba TLS server auth; CA-u trebaju keyCertSign i CA:TRUE u basic constraints.
  • Authority Information Access: odakle preuzeti sertifikat izdavaoca i OCSP responder; CRL distribution points: gde se nalaze liste opoziva.
  • Algoritam potpisa: danas sha256WithRSA, ecdsa-with-SHA256 ili Ed25519; SHA-1 potpisi se odbijaju svuda.

Otisci

SHA-256 otisak je heš celog DER kodiranog sertifikata, koristi se za pinovanje i za poređenje onoga što server šalje sa onim što očekujete (openssl x509 -fingerprint -sha256). Menja se pri svakom obnavljanju, zbog čega je pinovanje krajnjih sertifikata krhko; umesto toga pinujte javni ključ (SPKI) ili posredni sertifikat.

CSR-ovi

Zahtev za potpisivanje sertifikata sadrži subject, javni ključ i tražene ekstenzije, potpisane odgovarajućim privatnim ključem kao dokaz posedovanja. CA kopira SAN iz zahteva (ili iz validiranih domena), a većinu ostalog ignoriše. Provera CSR-a pre slanja štedi jedan krug kad je SAN pogrešan.

Kako doći do PEM-a

openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | openssl x509   # samo krajnji
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null | sed -n '/BEGIN/,/END/p'                   # ceo lanac
openssl x509 -in cert.der -inform der -out cert.pem                                                                        # DER → PEM

Pitanja

Mogu li da nalepim .crt, .cer ili .der datoteku?

Nalepite tekst PEM datoteka (.pem, .crt, .cer kad počinju sa -----BEGIN). Binarni DER prvo treba konvertovati: openssl x509 -inform der -in file -out file.pem. Prihvata se i sirovi Base64 DER sertifikata bez BEGIN/END linija.

Zašto dekoder kaže da CN nije u SAN-u?

Pregledači proveravaju samo SAN. Sertifikat sa CN=example.com, ali SAN=www.example.com neće raditi za example.com. Ponovo ga izdajte sa svakim imenom hosta navedenim u SAN-u.

Šta ovde znači „samopotpisan“?

Izdavalac i subject su identični. To je normalno za korenski CA i za razvojne sertifikate, ali samopotpisani krajnji sertifikat pregledači će odbiti osim ako nije instaliran kao pouzdan.

Da li se moj sertifikat šalje serveru?

Ne. Dekodiranje koristi ASN.1 parser napisan u JavaScriptu i radi u vašem pregledaču. Ipak, privatni ključevi se odbijaju na prvi pogled; sertifikat je po prirodi javan, ključ nikada nije.