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

时间:2013-02-23 11:21:48

标签: ios nsurlconnection nsurlconnectiondelegate

我有这个设置:

  1. 配置为使用ssl客户端证书身份验证(clientAuth = true)
  2. 的tomcat服务器
  3. 安装了有效客户端证书的ipad(通过电子邮件发送为.p12文件并在个人资料下可见)
  4. 通过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一样,并且可以访问已安装的证书,但似乎没有。我不想以某种方式将证书安装到我的应用程序中 - 这就是内置证书管理的用途!

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

1 个答案:

答案 0 :(得分:0)

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