NSURLConnection可以使用设备上的配置文件中安装的客户端证书吗?

问题描述:

我有这样的设置:NSURLConnection可以使用设备上的配置文件中安装的客户端证书吗?

  1. 配置为使用SSL客户端证书身份验证(clientAuth =真)Tomcat服务器
  2. 一个安装了有效的客户端证书(作为电子邮件.p12文件,并可见一台iPad在配置文件下)

当通过ios safari浏览时,ipad使用客户端证书并对服务器进行身份验证。

但是,在代码中,使用NSURLConnection,它不会连接。在服务器上调试显示客户端并未发送和验证。

在客户端上我得到这样的错误:

Request(https://192.168.1.5:8443/device/security/policy>, 0, 0)) didFailWithError:Error Domain=NSURLErrorDomain Code=-1205 "The server “192.168.1.5” did not accept the certificate." UserInfo=0xe2eae30 
{NSErrorFailingURLStringKey=https://192.168.1.5:8443/device/security/policy>, NSErrorFailingURLKey=https://192.168.1.5:8443/device/security/policy>, NSLocalizedDescription=The server “192.168.1.5” did not accept the certificate., 
NSUnderlyingError=0xe2eb250 "The server “192.168.1.5” did not accept the certificate.", NSURLErrorFailingURLPeerTrustErrorKey=<SecTrustRef: 0xe6ab010>} 

我明白我能落实为NSURLAuthenticationMethodClientCertificate保护空间挑战的委托方法,但如果我这样做,我没有证书送,它安装在设备上,不能通过代码访问(是吗??) 我试着调用[challenge.sender performDefaultHandlingForAuthenticationChallenge:challenge],但是这似乎没有效果。

我曾期待NSURLConnection会按照Safari浏览器行事并访问已安装的证书,但似乎没有。我不想要以某种方式将证书安装到我的应用程序 - 那是什么内置的证书管理!

或者我错过了什么?任何帮助赞赏。

+0

看看这个http://vanjakom.wordpress.com/2011/10/23/https-client-for-ios/ – 2013-02-23 11:27:15

+0

好帖子,但我想要做的是不得不加载手动从应用程序包中取出证书。相反,我想使用在操作系统级别设备上安装的证书 – 2013-02-24 21:08:23

+0

您是否找到解决此问题的解决方案?我目前正在调查这个完全相同的情况。 – Yanik 2013-07-09 10:43:21

基本上,您无法从iOS中的应用程序(从iOS 8开始)获取全局安装的证书,操作系统无法通过向NSURLConnection发送它们来帮助您。 Safari有权访问证书。因此,从应用程序内部使用它们的唯一方法是以某种方式将它们安装到应用程序中,这使得整个事情变得困难。