iOS 11 个私人 CA 的模拟器问题

iOS 11 simulator problems with private CA

我是 运行 一个 Tomcat 服务器,用于开发和测试本机 iOS 应用程序。服务器正在提供由私有 CA 签名的证书。这是 Apple 对测试服务器的建议,而不是使用自签名证书。我已经在 sslshopper.com 测试了证书,它显示证书有一个 CA 链。根CA证书已安装在模拟器上。

最初,在没有任何 ATS 异常的情况下,我的应用程序为我提供了以下信息:

错误是常见的:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

此错误通常是应用遇到自签名证书时导致的。正如我上面所说,证书不是自签名的。

将异常域添加到应用程序的 plist 后,我​​得到:

对于 CN 无效的证书,通常会出现这种情况。我已经验证了证书中的CN是正确的。

错误是:

NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9813)

我在 Apple 文档中找不到错误,最后不得不求助于在头文件中查找它。具体如下:

errSSLNoRootCert            = -9813,    /* cert chain not verified by root */

由于链存在并且根证书安装在模拟器上,我不确定这个错误是什么意思。我在安装根证书时确实注意到,在证书信任设置中启用它之前,它是不可用的,但模拟器中该窗格上唯一的实时内容是 link Apple 开发者网站。我在 Safari 中访问了我的测试站点,并在确认证书异常后能够访问它。根证书配置文件表明它已通过验证(绿色复选标记)。

感谢任何帮助。

如果您使用内部CAcertificate/Private证书,您需要在内网浏览link。任何从外部网络浏览的人都应该在 his/her 浏览器

上安装根证书和中间证书

另外,不同的浏览器和操作系统有不同的程序。例如,Chrome 采用操作系统的信任库(EV 证书除外),如在 Chromium 的 Root CA Policy 上所见。

这最终成为 iOS 证书管理器中的错误。根证书没有 CN,这是可选的。根中的 CN 不用于验证功能的任何部分。缺少 CN 使证书管理器感到困惑,并且它没有在证书管理面板中显示它。 Apple Developer SME 之一已提交错误报告。