检查证书签名是否为 MD5 OpenSSL

Check if Certificate Signature is MD5 OpenSSL

我需要检查 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 证书的 hash/encryption。您可以使用 OBJ_txt2nid().

生成您要比较的 nids

所以您想将算法 nid 与 OBJ_txt2nid("1.2.840.113549.1.1.4") 进行比较 - 或者在实践中 NID_md5WithRSAEncryption(在 openssl/objects.h 中定义)

编辑: 只是为了添加更多信息:X509v3 RFC refers to other RFCs which define "acceptable" algorithms. These are RFC3279, RFC4055, and RFC4491。它们都包含可以使用的 OID。只有第一个似乎用 MD5 哈希定义方案。