【发布时间】:2020-03-19 02:59:58
【问题描述】:
在BIO_do_connect 通话期间是否执行证书验证?
我试图了解何时使用ssl_get_verify_result()。
文档说这个函数应该和ssl_get_peer_certificate一起使用。但是一些示例(例如IBM's)没有,说OpenSSL 为我们进行了验证。他们只在BIO_do_connect 之后调用ssl_get_verify_result()。
我看到BIO_do_connect其实是一个宏:
/* BIO_s_accept() and BIO_s_connect() */
# define BIO_do_connect(b) BIO_do_handshake(b)
# define BIO_do_accept(b) BIO_do_handshake(b)
# endif /* OPENSSL_NO_SOCK */
# define BIO_do_handshake(b) BIO_ctrl(b,BIO_C_DO_STATE_MACHINE,0,NULL)
所以,我的理解是BIO_do_connect 实际上并没有检查服务器是否发送了证书。如果服务器确实发送了证书,那么ssl_get_verify_result 将使用它来执行验证。如果它没有发送一个,那么ssl_get_verify_result 仍然返回X509_V_OK。这就是为什么我们需要调用ssl_get_peer_certificate 以确保确实发送了证书。这个对吗?
【问题讨论】:
标签: c++ openssl ssl-certificate