请选择 进入手机版 | 继续访问电脑版
可能看完上一篇,又有些小伙伴迷糊了,讲了这么多,那如果做https请求,真正需要我们自己做的到底是什么呢?这里来解答一下,分为以下两种情况:
  • 如果你用的是付费的公信机构颁发的证书,标准的https,那么无论你用的是AF还是NSUrlSession,什么都不用做,代理方法也不用实现。你的网络请求就能正常完成。
  • 如果你用的是自签名的证书:

    • 首先你需要在plist文件中,设置可以返回不安全的请求(关闭该域名的ATS)。
    • 其次,如果是NSUrlSesion,那么需要在代理方法实现如下:

[Objective-C] 纯文本查看 复制代码
- (void)URLSession:(NSURLSession *)session
didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler
{
     __block NSURLCredential *credential = nil;

    credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]; 
   // 确定挑战的方式
    if (credential) { 
        //证书挑战 则跑到这里
        disposition = NSURLSessionAuthChallengeUseCredential; 
    }
   //完成挑战
    if (completionHandler) {
        completionHandler(disposition, credential);
    }
}

其实上述就是AF的相对于自签证书的实现的简化版。
如果是AF,你则需要设置policy:
[Objective-C] 纯文本查看 复制代码
//允许自签名证书,必须的
policy.allowInvalidCertificates = YES;
//是否验证域名的CN字段
//不是必须的,但是如果写YES,则必须导入证书。
policy.validatesDomainName = NO;

当然还可以根据需求,你可以去验证证书或者公钥,前提是,你把自签的服务端证书,或者自签的CA根证书导入到项目中:
证书.jpeg
并且如下设置证书:
[Objective-C] 纯文本查看 复制代码
NSString *certFilePath = [[NSBundle mainBundle] pathForResource:@"AFUse_server.cer" ofType:nil];
NSData *certData = [NSData dataWithContentsOfFile:certFilePath];
NSSet *certSet = [NSSet setWithObjects:certData,certData, nil];    
policy.pinnedCertificates = certSet;
这样你就可以使用AF的不同AFSSLPinningMode去验证了。
最后总结一下,AF之于https到底做了什么:
  • AF可以让你在系统验证证书之前,就去自主验证。然后如果自己验证不正确,直接取消网络请求。否则验证通过则继续进行系统验证。
  • 讲到这,顺便提一下,系统验证的流程:

    • 系统的验证,首先是去系统的根证书找,看是否有能匹配服务端的证书,如果匹配,则验证成功,返回https的安全数据。
    • 如果不匹配则去判断ATS是否关闭,如果关闭,则返回https不安全连接的数据。如果开启ATS,则拒绝这个请求,请求失败。

总之一句话:AF的验证方式不是必须的,但是对有特殊验证需求的用户确是必要的。
写在结尾:
  • 看完之后,有些小伙伴可能还是会比较迷惑,建议还是不清楚的小伙伴,可以自己生成一个自签名的证书或者用百度地址等做请求,然后设置AFSecurityPolicy不同参数,打断点,一步步的看AF是如何去调用函数作证书验证的。相信这样能加深你的理解。
  • 最后关于自签名证书的问题,等2017年1月1日,也没多久了...一个月不到。除非有特殊原因说明,否则已经无法审核通过了。详细的可以看看这篇文章:iOS 10 适配 ATS(app支持https通过App Store审核)
  • 最后的最后,希望大家能点个赞,关注一下~(楼主看到赞和关注会很开心...) 有什么不同意见或者建议可以评论或者简信我~万一有人转载,麻烦注明出处,谢谢~~
苹果官网最新消息:原定于2017.1.1强制的https被延期了,具体延期到什么时候不确定,得等官方通知:
苹果官方新闻.jpeg
文 /涂耀辉(简书作者)
原文链接:http://www.jianshu.com/p/a84237b07611#


举报 使用道具
| 回复

共 0 个关于本帖的回复 最后回复于 2017-1-19 08:25

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本文内容不够精彩,我要自己发布

发布新帖

推荐阅读

    拥有的,不仅是技术!还有...
    联系 Email: support.36ji@qq.com

    • 关注酷站官方微博
      了解最新动态

    • 关注酷站微信公众号
      这里有好玩的讯息

    • 加入酷站交流群
      不断在这里成长

    © 2014-2017 36ji网络科技有限公司 . All rights reserved.
    京ICP备14001609号

    Archiver|    
    Powered by Discuz! X3.2 © 2001-2013 Comsenz Inc.
    快速回复 返回顶部 返回列表