我正在响应protectSpace.authenticationMethod ==“NSURLAuthenticationMethodServerTrust”的挑战。
我正在创建信任凭证并将其添加到NSURLCredentialStorage。
但每次我重新启动应用程序(在模拟器中运行)时,我都会再次接受挑战。在任何一个会话期间,它只询问一次因为我将forTrust凭证添加到存储。另外,我可以在NSURLCredential存储中看到那个protectSpace。但是,当我重新启动应用程序时,它已经消失了,我必须再次信任服务器。
服务器正在使用自签名证书,我可通过HTTPS访问
请帮忙!
提前致谢。
答案 0 :(得分:1)
Technical Note TN2232: HTTPS Server Trust Evaluation列出了在iOS应用程序中使用自签名证书的建议最佳做法。建议的方法是实现TLS信任评估,如SSL固定:信任特定证书或公钥。 2014年WWDC会议Building Apps for Enterprise and Education证明了实现这一点。遗憾的是,SSL固定代码尚未作为示例代码发布,幻灯片中也没有 - 只有视频。评估服务器信任的过程在会话中得到了很好的解释。
这不能解决您持久评估服务器信任的问题。身份验证质询提供的服务器信任表示SSL事务的状态,因此无法以有意义的方式持久保存。这就是NSURLCredential
使用SecTrustRef的构造函数没有NSURLCredentialPersistence
参数的原因:服务器信任必须是每个会话或事务。
也就是说,URL加载系统允许默认处理SSL / TLS服务器信任评估。通常,对于HTTPS连接,您不需要为NSURLAuthenticationMethodServerTrust
实现身份验证质询处理程序。如果默认信任评估失败,您的连接将因某些熟悉的错误而失败 - 这是使用自签名证书时发生的情况,因为证书不受信任。可以将受信任的自签名证书添加到应用程序的信任锚中(就像在SSL信任评估中所做的那样),默认处理将从那时起“正常工作”。不幸的是,我目前没有可以测试它的测试环境。