【问题标题】:Certificate error open ssl C证书错误打开 ssl C
【发布时间】:2012-07-12 01:15:56
【问题描述】:

我在 c 中使用 openssl 来验证证书。有什么办法可以跳过自签名证书错误?对于所有具有无效/过期/不匹配 url 证书的站点,我都收到该错误,并且我无法检测到任何其他错误。

我使用了这个函数 SSL_CTX_load_verify_locations(ctx,0,CA_LIST)) 加载 CA_LIST。它究竟是做什么的?

【问题讨论】:

  • 1.你能发布你得到的错误代码吗? 2. 你能把你传递的内容作为 CA_LIST 发布吗?
  • 证书链中的自签名证书

标签: c++ openssl x509certificate


【解决方案1】:

当对等方发送的证书列表中存在根证书或自签名证书时,证书链中的错误自签名证书会出现,但是您的信任存储中没有加载相同的证书。

SSL_CTX_load_verify_locations(ctx,0,CA_LIST)) 将尝试加载 CA_LIST 中提到的路径中存在的 CA。

函数原型为int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath);

OpenSSL 帮助页面显示:

"如果 CApath 不为 NULL,它指向一个包含 PEM 格式的 CA 证书的目录。每个文件都包含一个 CA 证书。这些文件由 CA 主题名称哈希值查找,因此必须可用。如果存在多个具有相同名称哈希值的 CA 证书,扩展名必须不同(例如 9d66eef0.0、9d66eef0.1 等)。搜索按扩展名的顺序执行,而不考虑证书的其他属性。使用 c_rehash 实用程序创建必要的链接。 CApath 中的证书仅在需要时才进行查找,例如在构建证书链或实际执行对等证书验证时。”

您可以从 OpenSSL 页面here 获取更多信息。

【讨论】:

  • 有没有办法获取 pem 文件?还是我必须为每个站点保存它们?我的意思是当我第一次访问一个站点时,如果它是自签名证书,我会保存它吗?有办法吗?
  • 你的代码中是否设置了验证回调?如果是,当您收到您提到的错误时,将调用您的验证回调,您可以从 X509_STORE_CTX 访问证书,您可以将其保存在 CApath 的位置。所以下次建立连接时会用到。
  • 不,我没有使用验证回调。您能给我一个示例代码来执行此操作并将证书保存到 CApath 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 2013-11-14
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多