Confronto tra certificato e chiave privata — prova di firma, non un'ipotesi
Confronto tra certificato e chiave privata
Incolli il certificato che usa un server e la chiave privata che sta per distribuire con esso, e questa pagina risponde alla domanda su cui fallisce un sito distribuito: le due cose provengono dalla stessa coppia di chiavi? La risposta non è un'ipotesi basata solo sulla lunghezza del modulo o sulle impronte digitali — la pagina firma una sfida fissa con la chiave privata e verifica quella firma con la chiave pubblica contenuta nel certificato. Se la verifica riesce, le due appartengono insieme; se fallisce, nessuna modifica alla configurazione le farà funzionare. Entrambe le letture sono mostrate affiancate con algoritmo, dimensione della chiave, identificatore della chiave del soggetto e impronta digitale della chiave pubblica, e nulla di ciò che incolla lascia il browser.
1. Certificato o catena
Incolli quanti blocchi desidera. Ogni certificato viene confrontato con ogni chiave, quindi una catena più una chiave le indica esattamente a quale certificato della catena appartiene quella chiave — una sorpresa comune su un server che serve il certificato sbagliato da un bundle. Vengono letti PEM, il corpo base64 o esadecimale nudo e un file .p7b PKCS#7; il controllo dei certificati verifica il certificato stesso una volta chiarita la chiave.
2. Chiave privata, o chiave pubblica
Vengono riconosciute PKCS#8 (BEGIN PRIVATE KEY), PKCS#1 (BEGIN RSA PRIVATE KEY), SEC1 (BEGIN EC PRIVATE KEY) e una chiave pubblica SPKI nuda (BEGIN PUBLIC KEY), così come un file di chiave incollato in base64 o esadecimale. Una chiave PKCS#8 cifrata (BEGIN ENCRYPTED PRIVATE KEY) non può essere letta da un browser e viene segnalata come tale, insieme al comando che rimuove la passphrase.
nulla è ancora verificato
L'esempio è un certificato autofirmato e la chiave privata che gli appartiene, entrambi creati per questa pagina e che non proteggono nulla. Sostituisca la chiave con un'altra chiave qualsiasi per vedere l'altro esito, oppure incolli il blocco della chiave pubblica al posto di quella privata per vedere la corrispondenza della chiave pubblica.
Incollare una chiave privata in una pagina web merita prima una seconda riflessione. Questa pagina è un unico file JavaScript semplice, non carica nulla da nessuna parte e non effettua alcuna richiesta, quindi la chiave viene letta, usata e dimenticata all'interno di questa scheda. È comunque una promessa fatta da codice che può leggere, non una garanzia di una rete che può vedere: se sta gestendo una chiave di produzione, lavori offline e consideri che il controllo più sicuro è lo stesso comando openssl sul proprio server. Una chiave incollata qui non viene mai memorizzata, mai messa in un file e mai inviata da nessuna parte — nemmeno dai pulsanti di esportazione, che scrivono i risultati sulla chiave e mai la chiave stessa.
Perché la firma è la risposta. Due file possono sembrare simili e comunque non corrispondere: nella maggior parte delle guide le chiavi RSA si confrontano per modulo, ma ciò funziona solo per RSA, e una chiave può avere il modulo giusto con un esponente danneggiato o un padding errato. Questa pagina dimostra la coppia nel modo in cui lo fa un handshake — firmare una sfida fissa con la chiave privata e verificarla con la chiave pubblica del certificato — quindi il verdetto vale allo stesso modo per RSA, ECDSA ed Ed25519. Quando viene incollata solo la metà pubblica, si confrontano i byte stessi della chiave pubblica con quelli del certificato, il che è altrettanto conclusivo per l'identità, ma senza la prova che qualcuno possieda la metà privata.
Cosa non dice una corrispondenza. Che la chiave sia quella effettivamente caricata dal server, che il certificato sia attendibile, che il file della chiave sia integro sul disco o che la chiave non sia stata copiata da qualcun altro. Inoltre non può dire se il certificato sia quello che riceverà un client, poiché un bilanciatore di carico o una CDN davanti al sito potrebbe servirne un altro. Per verificare ciò che un server attivo presenta davvero, esegua openssl s_client -connect example.com:443 -servername example.com -showcerts e incolli quell'output nella casella dei certificati.
Da dove provengono i file. Il certificato è quello con cui è configurato il server, oppure quello esportato da un browser o estratto da un bundle .p7b. La chiave privata è il file che il server web legge all'avvio, di solito qualcosa come privkey.pem o server.key. Se la chiave è cifrata, ne decifri prima una copia con openssl pkcs8 -topk8 -nocrypt -in key.pem -out key-plain.pem, la incolli e poi elimini la copia.
Rapporto di confronto
Nulla è ancora verificato. Incolli un certificato e una chiave sopra e prema Verifica se corrispondono. Il verdetto compare qui con le prove su cui si basa, e il rapporto può essere copiato o salvato.
La stessa verifica con openssl, sulla propria macchina
# chiave pubblica contenuta nel certificato openssl x509 -in cert.pem -noout -pubkey | openssl pkey -pubin -outform DER | openssl sha256 # chiave pubblica contenuta nella chiave privata openssl pkey -in key.pem -pubout | openssl pkey -pubin -outform DER | openssl sha256 # i due digest sono uguali solo quando la coppia appartiene insieme # il vecchio metodo, valido solo per RSA: confronto dei moduli openssl x509 -in cert.pem -noout -modulus | openssl md5 openssl rsa -in key.pem -noout -modulus | openssl md5
Il confronto dei digest funziona per ogni tipo di chiave e corrisponde a ciò che questa pagina riporta come impronta digitale della chiave pubblica, mentre il confronto dei moduli esiste solo per RSA. Nessuno dei due dimostra che qualcuno possieda la metà privata — lo fa il controllo della firma descritto sopra, ed è per questo che la pagina lo usa.
Cosa contiene il rapporto. Il verdetto, la coppia di letture da cui deriva (algoritmo, dimensione della chiave, curva, identificatore della chiave del soggetto e impronta digitale della chiave pubblica per il certificato e per la chiave) e il test esatto che è stato eseguito. Il rapporto non contiene mai la chiave privata: la chiave viene usata per produrre una firma e non viene scritta nel testo, nel JSON o negli appunti. Ciò che copia o salva è sicuro da allegare a un ticket; la chiave che ha incollato non lo è, e dovrebbe considerare gli appunti come l'unico altro luogo in cui sia mai esistita.
Privacy: il certificato e la chiave vengono letti all'interno della scheda, nulla viene caricato e la pagina non effettua alcuna richiesta — non ci sono sonde né ricerche in questa pagina. Per creare una coppia corrispondente usi il generatore di certificati autofirmati; per richiedere un certificato per una chiave che già possiede usi il generatore di CSR; per leggere il contenuto di un certificato usi il decodificatore di certificati.
🔒 Strumenti SSL e TLS
Utilità per certificati e chiavi che funzionano interamente nel suo browser.