MicroPython是否支持TLS会话复用?STM32F7DISCO握手耗时优化求助
问题:MicroPython ussl模块无法复用TLS会话以缩短握手耗时
我已经实现了带证书的Python TLS服务器,可与STM32F7DISCO设备通信。但受限于硬件性能,STM完成TLSv1.2客户端/服务器握手需要6-7秒。为缩短后续消息传输的握手时间,我尝试复用TLS会话,却遇到以下错误:
('192.168.178.82', '255.255.255.0', '192.168.178.1', '192.168.178.1') Traceback (most recent call last): File "main.py", line 58, in <module> File "main.py", line 27, in open AttributeError: 'SSLSocket' object has no attribute 'session'
这个错误表明,无法复用会话的原因是ussl模块未实现会话功能。以下是我的客户端代码:
import usocket as socket import ussl as ssl import random # import time __version__ = '0.2.0' __subversion__ = 'Client' __author__ = "Philipp" class send_data: def __init__(self): # 连接相关参数与计数器 self.server_port = 2002 self.server_ip = '192.168.178.67' self.server_address = (self.server_ip, self.server_port) self.server_ca = 'cert/server-cert.der' self.session_nr = None self.server_ca_bytes = None def open(self): # 建立与服务器的连接 with open(self.server_ca, 'rb') as f: self.server_ca_bytes = f.read() client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(self.server_address) ssl_context = ssl.wrap_socket(client_socket, cadata=self.server_ca_bytes) self.session_nr = ssl_context.session ssl_context.close() client_socket.close() def send(self, msg_nr: int): with open(self.server_ca, 'rb') as f: self.server_ca_bytes = f.read() try: # 向服务器发送数据 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client_socket.connect(self.server_address) ssl_context = ssl.wrap_socket(client_socket, cadata=self.server_ca_bytes, session=self.session_nr) msg = "MSG from Client " + str(msg_nr) ssl_context.write(msg.encode('utf-8')) ssl_context.close() client_socket.close() return 0 except Exception as e: return 1 if __name__ == "__main__": msg_nr = 0 error_count = 0 tls_com = send_data() tls_com.open() while True: return_msg = tls_com.send(msg_nr) error_count += return_msg print('已发送编号: ', msg_nr) print('错误数: ', error_count) msg_nr += 1 # wait_timer = random.randint(1,9) # wait_timer = 1 # print('等待时间: ', wait_timer) # time.sleep(wait_timer)
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

