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