检查证书签名是否为 MD5 OpenSSL

标签 c 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 证书的散列/加密。您可以使用 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/

相关文章:

c - 结构段错误 : 11. 无法重新分配首先初始化为 null 的结构中的值

c - 循环被忽略 - 指令仅执行一次

带有填充数组的 C 简单代码

linux - 如何通过 gradle 脚本在 ubuntu 15 x86_64 上使用 openssl for x86 构建 nginx

java - 使用openssl解密用java加密的aes-gcm

c - C const 的默认类型是什么?

c - 如何列出包含头文件的所有文件

客户端在 ssl 握手期间 FIN、ACK 后向服务器发送 RST

c - 与 OpenSSL 命令兼容的关键功能的密码?

c++ - 将哈希值存储到 int