如何在python ssl中

时间:2018-04-12 02:32:40

标签: python sockets ssl tls1.2 pyopenssl

我正在使用python 3.6.5和Windows 10.我需要获得服务器选择的TLS版本(即将用于其余握手而不是客户端提供的版本) 。我这样做了:

import socket, ssl

context =  context = ssl.create_default_context()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
domain = 'google.com'
sslSocket = context.wrap_socket(s, server_hostname = domain)
sslSocket.connect((domain, 443))
print('the selected version by the server: ', sslSocket.cipher()[1])
print("success")
sslSocket.close()

但输出是:

the selected version by the server:  TLSv1/SSLv3
success

我需要准确的版本。即,在google.com的连接中,浏览器显示为TLS 1.2。如何在代码中获得准确的版本?

1 个答案:

答案 0 :(得分:0)

您正在混淆密码和协议版本。密码描述了选择哪种加密算法(即,如AES加密,SHA-1 HMAC,RSA认证,ECDHE密钥交换),而协议版本说明使用了哪种SSL / TLS协议版本。您当前显示的值仅为协议版本,因为客户端和服务器使用的公共密码可用于标准。

要获取您需要的连接使用的协议版本,请使用SSLSocket.version()

print('the selected version by the server: ', sslSocket.version())