iOS11:发生 SSL 错误,无法连接到服务器

iOS 11 : SSL error occurred and connection to server cannot be made

当我尝试连接 Server (which is IIS) 时,控制台出现以下错误 window :

API 错误:发生 SSL 错误,无法与服务器建立安全连接。 因此无法登录。

我正在使用 Xcode 9.2,iOS 11。

以下是我尝试过但没有奏效的解决方案:

  1. App Transport Security Settings -> Allow Arbitrary Loads -> YES

  2. Add exception domain

  3. 与服务器团队一起对 IIS 进行故障排除,发现它不安全,即没有 HTTPS 或 SSL

这是我的 plist ATS 配置

P.S。该项目由第三方供应商于 2014 年在 Objective-C 中编写。此问题是由于 Objective-C 语言引起的吗? (我不这么认为)

任何修复?

从屏幕截图来看,您可能正在使用 .dev 域。如果是这样,您将无法禁用 ATS,因为 Google 拥有 .dev 域,并且他们已选择要求所有 .dev 域都需要 HTTPS。在 iOS 11 中,Apple 支持 HSTS 预加载,这允许将某些域限制为仅安全连接。 .dev top-level 域 (TLD) 现在是需要 HTTPS 的 TLD 之一。在此处查看更多相关信息:

您的屏幕截图包含以 .dev 结尾的 ATS 异常,但您的评论指定了不同的域。我假设您的 Info.plist 中可能存在多个异常,并且您使用 .dev 对本地服务器进行内部测试。如果是这种情况,只需将内部测试的域更改为 *.dev 以外的域。此外,并不是说您的屏幕截图中的异常不正确,因为它在异常域中包含 http:// 。而不是 InfoPlist 中的条目,如“http://mylocalserver.local”,您应该只有 "mylocalserver.local"(没有 http://)。

如果 abc.pqr.lmn 的条目相同(它还包括异常域中的协议),请删除 "http://",它应该可以工作。

此外,您的例外列表有点乱。如果您根本不使用 https,您应该能够删除除 NSExceptionAllowsInsecureLoads 之外的所有条目。如果要允许不支持 ATS 最低要求的 HTTPS 连接,则指定所有其他设置。如果您只是想 non-secure HTTP 流量,请摆脱其他流量。

总而言之:

  1. 不要使用 .dev 域进行本地测试,因为 Google 现在拥有 top-level 域并且要求所有新的浏览器/操作系统在连接到任何以 .dev 结尾的内容时使用 HTTPS。开发者
  2. 不要在 Info.plist
  3. 的 ATS 例外域中包含 "http://"
  4. 它与它在 Objective-C 中没有任何关系 - 它与 iOS 11 实施 HSTS 预加载有关。