【问题标题】:Programmatically get the issuer certificate C++以编程方式获取颁发者证书 C++
【发布时间】:2017-09-21 17:44:10
【问题描述】:

我正在使用已验证证书中存在的 CRL 对证书吊销检查进行编程。 对于支票,我还需要发行人证书。

在哪里可以找到发行人的 URL 地址?

我知道我可以使用此函数获取发行人的名称:

X509_NAME *X509_get_issuer_name(const X509 *);

但我需要获取 url,从那里我可以获取颁发者证书以调用 X509_CRL_verify(X509_CRL *, EVP_PKEY *) 函数。

【问题讨论】:

  • 您可能不想接受答案。在 Stack Overflow 上,站外链接并不真正被视为答案。没有人为您提供该部分任务的代码。

标签: c++ ssl openssl x509certificate x509


【解决方案1】:

发行者的 URL 没有这样的东西,我不明白你为什么需要一个。 对于 CRL 检查,您需要包含在原始证书中的 CRL 分发点。有关使用 X509_get_ext_d2iNID_crl_distribution_points 从证书中提取这些信息的代码,请参见 C++ Check CRL For Revocation

【讨论】:

  • 那是我正在查看的确切源代码。虽然有函数 is_revoked_by_crl(X509 *x509, X509 *issuer, X509_CRL *crl_file) 需要发行者的 X509 文件。我唯一的想法是来自我所在机器的整个证书链。
  • @Dracke:所以你不需要发行者的 URL,而是发行者的证书,这是非常不同的,即链接与实际数据。为了使用由颁发者签名的 CRL,您需要已经信任颁发者,这意味着证书应该在您的信任库中(即通常带有 openssl 的特殊文件或目录)。如果您构建证书链,您将获得此证书,无论如何您都应该这样做来验证证书。详情请见Programmatically verify certificate chain using OpenSSL API
  • 如果我仍然在验证输入证书,是否可以使用 issuer 参数跳过 crl 吊销?
  • @Dracke:不,你不能跳过它。路径验证只检查证书是否由受信任的 CA 颁发,CRL/OCSP 会检查该 CA 稍后是否撤销了证书。当然,您还应该检查证书的主题是否符合预期(即在 HTTPS 服务器证书的情况下 URL 的主机名)。还有过期时间、密钥使用情况……
  • @Dracke:评论太复杂了,实际上不再是您最初询问的内容。但我建议查看 OpenSSL 源代码中的apps/verify.c,尤其是那里的功能检查。在那里您可以看到如何检查证书(使用X509_verify_cert)以及如何提取链(查找show_chain)。
猜你喜欢
  • 2021-10-13
  • 2016-04-20
  • 1970-01-01
  • 2013-07-09
  • 1970-01-01
  • 2015-04-11
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多