我想找出目标支持的协议(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_name或 get_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/