协议设计思路
基本思路
- 借鉴 HTTP Proxy 的设计, Client 与 ProxyServer 间使用 HTTPS 通信
- 以下设 Client 需要访问 https://www.example.com, 而需要经过 ProxyServer https://proxyserver.com
- Client 将需要访问的 URL 作为参数, 向 ProxyServer 发出请求, https://proxyserver.com/https://www.example.com
- ProxyServer 解析请求得到目标 WebServer 的 URL, 访问之得到应答, 再转发给 Client
功能实现
- 由于设计中客户端借由浏览器完成访问, 只需要实现服务端, 我们完成了以下功能:
- 基本转发
- 用户认证
- 消息加密
- 攻击防护
- 使用 Python http.server 模块处理 Client 请求, 使用 urllib.request 向 WebServer 发出请求, 进一步完成向 Client 的转发
- 使用 RFC7235 完成用户认证, 具体过程为: 服务器收到用户请求后, 若请求头不包含
Authorization
域或内容用户名/密码匹配错误, 则返回 401 及WWW-Authenticate: Basic
返回头, 提醒浏览器进行或再次进行认证 - 注: 经测试 Chrome 仅支持对
WWW-Authenticate: Basic
响应, 而对其它认证 手段或Proxy-Authenticate
无响应
- 使用 HTTPS 进行套接字消息加密, 防止认证信息(Base64), 访问 URL (明文) 及 数据内容泄漏
- 攻击防护方面, 仅进行了 DDoS 攻击的防护, 在同一源 IP 地址认证失败 10 次后 不再对此 IP 地址的请求进行应答
- 为了使得页面内链接能够正常访问,需要把其中一些以代理服务器为domain的url改成实际的domain
功能测试截图






组员分工
王文新:协议设计,基本转发框架,用户认证,攻击防护
何哲:协议设计,基本转发中修改domain,消息加密