使用pyOpenSSL从捕获解析“Server Hello”

2024-06-05 23:32:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些TLS交换的pcap要调试。我想像OpenSSL那样从“serverhello”消息中提取内容。在

我有服务器发送的作为bytes对象的内容。它以b'\x16\x03\x03开头,表示握手类型,TLS版本1.2。Here就是Wireshark看到的一个例子。在

似乎pyOpenSSL必须能够解释这样一个对象,因为这正是OpenSSL在现实生活中从网络中看到的。通读pyOpenSSL的unit tests,似乎可以模拟从线路传入的数据。在

但是,我一直无法让它发挥作用:

from OpenSSL.SSL import Connection, Context, TLSv1_2_METHOD

context = Context(TLSv1_2_METHOD)
conn = Connection(context, None)
conn.set_connect_state()
conn.bio_write(b'\x16\x03\x03...')  # this goes on for a while
conn.do_handshake()

错误是OpenSSL.SSL.Error: [('SSL routines', 'tls_process_server_hello', 'parse tlsext')],这有点有希望——它在做一些的事情。正确地编写“Client Hello”而不是“Server Hello”会产生unexpected message,而编写乱码则会产生wrong version number错误(这也有意义)。在

我的目标是使^{} methods从这个重放的数据返回数据。是否可以这样做,或者pyOpenSSL不公开OpenSSL的必要部分?在


Tags: 数据对象ssl内容contexttlsconnectionconn