在python中测量TLS握手性能时间

时间:2018-10-08 07:46:05

标签: python sockets ssl network-programming tls1.2

我有一个简单的脚本,该脚本以python的documentation中的以下方式执行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握手性能?

1 个答案:

答案 0 :(得分:1)

尝试一下:

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)