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

30

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?

    
posta Ashwin 30.04.2012 - 15:48
fonte

1 risposta

37

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).

    
risposta data 30.04.2012 - 18:41
fonte