当前位置: 首页 > 知识库问答 >
问题:

如何代理和记录SSL流量

王嘉木
2023-03-14

我在我的机器上运行一个本地HTTP代理服务器并执行一些日志记录。我还想记录SSL流量。为此,我运行了另一个用Python编写的代理服务器,它作为SSL服务器,使用我的自签名证书,HTTP服务器forwads将请求连接到该服务器。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'

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

共有1个答案

左丘繁
2023-03-14

TLS1的RFCs中描述了这些数据的一般格式。2及以下。您需要解析的是ASN。1个这样的解析器。但在你做这件事之前,你应该了解你得到的是什么样的信息。否则,您将发现太晚,在所有情况下都无法在SSL数据中找到目标服务器,因为只有当客户端使用服务器名称指示扩展时,才会给出目标服务器。虽然所有的现代浏览器都会这样做,但较旧的浏览器不会,一些移动应用程序或脚本也不会这样做。这意味着您应该使用连接请求中给定的目标。

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

 类似资料:
  • 我正在实现我自己的代理,目的是记录HTTP流量。从我到目前为止的研究来看,这并不是微不足道的,因为第一个请求(CONNECT)是在没有通过HTTP加密的情况下完成的(在端口443上-使用常规服务器套接字),然后通过HTTP隧道到SSL(HTTPS),这需要由安全的服务器套接字(取自SLServerSocketFactory)处理。 换句话说,在第一个连接请求之后,我需要将实现从非安全切换到安全服务

  • 我正在编写一个代理,可以捕获selenium测试中的请求。在selenium中,我使用了这个 接受客户端请求的代理部分 这是连接服务器的部分 我可以访问服务器。我的问题是客户端请求接受部分和转发到服务器的部分应该是什么,在###之间,这将允许我以人类可读的格式捕获流量?我不太擅长证书。欢迎任何帮助。

  • 我正在尝试让Genymotion(一个托管在Virtualbox中的x86 Android模拟器)与Charles代理一起工作。我已经设法将设备连接到设备wifi代理设置中的代理,使用网关ip(vm配置为使用仅限主机的适配器fwiw),并且http流量可以很好地代理。我已经在vm上安装了charles证书,但所有ssl连接仍然失败,出现“ssl:Unrecognized ssl message,p

  • 问题内容: 我不知道如何将信息级别的消息记录到stdout,但将其他所有内容记录到stderr。我已经阅读了http://docs.python.org/library/logging.html。有什么建议吗? 问题答案: 以下脚本: 运行时,产生以下结果。 正如你所期望的,因为在终端上,并是相同的。现在,让我们将标准输出重定向到文件: 因此,INFO消息没有被打印到终端-但指示消息 已 被打印。

  • 问题内容: 我一直在尝试使用curl登录barnesandnoble.com移动网站,到目前为止还没有运气。我返回的页面没有任何错误,它再次将我的电子邮件默认设置为登录页面的电子邮件输入表单框(使用print $ result返回的表单)。 通过更改LOGINURL指向eBay的登录名,相同的代码实际上可以使我正确地进入ebay。 唯一的区别是barnesandnobles是https://,而e

  • 我正在寻找一种方法来记录一个视频UDP流使用ffmpeg但在10MN块。我目前使用以下获得10MN的视频(与h264转码)。 “FFMPEG-I UDP:/239.0.77.15:5000-MAP 0:0-MAP 0:1-S 640x360-VCODEC LIBX264-G 100-VB 500000-R 25-严格实验-VF YADIF-ACODEC AAC-AB 96000-AC 2-T 60