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

问题描述 投票:0回答:3

我不断得到

与客户端的 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 会返回错误“此连接不是私有的”

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

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

Certificate Trust Settings

ios charles-proxy
3个回答
7
投票

终于发现问题了。就我而言,这是一个过期的证书。为了修复它,需要转到

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

1
投票

更新到最新版本的 Charles(撰写本文时为 4.6.4)解决了我的问题。


0
投票

如果您的问题是 iOS 设备上的证书过期,请确保在重新创建新证书后重新启动 charles 应用程序本身。

  1. Help -> SSL Proxying -> Reset Charles Root Certificate...
  2. 按照帮助框中的指南导航到 chls.pro/ssl
  3. 安装证书
  4. Settings -> About -> Certificate Trust Settings -> Toggle new certificate on
  5. 中启用信任设置
  6. 重新启动 Charles 应用程序
© www.soinside.com 2019 - 2024. All rights reserved.