【问题标题】:iOS 11 : SSL error occurred and connection to server cannot be madeiOS 11:发生 SSL 错误,无法连接到服务器
【发布时间】:2018-08-27 21:27:53
【问题描述】:

当我尝试与 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

这是我的 plist ATS 配置

附言该项目由第三方供应商在 2014 年用 Objective-C 编写。这个问题是由于 Objective-C 语言造成的吗? (嗯,我不这么认为)

有什么办法吗?

【问题讨论】:

  • 您的服务器端是否正确链接证书?如果是,请在此处查看您的网站 --> ssllabs.com/ssltest
  • @NiravKotecha:服务器未设置为安全。没有 HTTPS 或 SSL。这只是abc.pqr.lmn
  • 我不确定这是否是问题所在,但是您是否尝试过从配置中的域名中删除https://-part?
  • 域名中没有https。它只是abc.pqr.lmn
  • 但是您已经在上面显示的 Info.plist 中指定了协议。域异常应该只是域。例如abc.def.com不是 http://abc.def.com.

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


【解决方案1】:

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

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

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

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

总之:

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

【讨论】:

  • 另外,有关避免 .dev TLD 的更多信息,这里有一篇很棒的文章解释了 HTST 预加载问题:medium.engineering/use-a-dev-domain-not-anymore-95219778e6fd
  • 感谢您的回答!让我试试这个,会给出答复。我访问的端点也是 xxx.xxxengine.local.dev。我刚刚在评论中提到了 abc.pqr.lmn。
  • 好的,我不确定,但在您的屏幕截图中看到了 .dev。如果您尝试在没有 HTTPS 的情况下连接到任何 .dev 域,它肯定会在 iOS 11 中引起问题。此外,您可以通过尝试在 Safari 中访问服务器来确认这是一个问题。 Safari 也支持 HTST 预加载列表。
  • 阅读 Medium 上的帖子后,我在 Xcode 8.3.3 上测试了应用程序,它运行良好。但不推荐解决方案,因此将尝试从域中删除 .dev。再次感谢朋友!!
  • 你救了我!过去 3 天我一直被这个问题困扰...非常感谢!
猜你喜欢
  • 2020-11-02
  • 2015-12-21
  • 2018-06-06
  • 2019-06-26
  • 2017-01-22
  • 2013-10-11
  • 2016-02-28
  • 2017-09-03
  • 2019-10-08
相关资源
最近更新 更多