安全网络

NSURLAuthenticationChallenge官方文档

2017-06-21  本文已影响784人  AppleTTT

NSURLAuthenticationChallenge

Overview

NSURLAuthenticationChallenge封装了服务器需要验证客户端的证书。

大多数应用不会创建NSURLAuthenticationChallenge。但是,作为自定义NSURLProtocol子类的一部分,我们可能需要在对自定义网络协议的支持时创建此身份认证对象。

相反,你的应用会在各种NSURLSession,NSURLConnection和NSURLDownload的代理方法中收到身份验证问题,例如URLSession:task:didReceiveChallenge:completionHandler:。这些对象提供了如何处理服务器身份验证请求时需要的信息。身份认证的核心是定义所请求的身份验证类型,主机和端口号,网络协议以及(在适用的情况下)认证领域(同一服务器上的一组相关URL)一套凭证)的保护空间,。

你可以通过提供NSURLCredential对象来做身份验证工作。具体怎么处理取决于你使用的API和认证类型。

高级用法,如果你将用户的凭据提供给服务器或代理,调用proposedCredential将在保护空间中(处理请求的NSURLCredentialStorage如果存在这样的证书)取出符合标准的证书 。

如果previousFailureCount方法返回0并且证书存在,则说明证书还未用过,这意味着您应该尝试使用这个证书。如果它返回非零结果,则服务器拒绝了证书,你应该使用该凭据来填充密码或证书选择器对话框,然后提供新的证书。你可以通过调用credentialWithUser:password:persistence:方法来创建基于密码的证书,或者使用credentialWithIdentity: certificates:persistence:来创建基于证书的凭据.

如果身份验证的保护空间使用NSURLAuthenticationMethodServerTrust身份验证方法,则该请求将要求你验证服务器的真实性。在这种情况下,proposalCredential方法提供基于服务器作为其初始TLS握手的一部分提供的证书的证书。大多数应用程序应根据服务器信任保护空间请求对身份认证的默认处理,但如果需要覆盖默认的TLS验证行为,可以参考Overriding TLS Chain Validation Correctly

Symbols

Creating an authentication challenge instance


Getting authentication challenge properties






参考

Overriding TLS Chain Validation Correctly
Appendix A: Common Server Trust Evaluation Errors
iOS安全系列之一:HTTPS
iOS安全系列之二:HTTPS进阶
iOS 中对 HTTPS 证书链的验证
bang:AFNetworking2.0源码解析<三>

上一篇下一篇

猜你喜欢

热点阅读