【发布时间】:2020-05-24 16:38:39
【问题描述】:
在我们的内部网络中,我们使用自签名 CA 证书。多年来,这在 Safari 和我们的 iOS 产品中一直运行良好,一直到 iOS 10。我们只需在任何新设备或模拟器上安装 CA 证书,一切正常,即使使用 ATS。这允许访问我们所有的内部测试服务器,而无需单独信任每个服务器。
从 iOS 11 开始,安装的 CA 证书不再允许 Safari 或我们的应用信任任何服务器的证书。我们收到以下相关详细信息,并为我们的应用启用了CFNETWORK_DIAGNOSTICS:
错误域=kCFErrorDomainCFNetwork 代码=-1200
_kCFNetworkCFStreamSSLErrorOriginalValue=-9802
_kCFStreamErrorDomainKey=3
_kCFStreamErrorCodeKey=-9802
NSLocalizedDescription=发生 SSL 错误,无法与服务器建立安全连接。
NSLocalizedRecoverySuggestion=您还是要连接到服务器吗?
我花了很多时间试图解决这个问题,搜索 StackOverflow 和网络的其余部分。尽管我们在我们的应用程序中使用了 AFNetworking,但这似乎无关紧要,因为 Safari 不再通过 CA 信任这些服务器。通过NSAllowsArbitraryLoads 禁用 ATS 允许访问服务器,但显然不是解决方案。
没有对我们的-URLSession:didReceiveChallenge:completionHandler 代码进行任何更改,并且我们通过challenge.protectionSpace.serverTrust 正确(工作了多年)实施挑战响应。
我已经以我能想到的各种方式重新评估和测试了 CA 和服务器证书,它们在除 iOS 11 之外的任何地方都可以使用。iOS 11 的 ATS 中可能发生的哪些更改可能会导致此问题?
【问题讨论】:
-
我们的 QA 团队报告说,任何更新到 iOS 11 的 Apple 设备都无法再使用 Safari 或 Chrome 访问任何内部 https 站点。接受自签名证书的正常方式已经工作了多年并且继续与未升级的设备一起工作不再有效。看起来很多人都有同样的问题twitter.com/jfsiman/status/910269395959795712
-
这也开始在 macOS Mojave 上发生,我找不到解决方法。
标签: ios