【发布时间】:2013-02-27 23:48:52
【问题描述】:
我正在尝试使用 Boost ASIO 编写一个简单的 HTTP/HTTPS 代理。 HTTP 工作正常,但我在使用 HTTPS 时遇到了一些问题。作为记录,这是一个本地代理。无论如何,这里是一个事务如何与我的设置一起工作的示例。
浏览器请求 Google.com
我对浏览器撒谎并告诉它转到 127.0.0.1:443
浏览器套接字连接到我在 443 上的本地服务器
我尝试读取标头,以便进行真正的主机查找并打开第二个上游套接字,以便我可以简单地转发请求。
这就是事情立即失败的地方。当我尝试打印传入套接字的标头时,它们似乎已被发出请求的浏览器加密。起初我以为混乱的控制台输出可能只是标题被压缩,但经过一些彻底的测试后,情况并非如此。
所以我想知道是否有人能指出我正确的方向,也许是一些阅读材料,我可以更好地理解这里发生的事情。为什么在与“服务器”(我的代理)的连接甚至完成并有机会与客户端通信之前,标头会立即加密?是临时键吗?我是否需要忽略初始标头并发送一些命令告诉客户端使用什么临时密钥或根本不压缩/加密?非常感谢您的帮助,我已经坚持了一段时间。
【问题讨论】:
-
如果您发布一些您遇到问题的代码将会很有帮助。
-
阅读 asio ssl 示例。您应该在任何发送/接收之前进行 async_handshake
-
感谢大家的cmets。问题是,如果我在客户端连接到代理时握手,浏览器就会意识到这一点,并会说证书不真实以及其他所有内容。我正在尝试创建一个本地透明代理,以便浏览器不知道通过 SSL 交换的内容正在本地过滤。只是为了记录,这听起来可能是恶意的,但它适用于客户端知道本地代理正在运行的应用程序,没有恶意。 :) 我会看看我是否可以发布一些代码。
标签: c++ boost ssl openssl boost-asio