web-dev-qa-db-ja.com

証明書のフィンガープリントの実際の値は何ですか?

X509デジタル証明書には、「証明書のフィンガープリント」セクションがあります。 md5、sha1、sha256が含まれています。これらはどのように取得され、SSL接続中にこれらの値はどのようにチェックされますか?

34
Ashwin

フィンガープリント。Firefoxで証明書を表示したときにフィンガープリントセクションに表示されます。または、IEは、entire証明書のハッシュです。 DERフォーム。

証明書がPEM形式の場合は、OpenSSLを使用してDERに変換します。

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

次に、SHA-1ハッシュを実行します(例:sha1sum1を使用):

sha1sum cert.cer

これにより、ブラウザに表示されるのと同じ結果が生成されます。これらの値は証明書の一部ではなく、証明書から計算されます。

これらのフィンガープリントの1つのアプリケーションは、EV証明書の検証です。この場合、ルートEV CA証明書のSHA-1フィンガープリントは ブラウザでハードコードされています ((a)ルート証明書のフィンガープリントであり、(b)一致する必要があることに注意してください)これらの値でコンパイルされたブラウザーのバージョンに同梱されているトラストアンカー)。

これとは別に、これらのフィンガープリントは主に証明書を識別するために(それらを整理するために)使用されます。

チェーン内の他の証明書の検証に使用されるのは、実際の公開鍵です。証明書の署名に使用されるダイジェストは実際には証明書には含まれていません(結果の署名のみ)。 証明書の構造 を参照してください:

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

この場合、署名値はDERエンコードされたtbsCertificate(つまり、その内容)から計算されます。署名アルゴリズムが(たとえば)RSAを使用するSHA1の場合、SHA-1ダイジェストが計算され、発行者のRSA秘密鍵を使用して署名されます。このSHA-1ダイジェストは、openssl x509 -fingerprintまたはブラウザ内で表示されたフィンガープリントとは関係ありません。これは、tbsCertificateセクションのみのものであるためです。

今回は公開鍵のダイジェストを利用できる無関係な拡張機能もいくつかあります: Subject Key Identifier and Authority Key Identifier 。これらはオプションです(証明書のTBSコンテンツ内)。

39
Bruno