Openssl CSR的哈希代码

Openssl CSR的哈希代码,openssl,certificate,sha1,public-key-encryption,csr,Openssl,Certificate,Sha1,Public Key Encryption,Csr,我已经使用软件Dakota生成了P10证书和认证申请人文档。该文档包含哈希代码。此哈希代码应该是证书公钥的SHA1哈希 为了验证这一点,我使用openssl将P10证书转换为PEM格式的证书。 然后,我使用openssl提取了这个PEM证书的公钥。 在对该公钥应用SHA1哈希算法时,我获得了一个不同于达科他软件自动生成的哈希代码 我做错什么了吗 这里我可以想到两个可能的问题。首先,您的公钥是PEM格式的吗?如果是这样,您可能希望在获取SHA1哈希之前将其转换为DER格式 第二个可能的问题是散列可

我已经使用软件Dakota生成了P10证书和认证申请人文档。该文档包含哈希代码。此哈希代码应该是证书公钥的SHA1哈希

为了验证这一点,我使用openssl将P10证书转换为PEM格式的证书。 然后,我使用openssl提取了这个PEM证书的公钥。 在对该公钥应用SHA1哈希算法时,我获得了一个不同于达科他软件自动生成的哈希代码


我做错什么了吗

这里我可以想到两个可能的问题。首先,您的公钥是PEM格式的吗?如果是这样,您可能希望在获取SHA1哈希之前将其转换为DER格式

第二个可能的问题是散列可能不仅仅是公钥的散列。它可能是公钥、可分辨名称和一组证书属性(可选)的散列。这些组件与签名一起构成CSR


我不知道为什么散列会在那里。如果签名是CSR的一部分,则实际上不需要散列。

我已将公钥转换为DER格式,并尝试将散列应用于完整的CSR p10格式和PEM格式。在所有情况下,生成的哈希值都不匹配。当您创建CSR时,将使用可分辨名称、公钥和其他证书属性的哈希值。此哈希已签名,签名作为CSR的一部分包含。如果您所说的散列与签名所基于的散列相同,那么您将无法只获取CSR的SHA1散列。您必须在十六进制编辑器中打开CSR,删除签名算法、签名和第一个ASN.1头字节。然后,您可以获取剩余内容的SHA1散列,这将与签名所基于的散列相匹配。