首页 > 解决方案 > 使用 pyOpenSSL 从捕获中解析“Server Hello”

问题描述

我有一些 TLS 交换的 PCAP 需要调试。我想以 OpenSSL 的方式从“Server Hello”消息中提取内容。

我有服务器发送的可用bytes对象。它从b'\x16\x03\x03握手类型开始,TLS 版本 1.2。是 Wireshark 看到的示例。

看起来 pyOpenSSL 必须能够解释这样的对象,因为这就是 OpenSSL 在现实生活中从网络中看到的。阅读 pyOpenSSL 的单元测试,看起来可以模拟来自网络的数据。

但是,我一直无法让它工作:

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')],这是有希望的 - 它正在做某事。正确编写“客户端问候”而不是“服务器问候”会给出一个unexpected message,而编写乱码会给出一个wrong version number错误(这也是有道理的)。

我的目标是能够使这些Connection.get_方法从重放的数据中返回数据。是否可以这样做,或者 pyOpenSSL 是否没有公开 OpenSSL 的必要位?

标签: pythonsslopensslpyopenssl

解决方案


推荐阅读