Leggi un certificato SSL

Incolli il PEM o carichi il file e vedi in chiaro quando scade, quali nomi copre, che chiave usa e se la catena è nell'ordine giusto. Vale anche per le richieste di certificato (CSR) e per i .p7b, e il certificato non esce dal tuo browser.

Oppure tocca qui o trascina il file: .crt, .cer, .pem, .der, .csr, .p7b, .ca-bundle
Il certificato viene letto qui, nel tuo browser: non viene caricato da nessuna parte e la pagina non si collega a nessun sito.

Quando serve leggere un certificato

Il caso più comune è anche il più banale: quando scade. Il fornitore ti ha mandato il file del certificato nuovo, oppure devi rinnovare quello vecchio, e il pannello dell'hosting non te lo dice. Qui il primo numero che vedi sono i giorni che mancano, e se il certificato è già scaduto o non è ancora valido lo vedi prima di tutto il resto, in rosso o in giallo.

Gli altri casi veri sono tre. Il browser dice «certificato non valido» e vuoi capire se è un problema di nomi (il certificato non copre quel sottodominio) o di catena (sul server manca un pezzo). Devi mandare una richiesta di certificato (CSR) all'autorità e vuoi controllare che dentro ci siano i nomi giusti prima di pagare. Oppure ti arriva per posta un file .cer o .p7b e vuoi sapere che cos'è prima di installarlo.

La pagina accetta il PEM incollato (anche più certificati di fila), i file .crt, .cer, .pem e .der, le CSR e i .p7b, e riconosce il tipo da quello che c'è dentro, non dall'estensione.

I nomi coperti: il nome comune non conta più

I nomi per cui un certificato vale stanno nei nomi alternativi (SAN), e sono l'unica cosa che guardano i browser di oggi: Chrome ha smesso di leggere il nome comune, il CN, nel 2017, e Safari nel 2019. Un certificato col nome giusto solo nel CN oggi dà errore.

Il jolly vale per un livello solo. Un certificato per *.esempio.it copre www.esempio.it e shop.esempio.it, ma non esempio.it da solo (serve un nome in più) e nemmeno a.b.esempio.it (servirebbe *.b.esempio.it). Scrivi il nome nel campo «Nome da controllare» e la risposta è sì o no, con il nome del certificato che lo copre.

Fra i nomi possono esserci anche indirizzi IP, tipico del NAS o del router di casa: lì il certificato vale solo per quell'indirizzo esatto, e un nome di dominio che punta allo stesso indirizzo non basta. Per ragionare su indirizzi e reti c'è Calcolo subnet.

La catena, e perché l'ordine conta

Un sito non manda un certificato solo: manda il suo, rilasciato da un intermedio, che a sua volta è stato rilasciato da una radice che il browser conosce già. Il legame si legge dentro i certificati: l'emittente di ciascuno deve essere il soggetto del successivo. Incollando tutta la catena, la pagina controlla i legami uno per uno.

Quando l'ordine è sbagliato trovi la catena già riordinata, pronta da copiare nel file che il server manda (quello che molti pannelli chiamano fullchain). Il guasto più comune però è un altro: l'intermedio che manca. Alcuni browser se lo vanno a cercare da soli e il sito sembra funzionare, mentre curl, molte app sul telefono e molti programmi danno errore. Se incolli quello che manda il server e dopo il certificato del sito non c'è niente, il problema è quello. E se il file l'hai fatto unendo due file con cat, controlla che fra una riga END e la BEGIN dopo ci sia un a capo: attaccate, OpenSSL non trova nessun certificato, e la pagina te lo segnala.

C'è anche un caso più sottile: un intermedio con il nome giusto e la chiave sbagliata. Succede quando un'autorità rinnova la sua chiave e sul server resta il file vecchio. I nomi coincidono, ma gli identificatori della chiave no, e la pagina lo segnala. Nei file .p7b invece l'ordine non esiste, perché i certificati stanno in un insieme: la pagina li mostra già messi in fila dal sito alla radice.

