Python 3.x python TLS套接字中的TLS会话恢复
我有一个简单的python TLS客户机,它连接到TLS服务器。我无法控制服务器。我需要与每台服务器进行新的TLS握手,即使我最近访问过它 1) 默认情况下,非浏览器TLS客户端(如以下python客户端)是否执行会话恢复 2) 我怎么知道他们是做还是不做?如果在后台执行会话恢复,如何禁用会话恢复 请注意,我为连接到的每个新域创建了一个新套接字Python 3.x python TLS套接字中的TLS会话恢复,python-3.x,sockets,session,ssl,tls1.2,Python 3.x,Sockets,Session,Ssl,Tls1.2,我有一个简单的python TLS客户机,它连接到TLS服务器。我无法控制服务器。我需要与每台服务器进行新的TLS握手,即使我最近访问过它 1) 默认情况下,非浏览器TLS客户端(如以下python客户端)是否执行会话恢复 2) 我怎么知道他们是做还是不做?如果在后台执行会话恢复,如何禁用会话恢复 请注意,我为连接到的每个新域创建了一个新套接字 import socket, ssl context = ssl.SSLContext() context.verify_mode = ssl.CE
import socket, ssl
context = ssl.SSLContext()
context.verify_mode = ssl.CERT_NONE
context.check_hostname = False
mycipher = "DHE-RSA-AES128-SHA"
context.set_ciphers(mycipher)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
domain = "google.com"
mySocket = context.wrap_socket(sock, server_hostname = domain)
mySocket.connect((domain, 443))
mySocket.close()
这是一个困难但有趣的问题。你确实使用了一个恰当的术语TLS,它给我带来了快乐;-) 首先,请注意TLS1.3中的会话恢复已更改,因此这可能会影响您将来的工作(至少在TLS1.3之前的命名中,此功能更多地说明了会话和票证,而TLS1.3更倾向于说明预共享密钥): 现在谈谈你的问题: 1) 默认情况下,非浏览器TLS客户端(如以下python客户端)是否执行会话恢复?
ticket\u lifetime\u hint
和has\u ticket
;这应该与收地有关ssl.OP\u无票据
阻止客户端请求会话票证
PyOpenSSL
(与股票ssl
)中,因为这里甚至有一个关于如何为该库禁用此功能的问题:ClientHello
/ServerHello
开始,其中恢复从相同的消息开始,但使用pre_shared_key
扩展名。它的存在将显示TLS恢复。在TLS1.2中,客户端将在恢复握手期间发送一个SessionTicket
扩展ssl.OP_NO_TICKET
。否则,默认情况下它是OP_ALL
,这是一个包含各种选项的包,旨在最大限度地提高互操作性,但内容可能会根据您的Python版本和使用的底层OpenSSL库而变化has_ticket
属性,我猜它将使用TLS恢复或设置为使用它import socket
import ssl
hostname = 'www.stackoverflow.com'
context = ssl.create_default_context()
# Create a new socket, then create a secure socket
sock = socket.create_connection((hostname, 443))
ssock = context.wrap_socket(sock, server_hostname=hostname)
# Was the TLS Session re-used?
print(ssock.session_reused) # False
谢谢还有一件事。如果客户端使用
设置\u密码
更改其密码套件。i、 例如,客户端使用密码电路与服务器进行第一次握手,然后客户端使用set\u ciphers
更改其密码电路,然后客户端与同一服务器进行第二次握手(就在第一次握手之后)。仍然可以使用会话恢复吗?客户端更改密码是否强制执行新的握手?这对我来说有点棘手,所以我会感谢你的帮助。我说的是TLS 1.2。你能检查一下我的问题吗?你从哪里得到的印象是你可以随时更改密码?的确,消息名为ChangeCipherSpec,但这只是在握手开始时交换,而不是在飞行中交换。参见TLS1.2:在安全参数达成一致后,但在发送验证完成消息之前,在握手过程中发送ChangeCipherSpec消息。非常感谢您的帮助。你能检查一下我的后续问题吗?