gpt4 book ai didi

ssl - 在代理中响应 HTTP CONNECT

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

我目前正在实现代理。这是一个特殊的代理,它只回复以前记录的请求(它有一个请求/响应的数据库,并在收到请求后返回匹配项,此数据库是使用 Fiddler 生成的)。事实上它是离线的。

这对于没有 SSL 的站点工作正常,但对于 SSL 站点,有一个 CONNET HTTP 消息

CONNECT myserver:9443 HTTP/1.1
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (Unknown; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) PhantomJS/1.9.0 Safari/534.34
Host: myserver

我不知道收到这个请求后我应该返回什么?

谢谢

最佳答案

(可能对 this question 感兴趣。)

一个普通的 HTTPS 代理会处理 CONNECT 请求,建立一个到 myserver:9443 的 TCP 连接,如果这个连接建立成功,返回一个 200 状态码到客户端。在此之后,它只是在客户端和目标服务器之间中继所有内容,而不查看它。

由于您正在尝试实现 MITM 代理(也离线),因此您将不得不通过将进出客户端的流量重定向到伪 HTTPS 服务器来模拟与实际服务器的连接。

您可以通过实现一个伪造的套接字类并通过 ssl.wrap_socket 包装它来做到这一点。 (据推测,由于您的应用程序已经可以离线处理纯 HTTP,因此您已经完成了一些使用离线数据模拟读取和写入伪套接字的工作。)

您还可以即时生成证书。通常,您的代理服务器可以拥有自己的 CA,您可以将其 CA 证书导入客户端的信任 anchor 。使用那个 CA,在从客户端发送任何 SSL/TLS 数据到你的伪服务器之前,生成一个用那个 CA 签名的证书,对请求的主机名有效(你可以从 CONNECT 获得),并用它配置你的伪服务器。如果没有这一步,客户应该提示证书无效。

关于ssl - 在代理中响应 HTTP CONNECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23878171/

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