der 证书“openssl x509 -in <filename>.der -noout -text”的签名值与 ASN.1 解码器不同 https://lapo.it/asn1js/

问题描述 投票:0回答:1

当我尝试从 DER 证书获取签名时,openssl 命令“openssl x509 -in .der -noout -text”

输出显示为:

签名算法:sha256WithRSAEncryption

签名值:'

    xx:xx:xx:xx:xx:xx:xx:xx

    .......................

    ..................xx:xx

在网站中,https://lapo.it/asn1js/当我上传 DER 文件时,签名字段显示为(2048 位)和一些二进制值。签名的实际 der 格式开头为“03 82 01 01 xx xx xx xx ..xx xx”。 03 82 01 01 之后的值与 openssl 签名值中的值不匹配;我不确定实际签名如何编码为 DER 格式以及如何解释它并将其转换为十六进制。据我了解,在 DER 编码中,我们必须添加 03 82 01 01,然后添加签名值。

示例我尝试使用 openssl 仅输出签名作为“openssl asn1parse -in .pem -strparse 799 -outsignature.bin”,该值与“openssl x509 -in .der -noout -text”输出匹配。有人可以告诉我这个实际签名如何编码到证书中以及如何解释它们。谢谢

openssl cryptography certificate x509certificate x509
1个回答
0
投票

我理解在DER编码中,我们必须添加03 82 01 01,然后添加签名值。

嗯,差不多了。在X.509规范中,签名定义如下:

signatureValue 字段包含根据计算得出的数字签名 ASN.1 DER 编码的 tbsCertificate。 ASN.1 DER 编码 tbsCertificate 用作签名函数的输入。 这个 签名值被编码为 BIT STRING 并包含在 签名字段。 此过程的详细信息是为每个 [RFC3279]、[RFC4055] 和 [RFC4491] 中列出的算法。

现在 ASN.1 BIT STRING 被编码为 DER TLV 格式,如标记、长度、值:

03  82 01 01  00  XX XX XX ..................................... XX 
TT  LL LL LL  BB  128 bytes for a 1024 bit signature / RSA key size

这里TT是标签的十六进制表示,82意味着需要多于1个长度字节,准确地说是2个。然后

01 01
就是值的长度。嗯,差不多了,因为 BIT STRING 通常还有一个
00
字节,表示 BIT STRING 值中的所有位都已使用(如果最后一个字节包含未使用的位,则其值可以为
00
07
)。

BIT STRING 的 DER 编码规则可以在很多文档中找到,或者您可以购买 ISO/IEC 8859 规范。

签名本身在 PKCS #1:RSA 加密规范版本 2.2中定义。


最后,要了解事物是如何构建的,可以在标准中找到。谁会觉得呢?实际上,如果您查看 X.509 标准,您会发现整个证书结构是用 ASN.1 表示法定义的,指定了它的每个可能的位(假设 DER,并考虑其他参考标准)。

© www.soinside.com 2019 - 2024. All rights reserved.