我正在尝试使用 Boost ASIO 编写一个简单的 HTTP/HTTPS 代理。HTTP 工作正常,但我在使用 HTTPS 时遇到了一些问题。作为记录,这是一个本地代理。无论如何,这里是一个事务如何与我的设置一起工作的示例。
浏览器请求 Google.com
我对浏览器撒谎并告诉它转到 127.0.0.1:443
浏览器套接字连接到我在 443 上的本地服务器
我尝试读取标头以便进行真正的主机查找并打开第二个上游socket 所以我可以简单地转发请求。
这是事情立即失败的地方。当我尝试打印传入套接字的标头时,它们似乎已被发出请求的浏览器加密。起初我认为混乱的控制台输出可能只是标题被压缩,但经过一些彻底的测试后,情况并非如此。
所以我想知道是否有人能指出我正确的方向,也许是一些阅读材料,我可以更好地理解这里发生的事情。为什么在与“服务器”(我的代理)的连接甚至完成并有机会与客户端通信之前,标头会立即加密?是临时键吗?我是否需要忽略初始标头并返回一些命令告诉客户端使用什么临时密钥或根本不压缩/加密?非常感谢您的帮助,我已经坚持了一段时间。