Encryption 检查连接是否为TLSv1 vs SSLv3(SSL\u密码\u描述/SSL\u密码\u获取\u名称)

Encryption 检查连接是否为TLSv1 vs SSLv3(SSL\u密码\u描述/SSL\u密码\u获取\u名称),encryption,openssl,Encryption,Openssl,我有一个使用OpenSSL的服务器应用程序。我试图了解什么类型的SSL连接正在影响我的系统(即SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2)。特别是,我正在致力于禁用SSLv3(re:POODLE)。在此之前,我想看看SSLv3上连接的是谁/什么 我目前正在使用SSL\u CIPHER\u description和SSL\u CIPHER\u get\u name函数,它们提供了关于为每个连接协商的密码的非常好的信息 我在尝试区分SSLv3和TLSv1连接时遇到了一些挑战。

我有一个使用OpenSSL的服务器应用程序。我试图了解什么类型的SSL连接正在影响我的系统(即SSLv2、SSLv3、TLSv1、TLSv1.1、TLSv1.2)。特别是,我正在致力于禁用SSLv3(re:POODLE)。在此之前,我想看看SSLv3上连接的是谁/什么

我目前正在使用SSL\u CIPHER\u description和SSL\u CIPHER\u get\u name函数,它们提供了关于为每个连接协商的密码的非常好的信息

我在尝试区分SSLv3和TLSv1连接时遇到了一些挑战。每 :

我已经确认TLSv1连接被记录为SSLv3 Ex:SSL\u CIPHER\u description在肯定是TLSv1.0的连接上返回以下内容: AES256-SHA SSLv3 Kx=RSA Au=RSA Enc=AES(256)Mac=SHA1

有人知道如何在OpenSSL中检测连接是SSLv3还是TLSv1吗?

请参阅API和朋友

此外,SSLv3/TLS数据包都以一个标头开始,您也可以轻松地检查该标头:

Byte 0  : Record Type
Byte 1  : Version Major
Byte 2  : Version Minor
Byte 3-4: Length of payload minus header (16k max)
主要版本如下所示:

Major == 2: SSLv2 (The rest differs from SSLv3+ headers)
Major == 3: SSLv3, TLSv1.0, TLSv1.1, or TLSv1.2
Minor == 0: SSLv3
Minor == 1: TLSv1.0
Minor == 2: TLSv1.1
Minor == 3: TLSv1.2
次要版本:

Major == 2: SSLv2 (The rest differs from SSLv3+ headers)
Major == 3: SSLv3, TLSv1.0, TLSv1.1, or TLSv1.2
Minor == 0: SSLv3
Minor == 1: TLSv1.0
Minor == 2: TLSv1.1
Minor == 3: TLSv1.2
但请注意,在握手/协商完成之前,使用的版本可能会更改。如果您等待应用程序数据,它应该是准确的。TLSv1.2记录的示例应用程序数据:

0x17 0x03 0x03 ...
嗅探数据


如果这只是为了研究,另一种方法是嗅探数据或类似数据。

您可以在成功协商连接后使用该方法。

谢谢。SSL\u get\u cipher\u版本也没有帮助。它当前返回“TLSv1/SSLv3”。根据spec(),这是预期的。我会看看我是否能找出标题检查如果这只是为了研究,你可以使用Wireshark或类似的工具来捕获/嗅探数据。你所描述的是记录层版本,它不同于SSL/TLS协议版本。它们彼此独立(按设计)。“在我能做到这一点之前,我想看看谁/什么在SSLv3上连接…”在客户端的采用率为99.7%。拔下SSLv3上的插头,不要向后看。在POODLE出现10年前,安全社区告诉你由于SSLv3的问题而停止使用它(见Loren Weith的论文)。如果客户在2015年没有TLS能力,那么它永远不会。。。