访问安装配置文件/从应用程序内的证书

问题描述:

我将与我们的应用程序的一些背景信息开始。由于该系统应该非常安全,公司选择使用客户端证书来访问服务器。每个用户将根据他们是否使用应用程序或Web界面获取证书,他们将自行下载并安装它们。访问安装配置文件/从应用程序内的证书

该应用程序中的系统是这样的;用户会尝试连接到Web服务。初始基础“内部”网址会因为无法访问而失败,所以基本网址将更改为需要证书的网址。当用户没有安装证书时,就有一个过程可以让用户根据他们收到的QR码下载他的证书。然后证书将被安装在应用程序中,用户可以自由访问Web服务并使用该应用程序。

该系统工程,但它需要很多操作。

我们本:

我们希望使事情对用户和使用应用程序的公司更容易希望有更多的控制。基本上,正在制定一个允许公司创建自己的证书的系统,他们希望使用一些管理工具来分发它。没有太多细节,情况将是所需的证书将被安装到iOS本身,而不是在应用程序内。

这就是问题发生的地方,我似乎无法从应用程序中访问安装的证书,并且不断收到401错误。

我已经做了一些研究,开始它关闭,我的第一反应就是“这是行不通的”如本页面官方开发者页面上说:

In iOS, an app can access only its own items in the keychain—the user is never asked for permission or for a password.

但因为我们希望是100%肯定,我一直在继续寻找了一段时间,最终跑进类似的代码示例:

- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge; 
{ 
    SecTrustRef trust = challenge.protectionSpace.serverTrust; 
    NSURLCredential *credential = [NSURLCredential credentialForTrust:trust]; 
    [challenge.sender useCredential:credential forAuthenticationChallenge:challenge]; 
} 

但是,这似乎并没有得到任何安装的证书或任何东西。

以下布尔也被设置:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace; 
{ 
    return YES; 
} 

- (BOOL)connectionShouldUseCredentialStorage:(NSURLConnection *)connection; 
{ 
    return YES; 
} 

做一些进一步检查应用程序本身之外,我已经看过了iPad上我们这里。它具有为网站安装的证书(与应用程序不同的权限),在Safari上我可以访问受证书保护的网站。但是,在Chrome和Firefox上,我会错误地发现网站需要证书。因此,这使我相信,除非您基本上是Apple应用程序,否则访问这些证书确实是不可能的。

所以基本上,我在这个问题上的智慧结束。此问题的简短版本: 我可以从我的应用程序访问iPhone上安装的客户端证书以访问需要此证书的Web服务吗?

如果是的话,长版本: 如何?

+0

当你说安装的证书时,你是什么意思?您的MDM配置文件是什么样子的? – dgatwood

+0

没关系。我很确定客户端证书只能在Mobile Safari中使用。 – dgatwood

如果我是你,我会使用托管应用程序配置将一组自定义首选项推送到应用程序,并使用它提供可下载客户端证书的URL。第一次请求后,在服务器上删除它。

+0

至少暂时下载已经完成。这与您的建议有些类似,除了用户将使用QR码重定向到服务器。之后,证书将被存档。这主要是这样做的,因为派发QR码的实例想要控制这个。 这确实仍然是一种选择,并且会需要更少的用户本身,但这仍然意味着您依赖应用程序中的证书。 但看起来这是用户/公司必须忍受的限制。 – Kevin

+0

是的。不幸的是,添加全球共享钥匙串项目并不是Apple重新设计iOS的钥匙串时所预想的用例。除非Apple明确添加了通过配置文件或通过MDM将项目添加到特定应用程序钥匙串的机制,否则您几乎停滞不前。我会建议提交一个增强请求雷达要求这样的功能。 – dgatwood

+0

好的,谢谢你的洞察力。我将把这个答案作为接受的答案,因为它基本上回答了iOS钥匙串是否可用于应用程序的问题,并给出了另一种下载证书的方法:) – Kevin