Skip to content

v3.x HTTPS相关教程

Otto Mao edited this page Dec 1, 2017 · 1 revision

AnyProxy解析HTTPS的原理是自制根证书(rootCA),待终端信任这份证书之后,再用它签发各个域名的二级证书,此时二级证书可以重新对各个页面进行解析。这种方案和HTTPS的“中间人攻击”(MITM)是一致的。

这份中文文档简略概述了用AnyProxy做HTTPS处理的相关流程。更完整的内容可以读这里的英文文档:https://github.com/alibaba/anyproxy/wiki/How-to-config-https-proxy

Step 1 - 安装openSSL

  • 从v3.10.0开始,用户不再需要安装openssl

Step 2 - 生成RootCA,打开,信任它

  • 生成RootCA

    • 命令行执行 sudo anyproxy --root
  • 找到RootCA文件

    • 方法一: 执行完成之后,会打开证书的安装路径,即可看到 rootCA.crt 文件
    • 方法二: 启动anyproxy,浏览器打开 http://localhost:8002/fetchCrtFile ,也能获取rootCA.crt文件
    • 方法三:启动anyproxy,http://localhost:8002/qr_root 可以获取证书路径的二维码,移动端安装时会比较便捷
  • 打开上述rootCA.crt文件

  • 根据操作系统提示,信任rootCA

    • Windows
      • https://t.alipayobjects.com/tfscom/T1D3hfXeFtXXXXXXXX.jpg_700x.jpg
    • Mac
      • https://t.alipayobjects.com/tfscom/T1NwFfXn0oXXXXXXXX.jpg_400x.jpg
  • 其他

    • 如果在访问时出现UNAUTHORIZED_CERTIFICATE一类的安全警告,请重新检查证书的安装情况
    • 证书只需生成一次,使用前每个终端都需要信任它

Step 3 - 明文解析HTTPS

  • 需要解析HTTPS时,用intercept参数来启动anyproxy anyproxy --intercept
  • 为终端设置代理,在UI界面就能看到明文的HTTPS请求数据了,带把小锁的就是HTTPS请求

进阶 - 用rule来手动处理https请求(如:代理文件到本地)

  • AnyProxy默认不会解析https请求,你需要引入shouldInterceptHttpsReq 这个函数来显式指定解析哪个请求。具体可以参照这份sample : rule_intercept_some_https_requests.js

其他

  • anyproxy --clear可以清除所有已生成的证书。清除后,各终端需要重新安装证书。
  • 日常开发中,不要使用anyproxy --type https来调试。AnyProxy使用https over http的方法来进行代理,而这条命令启动的是一个https代理服务器,两者使用场景完全不同。