c++ - 在 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 字段更改为适当的值,则不会发生。
解决方案
使用SSL_CTX_set_verify调用来指定您自己的验证回调函数,您可以在其中确定您希望关于证书的任何内容。
仔细阅读该页面,它应该会告诉您您需要知道的所有内容,该页面还包含一个示例,如果您愿意,您可以将其作为处理程序的基础。
推荐阅读
- python - Discord.py 重写机器人在 heroku 中不起作用,但在本地工作
- node.js - 如何在 NodeJs 中无请求地访问会话数据?
- php - cURL POST - 您如何使用 POSTFIELDS 进行此特定查询
- javascript - TypeORM:如何创建双向的一对多关系?
- jquery - 在 bootstrap4 轮播中,如何使特定幻灯片停留更长时间?
- r - 随机森林预测模型
- highcharts - 区域图表多线渐变颜色
- pytest - 仅针对其他人的代码禁止 pytest 警告
- django - 状态数组未更新
- c# - 如何在 C# 中获得适用于“MediaToolKit”的进度条?