我正在使用 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/