我正在运行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 */
由于存在链并且模拟器上安装了根证书,因此我不确定此错误的含义。我确实注意到在安装根证书时它在证书信任设置中启用之前无法使用,但模拟器中该窗格上唯一的实时内容是指向Apple开发人员站点的链接。我在Safari中访问了我的测试站点,并在确认证书异常后能够访问它。根证书配置文件表明它已经过验证(绿色复选标记)。
感谢任何帮助。
答案 0 :(得分:1)
这最终成为iOS证书管理器中的错误。根证书没有CN,这是可选的。根中的CN不用于验证功能的任何部分。缺少CN使证书管理员感到困惑,并且它没有在证书管理面板中显示它。其中一位Apple Developer SME提交了一份错误报告。
答案 1 :(得分:0)
如果您使用的是内部CA证书/私人证书,则需要浏览内部网络中的链接。任何从外部网络浏览的人都应该在他/她的浏览器上安装root和中间证书
此外,不同的浏览器和操作系统有不同的程序。例如,Chrome获取操作系统的信任存储(EV证书除外),如Root CA Policy铬所示。