web-dev-qa-db-fra.com

Quelle est la valeur réelle d'une empreinte digitale de certificat?

Dans un certificat numérique x509, il y a une section "empreinte digitale du certificat". Il contient md5, sha1 et sha256. Comment sont-elles obtenues et pendant la connexion SSL, comment ces valeurs sont-elles vérifiées?

34
Ashwin

L'empreinte digitale, comme affiché dans la section Empreintes digitales lorsque vous regardez un certificat avec Firefox ou l'empreinte numérique dans IE est le hachage du certificat entier sous forme DER.

Si votre certificat est au format PEM, convertissez-le en DER avec OpenSSL:

openssl x509 -in cert.crt -outform DER -out cert.cer

Ensuite, effectuez un hachage SHA-1 dessus (par exemple avec sha1sum1):

sha1sum cert.cer

Cela devrait produire le même résultat que ce que vous voyez dans le navigateur. Ces valeurs ne font pas partie du certificat, elles sont plutôt calculées à partir du certificat.

Une application de ces empreintes digitales consiste à valider les certificats EV. Dans ce cas, l'empreinte SHA-1 du certificat CA racine EV est codée en dur dans le navigateur (notez que (a) il s'agit de l'empreinte digitale du certificat racine et (b) il doit correspondre exactement les ancres de confiance fournies avec la version du navigateur compilée avec ces valeurs).

En dehors de cela, ces empreintes digitales sont principalement utilisées pour identifier les certificats (pour les organiser).

Ce sont les clés publiques réelles qui sont utilisées pour la vérification des autres certificats de la chaîne. Le résumé utilisé pour signer le certificat n'est en fait pas dans le certificat (uniquement la signature résultante). Voir structure de certificat :

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

Dans ce cas, la valeur de signature est calculée à partir du certificat tbs codé DER (c'est-à-dire son contenu). Lorsque l'algorithme de signature est SHA1 avec RSA (par exemple), un résumé SHA-1 est calculé puis signé à l'aide de la clé privée RSA de l'émetteur. Ce condensé SHA-1 n'a rien à voir avec l'empreinte digitale montrée par openssl x509 -fingerprint ou dans le navigateur, car c'est celui de la section tbsCertificate uniquement.

Il existe également quelques extensions non liées qui peuvent utiliser des résumés, des clés publiques cette fois: l'identificateur de clé de sujet et l'identificateur de clé d'autorité . Celles-ci sont facultatives (et font partie du contenu du SCT du certificat).

39
Bruno