在 OpenSSL 中,我试图在握手期间检查证书链。
当客户端连接时,我创建了 SSL_CTX*
和 SSL*
然后我设置了验证回调
SSL_set_verify(_ssl, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, verify_callback);
然后在我的函数中
int verify_callback(int preverify_ok, X509_STORE_CTX *x509_ctx) {
bool ok = false;
[...]
return ok ? 1 : 0;
}
(我从GitHub中复制了示例代码)
当我执行它时,如果函数返回 1,则一切正常,但当它返回 0(又名失败)时,整个过程停止(退出代码 0)
我目前正在 Win10 x64 上的 cygwin64 下编译,这是最新的
我这样做有什么问题吗?
最佳答案
文档有答案:
The return value of verify_callback controls the strategy of the further verification process. If verify_callback returns 0, the verification process is immediately stopped with "verification failed" state. If SSL_VERIFY_PEER is set, a verification failure alert is sent to the peer and the TLS/SSL handshake is terminated.
取自: https://www.openssl.org/docs/manmaster/ssl/SSL_CTX_set_verify.html
因此,您可能遗漏了异常或其他内容。
关于c++ - OpenSSL 在证书验证错误时自行终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38647399/