gpt4 book ai didi

python - 如何代理和记录 SSL 流量

转载 作者:太空宇宙 更新时间:2023-11-03 14:56:00 29 4
gpt4 key购买 nike

我在我的机器上运行本地 HTTP 代理服务器并执行一些日志记录。我也想记录 SSL 流量。为此,我运行了另一个用 Python 编写的代理服务器,它充当 SSL 服务器,带有我的自签名证书,HTTP 服务器将 CONNECT 请求转发到该代理服务器。 SSL 代理使用 SSL 处理“ssl”标准 Python 模块。此 SSL 代理应将 SSL 流量转发到目标 Web 服务器。

HTTP 代理成功转发来自浏览器的 CONNECT 请求,浏览器和 SSL 代理之间的连接建立 OK。 SSL 代理使用 SSL 套接字函数“读取”从浏览器接收 SSL 数据包,这大概应该返回已经解密的数据。这是在 SSL 代理上接收的示例数据包:

'\x16\x03\x01\x00\xc5\x01\x00\x00\xc1\x03\x03\xeb\xd09\x12\xe3=$Id:\xe5\xf9<Px\xf0\xda\x81R&\x02\xcau\xd2t=@\xe9\x95\xf8\x7f\x86\x00\x00\x18\xc0+\xc0/\xc0\n\xc0\t\xc0\x13\xc0\x14\x003\x002\x009\x00/\x005\x00\n\x01\x00\x00\x80\x00\x00\x00\x17\x00\x15\x00\x00\x12wiki.archlinux.org\xff\x01\x00\x01\x00\x00\n\x00\x08\x00\x06\x00\x17\x00\x18\x00\x19\x00\x0b\x00\x02\x01\x00\x00#\x00\x003t\x00\x00\x00\x10\x00#\x00!\x05h2-15\x05h2-14\x02h2\x08spdy/3.1\x08http/1.1\x00\x05\x00\x05\x01\x00\x00\x00\x00\x00\r\x00\x12\x00\x10\x04\x01\x05\x01\x02\x01\x04\x03\x05\x03\x02\x03\x04\x02\x02\x02'

这可以被识别为具有前导 0x16 字节和 197 字节长度的握手 SSL 数据包。目标服务器地址(wiki.archlinux.org)是可读的,还有协议(protocol)(spdy 和 http),但是这个数据的一般格式是什么?是否有一些工具或库可以用来解析这些数据包?

最佳答案

TLS1.2 的 RFC 中描述了这些数据的一般格式及以下。您需要解析的是一个 ASN.1 解析器,如 this one .但在你这样做之前,你可能应该了解你得到了什么样的信息。否则你会发现为时已晚,你不会在所有情况下都在 SSL 数据中找到目标服务器,因为只有在客户端使用服务器名称指示扩展时才会给出它。虽然所有现代浏览器都这样做,但较旧的浏览器不会这样做,而且某些移动应用程序或脚本也不会这样做。这意味着您应该改用 CONNECT 请求中给出的目的地。

有关如何编写此类代理的更多详细信息,我建议您查看 mitmproxy它可能已经完成了您正在尝试实现的操作或提供了库 libmproxy帮助您编写自己的代理。它是用 Python 编写的,因此您至少可以从开源中学习如何实现必要的功能。

关于python - 如何代理和记录 SSL 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29324673/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com