为什么 SSL 不能与 Web 代理一起使用(查尔斯)?

为什么 SSL 不能与 Web 代理一起使用(查尔斯)?

我一直在使用 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 中的库上。

相关内容