【问题标题】:How to install root CA certificate from app on iOS and prompt user to trust?如何在 iOS 上从应用程序安装根 CA 证书并提示用户信任?
【发布时间】:2017-09-13 13:07:27
【问题描述】:

我正在使用 NEVPNManager 为正在运行的 iOS 应用程序创建个人 VPN。现在我正在尝试安装一个可供所有应用程序使用的根 CA 证书。我了解用户需要在常规 -> 关于 - 证书信任设置下信任此证书。我正在尝试尽可能多地自动化这个过程。我发现尝试这样做的两种方法是:

1) 使用网站上托管的根证书的 URL 打开 Safari,iOS 将提示用户将证书安装为配置文件。

2) 在应用程序中实用地安装证书。

选项 #1 有效,但在用户安装证书后,他们不会带回应用程序,仍然需要手动进入并信任证书信任设置中的证书。

如果使用 SecItemAdd 选项 #2,它只会添加到我的应用程序沙箱的钥匙串中,而对其他应用程序不可用。我见过的唯一选择是让其他应用程序可以使用它来提高它的信任级别 as shown here,但这似乎需要来自 Apple 的 old open source library,而我无法构建。

那么,完成安装根证书并提示用户使其受信任的最佳选择是什么?如果可以通过#2,我如何构建然后将该库合并到我的应用程序中的任何想法?如果我只剩下 #1,那么为用户简化流程的最佳方法是什么?

【问题讨论】:

    标签: ios objective-c certificate


    【解决方案1】:

    SecTrustSettingsSetTrustSettings 和相关符号是私有 API,您的应用在提交时将被 Apple 拒绝。即使您设法编译了这个开源代码,它仍然会导出私有符号,并且您的应用将被拒绝。

    相反,您应该使用openURL: API 并指向一个 .p12 文件,可以是本地托管(通过使用应用内 Web 服务器)或远程托管。 .p12 文件应包含证书链。

    这将打开“设置”应用并要求用户安装证书。用户安装后,设备上的所有应用程序都会信任它。

    【讨论】:

    • 太好了,谢谢 Leo。这就是我决定的方向,只是想验证没有办法以编程方式进行。
    • 干杯。我不确定为什么 Apple 不公开完整的 API。在 UI 中肯定有它的功能。我猜他们认为沙箱很危险,但上述方法的最终结果是一样的。
    • 确保打开 Apple 的增强报告。
    • @Roee84 您不能直接通过设置应用程序进行操作。您需要将 .cer 文件托管在某处的服务器上,然后对托管 .cer 文件的 url 执行 openURL。这将打开 Safari,然后将打开设置应用程序以在设备上安装 cer 证书作为新配置文件。
    • @Roee84 在这种情况下,您需要一个应用内 Web 服务器。许多应用程序都这样做了。
    猜你喜欢
    • 2015-07-26
    • 2016-02-26
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2023-03-05
    • 2015-12-06
    相关资源
    最近更新 更多