In un certificato digitale x509 esiste una sezione "impronta digitale del certificato". Contiene md5, sha1 e sha256. Come vengono ottenuti questi e, durante la connessione SSL, come vengono controllati questi valori?
L'impronta digitale, come visualizzata nella sezione Impronte digitali quando si guarda un certificato con Firefox o l'identificazione digitale in IE, è l'hash del certificato intero in forma DER.
Se il tuo certificato è in formato PEM, convertilo in DER con OpenSSL:
openssl x509 -in cert.crt -outform DER -out cert.cer
Quindi, esegui un hash SHA-1 su di esso (ad esempio con sha1sum1
):
sha1sum cert.cer
Questo dovrebbe produrre lo stesso risultato di quello che vedi nel browser. Questi valori non fanno parte del certificato, ma sono calcolati dal certificato.
Un'applicazione di queste impronte digitali è quella di convalidare i certificati EV. In questo caso, l'impronta digitale SHA-1 del certificato CA radice EV è hardcoded nel browser (nota che (a) è l'impronta digitale del cert root e (b) deve corrispondere esattamente agli ancore di sicurezza forniti con la versione del browser compilata con quei valori).
Oltre a questo, queste impronte digitali sono principalmente utilizzate per identificare i certificati (per organizzarli).
Sono le chiavi pubbliche effettive utilizzate per la verifica di altri certificati nella catena. Il digest utilizzato per firmare il certificato non è in realtà nel certificato (solo la firma risultante). Vedi struttura dei certificati :
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,
...
In questo caso, il valore della firma viene calcolato dalla codifica DER tbsCertificate (cioè il suo contenuto). Quando l'algoritmo della firma è SHA1 con RSA (ad esempio), un digest SHA-1 viene calcolato e quindi firmato utilizzando la chiave privata RSA dell'emittente. Questo digest SHA-1 non ha nulla a che fare con l'impronta digitale mostrata da openssl x509 -fingerprint
o all'interno del browser, poiché è solo quella della sezione tbsCertificate.
Ci sono anche un paio di estensioni non correlate che possono fare uso di digest, delle chiavi pubbliche questa volta: l'identificatore chiave soggetto e l'identificativo chiave autorità . Questi sono facoltativi (e all'interno del contenuto TBS del certificato).
Leggi altre domande sui tag cryptography digital-signature tls certificates certificate-authority