python - 在 python 中测量 TLS 握手性能时间
问题描述
我有一个简单的脚本,它在 python 中执行 TLS 握手,其方式与他们文档中的以下方式类似:
import socket, ssl
context = ssl.SSLContext()
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
ssl_sock.connect(('www.verisign.com', 443))
我想测量一次 TLS 握手所花费的时间。所以我假设在函数之前启动一个计时器connect
,并减去经过的时间,如下所示:
start = time.process_time()
sslSocket.connect((domainName, 443))
perfTime = time.process_time() - start
我查看了connect
文档,这就是它所说的:
连接到地址处的远程套接字。(地址的格式取决于地址族——见上文。)如果连接被信号中断,该方法将等待连接完成,或者在超时时引发 socket.timeout,如果信号处理程序没有引发异常并且套接字阻塞或超时。对于非阻塞套接字,如果连接被信号中断(或信号处理程序引发的异常),该方法会引发 InterruptedError 异常。
我的问题是:connect
我的代码中的函数是否执行 TLS 握手?这就是我要衡量的性能:TLS 握手。connect 是一个 TCP 级别,但我将套接字包装在 TLS 上下文中。请向我澄清如何在我的简单代码中测量 TLS 握手性能?
解决方案
尝试这个:
ssl_sock = context.wrap_socket(s, do_handshake_on_connect=False)
然后,手动执行 SSL 握手:
...
ssl_sock.connect(('www.verisign.com', 443))
start = time.process_time()
ssl_sock.do_handshake()
perfTime = time.process_time() - start
print("Handshaking time " + perfTime)
推荐阅读
- azure - Azure 认知服务 - 容器的计费如何注册?
- firebase - Firebase 命令行列出来自 GCP firebase 的函数
- python - 在 Python 中使用带有 OpenCV 的 dicom 图像
- installation - 安装 Spyder(2018 年更新)
- wildfly - 禁用 WildFly 13 管理控制台
- r - 使用R将两行合并为一个标题
- javascript - MobX Observables 和 RxJS 有什么关系吗?
- laravel - laravel 没有显示错误,但只有 http:500 错误?
- sparql - SPARQL 路径遍历
- python-3.x - cx_Oracle.DatabaseError:DPI-1047:无法加载 32 位 Oracle 客户端库:“找不到指定的模块