【问题标题】:How to compare two openssl X509 certificate object C++如何比较两个openssl X509证书对象C++
【发布时间】:2014-11-15 09:07:33
【问题描述】:

我有两个 X509 对象

X509 *cert1;
X509 *cert2;

如何判断这两个证书是相同的还是不同的?两个相同证书的哪些属性相同?

【问题讨论】:

  • int X509_cmp(const X509 *a, const X509 *b)函数
  • 如果比较结果相等,是否表明证书相同?
  • X509 证书的比较有两个级别: 1. X509 NAME 比较,比较颁发者或主题(无延期、到期日期等)。 2. 比较所有数据 - 我们的X509_cmp 案例。此函数计算完整证书的哈希并通过 memcmp 函数进行比较。此功能与您可以从命令行检查哈希相同#md5sum cert.crt
  • 感谢您的信息 :) 就我而言,有 2 个证书 - 一个来自服务器,另一个在我的本地目录中。我想根据我的本地证书验证服务器证书。哪种类型的比较(1 或 2)可以确定 - 证书相同还是不同?
  • 当然对于您的情况 X509_cmp。 X509_NAME 用于证书查找。

标签: openssl x509


【解决方案1】:

X509_cmp(const X509 *a, const X509 *b) 非常适合逐字节比较两个证书的 SHA_1 哈希。所以@AlexBezuglyi 是 100% 正确的。但实际上我打算(但无法在这个问题中表达)验证服务器证书是否由根证书(受信任的 CA 签名证书)签名。

使用X509_verify

int X509_verify的签名是

int X509_verify(X509 * x509, EVP_PKEY * pkey);

假设您在root 中拥有根证书,在cert 中拥有服务器证书

X509 * root;
X509 * cert;

//Get local certificate into root
//Get server certificate into cert

//Get the public key.
EVP_PKEY * pubkey = X509_get_pubkey(root);

//verify. result less than or 0 means not verified or some error.
int result = X509_verify(cert, pubkey);

//free the public key.
EVP_PKEY_free(pubkey);

【讨论】:

    猜你喜欢
    • 2020-11-30
    • 1970-01-01
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 2017-03-08
    相关资源
    最近更新 更多