使用sslvSSLv23如何判断协商的是哪个TLS/SSL协议?

How to determine which TLS/SSL protocol was negotiated when using sslvSSLv23?

我正在使用 TIdSSLIOHandlerSocketOpenSSL 打开一个 TLS/SSL 连接。我目前想要支持 tls 1.0 到 1.2。

我这样初始化IOHandler。

TIdSSLIOHandlerSocketOpenSSL(FSocket.IOHandler).SSLOptions.SSLVersions := [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1];

建立连接后,如何获取连接协商的协议? (都是为了确保客户端和测试服务器的配置都是正确的,最终为了统计目的)。

连接后我查看了SSLContext.Method,但连接后还是显示sslvSSLv23SSLContext.SSLVersions 显示 [sslvTLSv1_2,sslvTLSv1_1, sslvTLSv1].

那么我如何获得这些信息呢?

具体协商协议在TIdSSLIOHandlerSocketOpenSSL.SSLSocket.Cipher.Version属性SSL/TLS会话建立后。 OpenSSL 还有一个 SSL_get_version() 函数(Indy 没有使用,但你可以直接调用)。