iOS 11:发生SSL错误,无法与服务器建立连接

时间:2018-03-19 10:42:15

标签: ios objective-c xcode ssl app-transport-security

当我尝试连接Server (which is IIS)时,我在控制台窗口上遇到以下错误:

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

我正在使用Xcode 9.2,iOS 11。

以下是我尝试但未奏效的解决方案:

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

  2. Add exception domain等。

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

  4. 这是我的plist ATS配置

    Screenshot

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

    任何修复?

1 个答案:

答案 0 :(得分:1)

根据屏幕截图判断,您可能正在使用.dev域名。如果是这样,您将无法禁用ATS,因为Google拥有.dev域名,并且他们已选择要求所有.dev域名都需要HTTPS。在iOS 11中,Apple支持HSTS预加载,这允许某些域仅限于安全连接。 .dev顶级域名(TLD)现在是需要HTTPS的顶级域名之一。点击此处了解详情:https://stackoverflow.com/a/47698675/3708242

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

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

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

总结如下:

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