3

我有一个需要安装证书的应用程序,它使用

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:CERTIFICATE_URL]];

这会访问 Web 服务器,获取证书并启动允许用户安装证书的设置应用程序。

完成后,点击完成按钮,设置应用程序会将您带回 Safari,但在空白页面(或您上次访问的页面)。

显然,我想使用我设置的 url 方案返回应用程序。

有没有人有这方面的经验并可以提供任何指示?

我正在考虑有一个登录页面,该应用程序也会带你去告诉你安装证书(单击一个按钮),然后当它安装时,我假设它会将你返回到这个登录页面,之后我可以进行自动重定向如果我可以确定证书已成功安装,请返回应用程序.....??

4

1 回答 1

0

不久前,我使用了我的一个 Apple 技术支持问题。这是对话:

大卫

我正在回答您关于 iOS 上受信任的根证书的问题。你写了:

所以问题是:是否可以查询设置应用程序/或已安装的配置文件以确定是否安装了特定证书。

您可以通过使用信任对象 (SecTrustRef) 来评估特定证书是否受系统信任来执行此操作。我最近发表了一篇技术说明,深入讨论了这个整体问题。在阅读我的其余回复之前,您应该阅读此内容。

TN2232《HTTPS 服务器信任评估》

http://developer.apple.com/library/ios/#technotes/tn2232/_index.html

该技术说明没有涵盖您的具体情况,但它相对容易适应它描述的技术来解决您的问题。基本策略是:

  1. 查找由证书颁发机构颁发的证书——您可以从网站本身获取此证书(使用电影的 HEAD 请求),或者您可以将其嵌入到您的应用程序中。

  2. 如果您有证书数据,请从中创建一个证书对象 (SecCertificateRef) -- 您使用 SecCertificateCreateWithData 来执行此操作。

  3. 从中创建一个信任对象——您使用 SecTrustCreateWithCertificates 来执行此操作。您必须提供一个策略对象 (SecPolicyRef),但创建其中一个很容易:只需调用 SecPolicyCreateBasicX509。

  4. 评估信任对象——您使用 SecTrustEvaluate 执行此操作。如果它返回 kSecTrustResultProceed 或 kSecTrustResultUnspecified,则系统信任颁发您在步骤 1 中开始的证书的证书颁发机构的根证书;如果它返回任何其他内容,则通过 HTTPS 播放电影很可能会失败。

此外,我们是否甚至必须离开应用程序才能安装证书?

是的,尽管您可以通过更改电影播放的方式来完全避免这个问题。我将在下面更详细地讨论这一点。

证书可以以某种方式安装在钥匙串中[...]

是的,但这不会导致系统(甚至您的应用程序)信任由该根证书颁发的证书。在某些情况下,向钥匙串添加证书很有用(例如,如果它是数字身份的一部分,或者是中间证书),但它对 HTTPS 服务器信任评估没有帮助。

              *                   *                   *

以上所有假设您正在通过渐进式下载播放电影。如果您的电影使用 HTTP Live Streaming(这是我们通常推荐的),则有 /much/ 更好的方法来解决此问题。TN2232 的“HTTP Live Streaming”部分介绍了这个想法,并有更详细的信息参考。

这种方法提供了许多非常重要的优点:

o 它避免了安装自定义根证书的需要。

o HTTP Live Streaming 通常会产生更好的播放效果,因为系统会自动适应可用带宽的变化。

o 如果您提供低带宽流 App Review 将允许您通过 WWAN 播放电影。

o 您的媒体片段已加密,因此您可以将它们移动到 HTTP 服务器(而不是 HTTPS 服务器)。这可以显着减少内容分发网络的负载。

我强烈建议您调查此选项。

如果您对此主题有任何其他问题,请告诉我。

奎因“爱斯基摩人!”

于 2013-10-14T19:00:09.650 回答