OpenSSL在证书验证错误时自行终止
问题描述:
在OpenSSL中,我试图在握手期间检查证书链。
当客户端连接创建澈SSL_CTX*
和SSL*
然后我设置验证回调OpenSSL在证书验证错误时自行终止
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
所以也许你错过了一个异常或东西。
另请参阅OpenSSL wiki上的[TLS Client](http://wiki.openssl.org/index.php/SSL/TLS_Client)。示例代码具有打印证书的回调。 – jww