【发布时间】:2023-04-03 21:45:02
【问题描述】:
我应该期望 SSL/TLS 增加多少开销?
我正在使用带有 OpenSSL 1.0.1f 和 Python 3.4.3 的 Ubuntu 14.04。
test.py
from datetime import datetime
import socket
import ssl
with socket.socket() as server:
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(('', 8001))
server.listen(1)
while True:
with server.accept()[0] as client:
start = datetime.now()
client = ssl.wrap_socket(client, 'key.pem', 'cert.pem', True)
end = datetime.now()
print('{:.0f}ms'.format((end - start).total_seconds() * 1000))
client.send(b'hello')
client.shutdown(socket.SHUT_RDWR)
启动服务器
$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
$ python3 test.py
然后连接
$ for i in $(seq 20); do openssl s_client -cert cert.pem -key key.pem -connect localhost:8001; done
$ # output shows TLSv1.2 is being used
即使在同一主机上, TLS 协商也需要 15 毫秒。当我删除 TLS 时,我测量整个连接、传输和关闭的时间为
我在这里没有太多经验,但这似乎比我预期的要慢得多。那是数百万个时钟周期。从洛杉矶到纽约的速度比光还慢。
(1) 这种表现是否符合我的预期? (2) 造成这种性能的限制因素是什么? (3) 我可以更改此代码以使初始 TLS 协商更快吗?
【问题讨论】:
-
This page 声称由于网络延迟,通常为 250-500 毫秒。在同一台主机上 15 毫秒似乎很好(是的,它可能使用数百万个时钟周期,因为众所周知 DH 密钥交换是计算密集型的)。诀窍是让连接保持打开状态,因此您只需执行一次。
标签: python performance sockets ssl tls1.2