当我尝试连接服务器(即 IIS)
时,控制台窗口出现以下错误:
API 错误:发生 SSL 错误,无法与服务器建立安全连接。 因此无法登录。
我使用的是 Xcode 9.2、iOS 11。
以下是我尝试过但没有奏效的解决方案:
应用程序传输安全设置
->允许任意加载
->YES
添加异常域
等与服务器团队一起对 IIS 进行故障排除,发现它不安全,即没有 HTTPS 或 SSL
这是我的 plist ATS 配置
附言这个项目是在 2014 年由第三方供应商用 Objective-C 编写的。这个问题是由于 Objective-C 语言引起的吗? (嗯,我不这么认为)
任何修复?
最佳答案
从屏幕截图来看,您可能正在使用 .dev 域。如果是这样,您将无法禁用 ATS,因为 Google 拥有 .dev 域,并且他们已选择要求所有 .dev 域都需要 HTTPS。在 iOS 11 中,Apple 支持 HSTS 预加载,这允许将某些域限制为仅安全连接。 .dev 顶级域 (TLD) 现在是需要 HTTPS 的 TLD 之一。在此处查看更多相关信息:https://stackoverflow.com/a/47698675/3708242
您的屏幕截图包含以 .dev 结尾的 ATS 异常,但您的评论指定了不同的域。我假设您的 Info.plist 中可能有多个异常,并且您使用 .dev 对本地服务器进行内部测试。如果是这种情况,只需将内部测试的域更改为 *.dev
以外的域。此外,并不是说您的屏幕截图中的异常不正确,因为它在异常域中包含 http://。而不是像“http://mylocalserver.local”这样的 InfoPlist 条目,您应该只有“mylocalserver.local”(没有 http://)。
如果您的 abc.pqr.lmn
条目相同(它还包括异常域中的协议(protocol)),请删除“http://”,它应该可以工作。
此外,您的异常(exception)列表有点乱。如果您根本不使用 https,您应该能够删除除 NSExceptionAllowsInsecureLoads
之外的所有条目。如果要允许不支持 ATS 最低要求的 HTTPS 连接,则指定所有其他设置。如果您只是想尝试不安全的 HTTP 流量,请摆脱其他流量。
总结一下:
- 不要使用 .dev 域进行本地测试,因为 Google 现在拥有顶级域并且要求所有新浏览器/操作系统在连接到以 .dev 结尾的任何内容时使用 HTTPS。
- 不要在 Info.plist 的 ATS 异常(exception)域中包含“http://”
- 这与它在 Objective-C 中没有任何关系 - 它与 iOS 11 实现 HSTS 预加载有关。
关于iOS 11 : SSL error occurred and connection to server cannot be made,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49360954/