ssl - 在 OpenSSL 中握手后查找 SSL 版本

标签 ssl encryption openssl pyopenssl

我想找出目标支持的协议(protocol),但问题是他们有很多网站不支持特定版本,但当我执行握手时它是成功的,因为目标超过了我提供和执行的版本在支持的版本上握手 [它只发生在 1 个网站上]

示例:我传递了一个版本:TLSVersion.TLS_1_2 但握手是使用 TLSv1_0 执行的,因为它不支持 TLSVersion.TLS_1_2

由于上述问题,我想在握手时检查版本,我不想使用 scapy.ssl_tls

version = [SSL.SSLv23_METHOD,
            SSL.TLSv1_METHOD,
            SSL.TLSv1_1_METHOD,
            SSL.TLSv1_2_METHOD]
context = OpenSSL.SSL.Context(version)
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
soc.settimeout(CONNECTION_TIMEOUT)
connection = OpenSSL.SSL.Connection(context,soc)
connection.connect((host,port))
connection.do_handshake() 
#wants to check version here

最佳答案

i want to check the version on handshake

在 pyOpenSSL 中检查客户端和服务器用于剩余 session 的版本的相关函数是 get_protocol_version_nameget_protocol_version :

connection.do_handshake()
#wants to check version here
print(connection.get_protocol_version_name())

请注意,这些函数仅在 pyOpenSSL 0.16.0 之后可用

另请注意,您在创建上下文时不能指定 TLS 方法列表,但 only a single method它实质上指定了客户端支持的最小 TLS 版本。因此

context = OpenSSL.SSL.Context(SSL.TLSv1_METHOD)

允许客户端使用 TLS 1.0 及更高版本。如果您改为使用 SSL.TLSv1_2_METHOD,客户端将被限制为 TLS 1.2 或更高版本,因此无法与仅支持 TLS 1.0 的服务器建立 SSL 连接。

关于ssl - 在 OpenSSL 中握手后查找 SSL 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40064403/

相关文章:

c# - 使用 ProtectedData.Protect 时的 DataProtectionScope

c - md5 引用错误

ssl - 了解 Mutual TLS,使用服务器名的客户端配置

Python SSL 套接字 : receiving and sending from both server and client

java - 用java编写多表转置密码

c - C 中的 AES-GCM 解密

html - 在安全页面上嵌入不安全的 Flash 对象

php - 我的 PayPal 脚本突然停止验证 SSL 证书

ssl - 如何使用 openssl 获取根 CA 证书指纹

ruby-on-rails - 调用服务器到服务器 CloudKit Web 服务时出现授权错误