Le date: fuso orario, giorni e durata massima

Le date dentro un certificato sono sempre in tempo universale (UTC), ed è così che le trovi scritte qui. In Italia è un'ora avanti d'inverno e due d'estate, quindi un certificato che scade alle 23:30 UTC del 3 a Roma è già scaduto il 4. I giorni che mancano sono giorni interi da 24 ore, contati dal momento in cui leggi.

Poi c'è la durata. Dal settembre 2020 un certificato pubblico per siti non può durare più di 398 giorni, e le regole del CA/Browser Forum la stanno accorciando: 200 giorni per quelli rilasciati dal 15 marzo 2026, 100 dal 15 marzo 2027, 47 dal 15 marzo 2029. Se un certificato del sito dura più di quanto era consentito nel giorno in cui è stato rilasciato, la pagina lo segnala: se viene da un'autorità pubblica il browser lo rifiuta, se viene da un'autorità interna all'azienda la regola non vale.

Un dettaglio che fa sbagliare i lettori fatti in casa: fino al 2049 l'anno è scritto con due cifre sole, e «50» vuol dire 1950, non 2050, come dice la norma (RFC 5280).

Chiave, firma e impronte

La chiave dice quanto è robusto il certificato. Una chiave RSA da 2048 bit è il minimo accettato, 3072 o 4096 sono più lente e più robuste; le chiavi a curva ellittica P-256 e P-384 sono più corte a parità di sicurezza. Ed25519 esiste nei certificati, ma i browser non lo accettano ancora per i siti. Sotto i 2048 bit e con le firme SHA-1 o MD5 la pagina mette un avviso, perché sono esattamente i casi in cui un browser rifiuta.

Le impronte SHA-256 e SHA-1 sono il riassunto dell'intero certificato, calcolato qui con le funzioni crittografiche del browser: servono a confrontare due certificati senza leggerli, per esempio al telefono con chi gestisce il server, e sono lo stesso numero che mostrano Windows, macOS e OpenSSL. Quella SHA-1 qui è solo un'etichetta e non una firma, ed è quella che Windows chiama «identificazione personale». Per l'impronta di un file qualunque, non di un certificato, c'è Impronta di un file.

Il numero di serie è quello che l'autorità ti chiede per revocare un certificato. Le righe OCSP e CRL dicono dove il browser chiede se è stato revocato: la pagina le mostra, ma non ci si collega.

Nomi con gli accenti, scritti in quattro modi

Dentro un certificato il testo può essere codificato in modi diversi, e un lettore frettoloso li tratta tutti come UTF-8. Qui ciascuno è letto per quello che è: UTF8String come UTF-8, BMPString come UTF-16, il vecchio UniversalString come UTF-32. Il caso difficile è il T61String, che nei certificati veri contiene ora UTF-8 ora Latin-1: la pagina prova il primo e, se i byte non lo sono, usa il secondo, che è come fa OpenSSL. Così «Società» resta «Società» invece di diventare una fila di simboli, e quando è servito il Latin-1 la pagina lo scrive.

Quello che non fa, detto chiaro

Non verifica la firma e non dice se il certificato è affidabile: mostra quello che c'è scritto. Per sapere se un sito è configurato bene serve un controllo che si colleghi al server, e da una pagina web non si può, perché i browser non danno il certificato di un altro sito al codice di una pagina. Per prenderlo, clicca sul lucchetto accanto all'indirizzo ed esporta il certificato, oppure usa openssl s_client -connect esempio.it:443 -showcerts e incolla qui quello che esce.

Non apre i .pfx e i .p12: contengono la chiave privata e sono cifrati con una password. E se insieme al certificato incolli una chiave privata, la pagina non la legge e ti avvisa, perché una chiave privata non va incollata da nessuna parte. Per leggere un token di accesso, che è un'altra cosa anche se gli somiglia, c'è Decodifica JWT.