C++ Boost asio (OpenSSL) 获取活动连接的密码和 TLS/SSL 版本
Posted
技术标签:
【中文标题】C++ Boost asio (OpenSSL) 获取活动连接的密码和 TLS/SSL 版本【英文标题】:C++ Boost asio (OpenSSL) get cipher and TLS/SSL version of active connection 【发布时间】:2016-12-31 17:25:46 【问题描述】:我们使用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;
看起来 Boost asio 并没有真正的接口来在设置密码后查询连接。
我可以通过调用这个来获得 OpenSSL SSL_CTX* 指针:
SSL_CTX* ctx = pContext->impl();
或调用 OpenSSL SSL*:
m_psslsocket->native_handle()
但从 OpenSSL 文档中,我无法弄清楚如何从中获取使用的密码和 TLS 版本。
【问题讨论】:
密码在SSL*
上可用,而不是SSL_CTX*
。见SSL_CIPHER_get_name
和朋友们。
是的,这似乎可行,谢谢。现在我只需要找出使用的 TLS/SSL 版本。
【参考方案1】:
OpenSSL 文档says:
SSL_client_version() 在发起连接时返回客户端在 ClientHello 的 legacy_version 字段中通告的数字协议版本。请注意,对于 TLS,即使随后协商了 TLSv1.3,此值也永远不会指示高于 TLSv1.2 的版本。 SSL_get_version() 返回用于连接的协议名称。 SSL_version() 返回用于连接的数字协议版本。仅应在初始握手完成后调用它们。在此之前,这些函数返回的结果可能不可靠。
所以答案是:
SSL_get_version(SSL*)
【讨论】:
以上是关于C++ Boost asio (OpenSSL) 获取活动连接的密码和 TLS/SSL 版本的主要内容,如果未能解决你的问题,请参考以下文章