c++ - OpenSSL 忽略自签名证书错误

标签 c++ c ssl openssl ssl-certificate

我正在使用 OpenSSL 库编写一个小程序,该程序应该与 SSLv3 服务器建立连接。此服务器分发自签名证书,这会导致握手失败并显示以下消息:“sslv3 警报握手失败,证书链中的自签名证书。”

有没有办法强制连接继续进行?我试过像这样调用 SSL_CTX_set_verify :

SSL_CTX_set_verify(ctx, SSL_VERIFY_NONE, NULL);

但似乎并没有改变什么。

有什么建议吗?

最佳答案

默认情况下,OpenSSL 遍历证书链并尝试验证每一步,SSL_set_verify() 不会改变这一点,请参阅手册页。引用它:

The actual verification procedure is performed either using the built-in verification procedure or using another application provided verification function set with SSL_CTX_set_cert_verify_callback(3).

因此解决方案是创建一个简单的回调并设置该回调,以便覆盖所有证书链遍历:

static int always_true_callback(X509_STORE_CTX *ctx, void *arg)
{
    return 1;
}

SSL_CTX_set_cert_verify_callback(CTX, always_true_callback);

关于c++ - OpenSSL 忽略自签名证书错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256950/

相关文章:

c++ - 模板和嵌套类型查找

c - 在 C 中发出清除输入流

c - 使用 gnuC 进行预处理时如何删除 __extension__

ruby-on-rails - 在新的 MacBookPRO M1 上运行 `gem install bundler` 时出现 SSL 验证错误

sql-server - JDBC:从 Linux 机器通过 SSL 连接到 MS SQL DB

c++ - 根据另一个数组的顺序对一个数组进行排序

c++ - 在包围点的网格内找到三角形的快速方法

c - 将指针从 main() 移动到第一个可执行函数

ssl - ssl 在这两种方式上都是安全的吗?

c++ - Windows XP 是否自动将数组初始化为零?