我需要检查 X509 证书的签名算法是 MD5 还是 SHA。为此,我知道我可以提取与签名算法对应的 NID:
int sig_nid = OBJ_obj2nid(cert->sig_alg->algorithm);
现在的问题是我似乎无法找到一种简单的方法来将其与 MD5 或 SHA 进行比较,因为我确实相信可以为签名返回多个 NID。有没有一种简单的方法来比较这个 NID 或者我可以找到所有 MD5 和 SHA NID 的地方以便我自己可以进行长时间比较?
最佳答案
我认为这就是您所追求的:http://www.alvestrand.no/objectid/1.2.840.113549.1.1.html它列出了可用于 X509 证书的散列/加密。您可以使用 OBJ_txt2nid()
生成您要比较的 nids。
所以您想将算法 nid 与 OBJ_txt2nid("1.2.840.113549.1.1.4")
进行比较 - 或者在实践中 NID_md5WithRSAEncryption
(在 中定义openssl/objects.h
)
编辑: 只是为了添加更多信息:X509v3 RFC指的是定义“可接受”算法的其他 RFC。这些是 RFC3279 , RFC4055 , 和 RFC4491 .它们都包含可以使用的 OID。只有第一个似乎使用 MD5 哈希定义方案。
关于检查证书签名是否为 MD5 OpenSSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31426648/