OpenSSL在证书验证错误时自行终止

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,这是最新版本

我在做什么错?

+0

另请参阅OpenSSL wiki上的[TLS Client](http://wiki.openssl.org/index.php/SSL/TLS_Client)。示例代码具有打印证书的回调。 – jww

文档给出了答案:

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

所以也许你错过了一个异常或东西。

+0

该文档没有讨论类似于杀死进程的内容。我附加了你在stdout/stderr(取自Netbeans输出窗口)中的程序写入了什么'4294956672:错误:14089086:SSL例程:ssl3_get_client_certificate:证书验证失败:s3_srvr.c:3270:' – full98

+0

您是否尝试单步执行代码一个调试器?同时检查是否有任何抛出的异常。 –

+0

Ops ...我以为我在try ... catch语句中写了一些代码,但实际上并没有。我的错!无论如何非常感谢你 – full98