Cosa c’è in un certificato
Un certificato X.509 lega una chiave pubblica a un nome, firmato da un emittente. I campi che contano quando qualcosa non funziona:
- Subject Alternative Name: la lista dei nomi host (e IP) per cui il certificato è valido. I browser ignorano completamente il Common Name; un certificato senza il nome host nel SAN fallisce con NET::ERR_CERT_COMMON_NAME_INVALID qualunque cosa dica il CN.
- Validità: notBefore e notAfter. I certificati leaf pubblicamente fidati possono durare al massimo 398 giorni (che scendono a 47 entro il 2029); Let’s Encrypt emette certificati da 90 giorni.
- Issuer e la catena: un server deve inviare il suo leaf più ogni intermedio fino a (ma escluso) un root di cui il client si fida. «Unable to get local issuer certificate» significa quasi sempre un intermedio mancante.
- Key usage / extended key usage: un certificato server ha bisogno di TLS server auth; una CA ha bisogno di keyCertSign e CA:TRUE nei basic constraints.
- Authority Information Access: dove scaricare il certificato dell’emittente e il responder OCSP; CRL distribution points: dove stanno le liste di revoca.
- Algoritmo di firma: oggi sha256WithRSA, ecdsa-with-SHA256 o Ed25519; le firme SHA-1 vengono rifiutate ovunque.
Impronte
L’impronta SHA-256 è l’hash dell’intero certificato codificato in DER, usata per il pinning e per confrontare ciò che un server invia con ciò che ti aspetti (openssl x509 -fingerprint -sha256). Cambia a ogni rinnovo, ed è per questo che fare il pinning dei certificati leaf è fragile; fai il pinning della chiave pubblica (SPKI) o di un intermedio.
CSR
Una richiesta di firma del certificato contiene il subject, la chiave pubblica e le estensioni richieste, firmate con la chiave privata corrispondente per provarne il possesso. Le CA copiano il SAN dalla richiesta (o dai domini validati) e ignorano quasi tutto il resto. Controllare una CSR prima di inviarla risparmia un giro quando il SAN è sbagliato.
Ottenere il PEM
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null 2>/dev/null | openssl x509 # solo il leaf
openssl s_client -connect example.com:443 -showcerts </dev/null 2>/dev/null | sed -n '/BEGIN/,/END/p' # intera catena
openssl x509 -in cert.der -inform der -out cert.pem # DER → PEM Domande
Posso incollare un file .crt, .cer o .der?
Incolla il testo dei file PEM (.pem, .crt, .cer quando iniziano con -----BEGIN). Il DER binario va prima convertito: openssl x509 -inform der -in file -out file.pem. Anche il Base64 grezzo di un certificato DER senza le righe BEGIN/END è accettato.
Perché il decodificatore dice che il CN non è nel SAN?
I browser controllano solo il SAN. Un certificato con CN=example.com ma SAN=www.example.com non funzionerà per example.com. Riemettilo con tutti i nomi host elencati nel SAN.
Cosa significa qui «autofirmato»?
Issuer e subject sono identici. È normale per una CA root e per i certificati di sviluppo, ma un leaf autofirmato verrà rifiutato dai browser a meno che il certificato non sia installato come fidato.
Il mio certificato viene inviato a un server?
No. La decodifica usa un parser ASN.1 scritto in JavaScript e gira nel tuo browser. In ogni caso, le chiavi private vengono rifiutate a vista; un certificato è pubblico per natura, una chiave non lo è mai.