iOS 11:发生SSL错误,无法连接到服务器。

5
当我尝试连接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配置。

Screenshot

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

有什么解决办法吗?


您的服务器端是否正确链式证书?如果是,请在此处检查您的网站 --> https://www.ssllabs.com/ssltest/ - Nirav Kotecha
@NiravKotecha:服务器未设置为安全模式。没有HTTPS或SSL。它只是http://abc.pqr.lmn。 - Jayprakash Dubey
我不确定这是否是问题,但您是否尝试从配置中删除域名的 https:// 部分? - Mats
域名中没有https,只是简单的http://abc.pqr.lmn。 - Jayprakash Dubey
但是你已经在上面显示的 Info.plist 中指定了协议。域名异常应该只是域名,例如 abc.def.com,而不是 http://abc.def.com - wottle
@wottle:起初我检查了abc.def.com,但它没有起作用,然后我尝试了http://abc.def.com,但也没有起作用。 - Jayprakash Dubey
1个回答

3
根据截图,看起来您可能正在使用.dev域。如果是这样,您将无法禁用ATS,因为Google拥有.dev域,并且他们选择要求所有.dev域都要求HTTPS。在iOS 11中,苹果支持HSTS预加载,允许某些域仅限于安全连接。.dev顶级域(TLD)现在是需要HTTPS的TLD之一。有关更多信息,请单击此处:https://dev59.com/MlYN5IYBdhLWcg3wRmeh#47698675 您的屏幕截图包括一个以.dev结尾的ATS例外,但您的评论指定了不同的域。我假设您的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预加载有关。

1
此外,关于避免使用.dev顶级域名的更多信息,请参阅以下优秀的文章,其中解释了HTST预加载问题:https://medium.engineering/use-a-dev-domain-not-anymore-95219778e6fd - wottle
谢谢你的回答!让我试一下,然后会给你回复。还有,我访问的端点是xxx.xxxengine.local.dev。我在评论中提到了abc.pqr.lmn,请注意。 - Jayprakash Dubey
1
好的,我不确定,但是在你的截图中看到了 .dev。如果你尝试连接任何没有 HTTPS 的 .dev 域名,它肯定会在 iOS 11 中引起问题。此外,你可以通过在 Safari 中尝试访问服务器来确认这是一个问题。Safari 也支持 HTST 预加载列表。 - wottle
没问题。我知道当iOS 11添加.dev HSTS预加载域时,这影响了很多开发者。很高兴你已经解决了这个问题。 - wottle
是的,苹果公司尊重HSTS协议,而谷歌则拥有.dev顶级域名,并将任何.dev域名设置为需要HTTPS。由于您无法从谷歌获取证书来支持.dev域名的TLS协议,因此只需将域名更改为类似.local的其他名称即可。 - wottle
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接