C++ Boost asio (OpenSSL) 获取活动连接的密码和 TLS/SSL 版本

Ger*_*out 6 c++ boost openssl boost-asio

我们使用Boost asio 进行一些 SSL 通信。连接和通信工作正常,但现在我们想显示连接使用的实际TLS版本和密码。

我们用于SSL连接的 Boost asio 对象定义如下:

typedef boost::asio::ssl::stream<boost::asio::ip::tcp::socket> ssl_socket;
boost::shared_ptr<ssl_socket>   m_psslsocket;
boost::asio::ssl::context* m_pcontext;
Run Code Online (Sandbox Code Playgroud)

看起来 Boost asio 实际上并没有一个接口来在设置后查询密码连接。

我可以通过调用以下命令来获取 OpenSSL SSL_CTX* 指针:

SSL_CTX* ctx = pContext->impl(); 
Run Code Online (Sandbox Code Playgroud)

或者通过调用 OpenSSL SSL*:

m_psslsocket->native_handle()
Run Code Online (Sandbox Code Playgroud)

但从 OpenSSL 文档中我无法弄清楚如何从中获取使用的密码和 TLS 版本。

小智 0

OpenSSL 文档

SSL_client_version() 返回发起连接时客户端在 ClientHello 的 Legacy_version 字段中通告的数字协议版本。请注意,对于 TLS,该值永远不会指示高于 TLSv1.2 的版本,即使随后协商了 TLSv1.3。SSL_get_version() 返回用于连接的协议的名称。SSL_version() 返回用于连接的数字协议版本。仅应在初始握手完成后调用它们。在此之前,这些函数返回的结果可能不可靠。

所以答案是:

SSL_get_version(SSL*)
Run Code Online (Sandbox Code Playgroud)