SSL证书签名验证

问题描述:

我试图手动验证嵌入式主板上的证书,因为它不支持Openssl或其他库。但是,它具有用于MD5和SHA1哈希和RSA加密的库。SSL证书签名验证

根据我的理解来验证证书,首先计算证书的SHA1哈希(或MD5);然后使用CA的公钥对签名进行解码以获得哈希值。这两个散列值应该相同。

SHA1散列产生一个20字节的值,MD5产生16个字节的值。但是,签名的RSA解码不会。如果CA的密钥是1024位,则解码签名将是80字节;如果CA的密钥是512位,则解码的签名将是40个字节。所以我无法真正比​​较20字节的SHA1值与40或80字节解码签名。

我做错了什么?还是我错过了一个步骤?

+0

仅供参考:我正尝试使用嵌入式板来验证传入证书。这些证书将由使用Openssl生成的专用CA生成并签署。 – TSCOconan

缺少的位是填充算法。

您可以使用RSA和特定的填充算法,同样的算法还会告诉您如何获取结果(解密签名时)并从中提取实际数据(哈希)。

+0

感谢您的信息, 我有一个后续问题。当我使用openssl签署证书“openssl ca -config ca.cnf -policy policy_anything -out certs/certificate.crt -infiles request.csr”Openssl使用的默认填充方法是PKCS#5?如果我错了,没有办法改变它,请纠正我?我相信CA命令或ca.cnf文件中没有任何选项允许我们选择填充方法? – TSCOconan

+0

我想我在上面的评论中犯了一个错误。 Openssl使用PKCS#1进行填充,私钥/公钥和所有与证书有关的事情?我想没有办法告诉Openssl给我们0填充,因为我无法在CA命令中找到选项no ca.cnf文件。 – TSCOconan

+0

我不认为可以使用命令行工具更改填充。如果你想写一些代码,这是可能的。但是你需要一个非常好的理由不要填充你的输入(例如,如果你做自己的填充),否则你可能会在方案中引入弱点。 –