即使授予完全信任后,在 iOS 上获取 Charles 代理证书的 SSL 握手失败

Sta*_*ičs 6 ios charles-proxy

我不断地得到

与客户端的 SSL 握手失败 - 远程主机终止握手

iOS 16.1 中的 Charles Proxy 中出现错误,这应该表明证书不受信任,但我授予了对 iPhone 设置的完全信任。

以下是重现步骤:

  1. 在 macOS 上下载并安装 Charles Proxy 并启用 SSL 代理。HTTP代理端口设置为8888
  2. 在iPhone上,在wifi设置中启用手动代理并输入计算机的IP和端口8888
  3. 然后 Charles Proxy 中会出现对话框,需要单击“允许”
  4. 在 iPhone 上,请访问 chls.pro/ssl 以下载证书
  5. 在 iPhone 的设置中安装带有证书的新配置文件。
  6. 然后在设置 -> 常规 -> 关于 -> 证书信任设置中将证书的开关设置为打开。

我可以在 Charles Proxy 中看到请求,但它们都存在 SSL 握手错误。此外,iPhone 上的 Safari 浏览器会返回错误“此连接不是私有的”

有人可以解释我做错了什么吗?

这是证书信任设置的屏幕截图。

证书信任设置

Sta*_*ičs 14

最后,我发现了问题所在。就我而言,这是一个过期的证书。为了修复它,需要访问Help -> SSL Proxying -> Reset Charles Root Certificate...。它将生成一个新的。然后需要安装它并授予它信任。

我没有注意到它,因为之前我只使用 Android,它不会检查证书是否过期,这与 iOS 不同。

因为我无法找到类似情况的任何故障排除清单,所以我将在这里提及。希望它能帮助某人:

  1. 确保Enable SSL Proxying已启用 Proxy -> SSL Proxying Settings...
  2. 检查Exclude列表中是否不包含您尝试记录的位置。
  3. 检查是否Proxy -> Record Settings没有不需要的排除或包含
  4. 检查您的目标设备是否与计算机连接到同一 wifi 点。
  5. 检查目标设备上的 wifi 代理是否启用。
  6. 检查目标设备上的 WiFi 代理是否正常工作。可以通过输入错误的代理IP并尝试通过浏览器访问互联网来进行检查。如果代理正在工作,将无法访问互联网。(注意:在撰写此答案时,某些装有 iOS 16 的 iPhone 确实没有有效的代理。更多信息请参见此处
  7. 检查代理是否配置了正确的IP和端口
  8. 检查目标设备是否安装了Charles的证书
  9. 检查目标设备是否信任 Charles 的证书
  10. 检查 Charles 的证书是否未过期。如果是,请转至Help -> SSL Proxying -> Reset Charles Root Certificate...并重新安装证书。
  11. (对于Android)检查目标应用程序是否已network_security_config.xml引用AndroidManifest.xml