如何计算X.509证书的SHA-1指纹?

Rom*_*nko 16 c encryption openssl x509

我正在尝试从头开始实现X.509证书生成器(我知道现有的,但我需要另一个).我无法理解的是如何计算证书的SHA-1(或任何其他)指纹.

RFC5280说,输入签名功能是DER编码即tbsCertificate场.不幸的是,我计算的哈希值与OpenSSL产生的哈希值不同.这是一个循序渐进的例子.

  1. 使用OpenSSL的x509工具生成证书(以二进制DER形式,而不是 ASCII PEM)
  2. 使用计算其SHA-1哈希 openssl x509 -fingerprint
  3. 使用dd(或其他任何东西)提取TBS字段并将其存储在单独的文件中; 使用该sha1sum实用程序计算其哈希值

现在,我在第2步和第3步得到的哈希值是不同的.有人可以给我一个暗示我可能做错了吗?

Rom*_*nko 19

好吧,事实证明,OpenSSL计算的指纹只是整个证书的散列(在其DER二进制编码中,而不是 ASCII PEM!),而不仅仅是TBS部分,正如我所想的那样.

对于任何人谁在乎计算证书的摘要,它以不同的方式完成:哈希是在DER编码(再次,计算在PEM字符串)TBS部分,包括它的ASN.1头(该ID的0x30 == ASN1_SEQUENCE | ASN1_CONSTRUCTED和长度字段).请注意,不考虑证书的ASN.1标头.

  • 您可以在您的答案(或问题)中添加您如何使用 dd 准确提取 TBS 部分以供将来参考:) (2认同)