我正在尝试使用Boost ASIO编写简单的HTTP/HTTPS代理。 HTTP工作正常,但我在使用HTTPS时遇到了一些问题。为了记录,这是一个本地代理。无论如何,这里是一个交易如何与我的设置一起工作的例子。使用OpenSSL提升ASIO无法读取HTTP头文件
浏览器向Google.com
我骗了浏览器,并告诉它去127.0.0.1:443
浏览器插座连接到我的本地服务器上443
我尝试读取头,所以我可以做一个真正的主机查找并打开第二个上游套接字,因此我可以简单地转发请求。
这是事情立即失败的地方。当我尝试打印传入套接字的标题时,看起来它们已经被发出请求的浏览器加密了。我首先想到,也许混乱的控制台输出只是标题被压缩,但经过一些彻底的测试,情况并非如此。
所以我想知道是否有人可以指引我正确的方向,也许一些阅读材料,我可以更好地了解这里发生了什么。为什么在连接到“服务器”(我的代理)之前,头文件会立即加密,甚至完成并有机会与客户端进行通信?它是一个临时密钥吗?我是否需要忽略初始标题并发送一些命令,告诉客户端临时密钥要使用还是不要压缩/加密?非常感谢您的帮助,我一直坚持这一点。
如果你发布了一些你有问题的代码,这将会很有帮助。 – 2013-02-28 04:42:11
阅读asio ssl示例。你应该在任何发送/接收前做出async_handshake – PSIAlt 2013-02-28 13:31:22
感谢球员的评论。问题是,如果我在客户端连接到代理时进行握手,浏览器就会意识到这一点,并且会抛出认证不是真实的以及其他所有内容。我试图制作一个本地透明代理,以便浏览器不知道通过SSL交换的内容正在被本地过滤。只是为了记录,这听起来可能是恶意的,但是对于客户端意识到本地代理正在运行的应用程序而言,没有恶意的意图。 :)我会看看我是否可以发布一些代码。 – Alexiie 2013-02-28 14:16:29