iOS 11和12安装的证书不受信任(自签名)

Mat*_*ttP 35 ios

在我们的内部网络上,我们使用自签名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信任这些服务器.禁用ATS NSAllowsArbitraryLoads允许访问服务器,但显然不是解决方案.

我们的-URLSession:didReceiveChallenge:completionHandler代码没有任何变化,我们有一个适当的(多年工作)实施挑战响应challenge.protectionSpace.serverTrust.

我已经按照我能想到的方式对CA和服务器证书进行了重新评估和测试,除了iOS 11之外,它们可以在任何地方工作.在iOS 11的ATS中可能会发生哪些变化可能导致此问题?

Mat*_*ttP 39

在写这个问题时,我发现了答案.从Safari安装CA不再自动信任它.我必须从"证书信任设置"面板(此问题中也提到)手动信任它.

在此输入图像描述

我辩论取消了这个问题,但我认为有些人可能正在寻找的相关代码和日志详情可能会有所帮助.此外,我在iOS 11之前从未遇到过这个问题.我甚至回过头来再次确认它会自动通过iOS 10运行.

我以前从未需要触摸该设置面板,因为任何已安装的证书都是自动受信任的.也许它会在iOS 11发布时发生变化,但我对此表示怀疑.希望这有助于节省浪费时间的人.

如果有人知道为什么这对不同版本的iOS上的某些人有不同的表现,我很乐意在评论中知道.

更新:检查第一个iOS 12测试版,看起来事情保持不变.这个问题/答案/评论仍然适用于iOS 12.

  • 嗨那里 - 不幸的是我的证书没有出现在证书信任设置中 - 你有什么建议吗? (9认同)
  • 很好的发现 - 注意到自iOS 10.3以来就是这种情况.以下是Apple提供的相关支持条目:https://support.apple.com/en-au/HT204477 (3认同)

Mic*_*hon 7

推荐的解决方案是安装并信任自签名证书(根)。假设您创建了自己的CA,并且证书的层次结构正确,则无需更改服务器信任评估。建议这样做,因为它不需要对代码进行任何更改。

  1. 生成CA和证书(可以使用openssl:生成CA和自签名证书
  2. 在设备上安装根证书(* .cer文件)-您可以通过Safari打开它,它应该将您重定向到“设置”
  3. 安装认证后,请像MattP答案中一样转到“证书信任设置”(“设置”>“常规”>“关于”>“证书信任设置”)。

如果不可能,则需要更改服务器信任评估。

本文档中的更多信息:技术问答QA1948 HTTPS和测试服务器


Jua*_*gel 6

在尝试连接到运行 Laravel 代客的本地 API 时,我已经为此苦苦挣扎了 3 天。我终于弄明白了。在我的情况下,我不得不拖放 LaravelValetCASelfSigned.pem 文件从~/.config/valet/CA/LaravelValetCASelfSigned.pem

在模拟器中验证安装后,我必须转到设置 > 关于 > 证书信任设置 > 并启用 Laravel Valet VA 自签名 CN

终于上班了!!!

  • 正是我一直在寻找的东西!在我偶然发现你的回复之前,我在谷歌上并没有取得任何进展。我已经发布了一个博客(希望如此)一个经过良好优化的标题,以帮助其他人寻找相同的东西:) https://medium.com/@joevallender/trust-laravel-valet-self-signed-certificate- for-ios-development-869e63e096f1 (2认同)

Dav*_*ton 5

我也遇到过这种情况,在我的 iPhone 上取消了 IOS11 的约会后。当我尝试连接到公司网络时,它会显示公司证书并表示它不受信任。我按下“信任”按钮,连接失败,并且证书没有出现在受信任的证书列表中。