我一直在使用 Charles 检查我正在开发的应用程序与 API 之间的 https 流量。一切正常。现在 API 更改了主机,我无法再检查流量。我进入了javax.net.ssl.SSLHandshakeException: Connection closed by peer
应用程序。但是,没有代理,它也可以正常工作。我假设这个后端有一些特殊的东西阻止了代理。模拟器始终相同,我没有更改设置。会是什么原因呢?
答案1
如果 API 主机已发生更改,则很可能是所有者已实施了较新的 SSL 配置,该配置现在不再与您的 Charles 代理兼容。
我怀疑 SNI 支持可能是这里的问题。
现在很多人依赖 SNI 来允许他们在同一基础架构上使用多个 SSL 证书,但这意味着对非 SNI 实现的支持被取消。
这意味着您的客户端没有servername
在 HTTPS 握手中指定。
大多数最新软件都包含 SNI 支持,但您的 Charles 安装可能已过时并且使用openssl
不支持 SNI 的旧库。
也就是说,它也可能是最小 TLS 版本,即主机现在需要最小 TLS 版本 1.2,而 Charles 正在使用 1.1。
无论如何,如果 API 在没有代理的情况下工作,那么问题就出openssl
在 Charles 中的库上。