it-swarm.dev

Qual è il valore effettivo di un'impronta digitale del certificato?

In un certificato digitale x509 è presente una sezione "impronta digitale del certificato". Contiene md5, sha1 e sha256. Come vengono ottenuti e durante la connessione SSL come vengono controllati questi valori?

34
Ashwin

L'impronta digitale, come visualizzata nella sezione Impronte digitali quando si esamina un certificato con Firefox o l'impronta digitale in IE è l'hash dell'intero intero certificato 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 es. 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 è la convalida dei certificati EV. In questo caso, l'impronta digitale SHA-1 del certificato CA EV radice è hardcoded nel browser (nota che (a) è l'impronta digitale del certificato root e (b) deve corrispondere esattamente gli ancoraggi di fiducia forniti con la versione del browser compilata con tali valori).

A parte 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 la firma del certificato non è in realtà nel certificato (solo la firma risultante). Vedi struttura del certificato :

   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 dal certificato tbsCodificato DER (ovvero il suo contenuto). Quando l'algoritmo di firma è SHA1 con RSA (ad esempio), viene calcolato un digest SHA-1 e quindi firmato utilizzando la chiave privata RSA dell'emittente. Questo digest SHA-1 non ha nulla a che fare con l'impronta digitale mostrato da openssl x509 -fingerprint o all'interno del browser, poiché è solo quello della sezione tbsCertificate.

Ci sono anche un paio di estensioni non correlate che possono fare uso dei digest, delle chiavi pubbliche questa volta: Identificatore chiave oggetto e Identificatore chiave autorità . Questi sono opzionali (e all'interno del contenuto TBS del certificato).

39
Bruno