首页 > 解决方案 > 在 openssl 中验证证书时忽略公用名

问题描述

我们正在编写一个新的服务器/客户端应用程序,需要在 OpenSSL 1.1.0 中验证自签名证书,其中 CN 字段并不重要。

我尝试执行以下操作,但似乎没有效果:

X509_VERIFY_PARAM *param = NULL;
param = SSL_get0_param(sslo.ssl);
X509_VERIFY_PARAM_set1_host(param, nullptr, 0);

我怎样才能有效地忽略该字段的所有验证?

Shane回答后更新:

我尝试使用 SSL_CTX_set_verify 设置 verify_callback 。在回调中,我调用了 X509_STORE_CTX_get_error_depth 。生成的错误代码是 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT,根据文档,这意味着“通过的证书是自签名的,并且在受信任的证书列表中找不到相同的证书”。

此错误非常通用,与 CN 无关,如果我仅将证书中的 CN 字段更改为适当的值,则不会发生。

标签: c++securityopenssl

解决方案


使用SSL_CTX_set_verify调用来指定您自己的验证回调函数,您可以在其中确定您希望关于证书的任何内容。

仔细阅读该页面,它应该会告诉您您需要知道的所有内容,该页面还包含一个示例,如果您愿意,您可以将其作为处理程序的基础。


推荐阅读