美文网首页ios iOS 知识点iOS开发技术
使用AFNetworking来支持HTTPS遇到的坑

使用AFNetworking来支持HTTPS遇到的坑

作者: 贾小敏1234 | 来源:发表于2018-04-09 13:39 被阅读416次

    去年公司开始做https适配,在网上找的afn支持https的代码,直接复制进代码挺好用的,但是今年证书要过期了,正好我们的APP又遇到了2.1大礼包事件,迟迟不给我们上线,而且我们发现要想使用新证书我们必须修改我们本地的代码,各种坑啊。不说了,直接上原来的代码

    -(AFSecurityPolicy*)customSecurityPolicy {

        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"server" ofType:@"cer"];

        NSData *cerData = [NSData dataWithContentsOfFile:cerPath];

        AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

        securityPolicy.allowInvalidCertificates = YES;

        securityPolicy.validatesDomainName=NO;

        securityPolicy.pinnedCertificates= [NSSetsetWithArray:@[cerData]];

        returnsecurityPolicy;

    }

    就这么几行代码就可以实现使用AFNetworking来支持HTTPS,但是潜在的问题也很严重。

    注意就是这行个代码坑坏我们了AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];

    AFSecurityPolicy相关的配置

    1> SSLPinningMode

    SSLPinningMode 定义了https连接时,如何去校验服务器端给予的证书。

    typedefNS_ENUM(NSUInteger, AFSSLPinningMode) {    AFSSLPinningModeNone,    AFSSLPinningModePublicKey,    AFSSLPinningModeCertificate,};

    AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。

    AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。

    AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。

    如果选了AFSSLPinningModeCertificate,那么服务器的证书过期了,导入你本地的证书也不能用了,当时只复制了人家的代码,没有好好看一下每行代码是干什么用的,这是很不好的习惯啊!!!!!

    所以说如果你的APP对安全性的要求特别高,可以用AFSSLPinningModeCertificate,但是记得及时看看证书有没有过期,提前更新APP替换了证书就OK,就怕遇到苹果延迟审核的情况,到时候就麻烦了。我还是建议使用AFSSLPinningModePublicKey,这个只验证公钥部分就可以了,你导入本地的证书过期了也没关系,服务器的证书的公钥是不会变的。

    相关文章

      网友评论

      • 阳光的味道_丁达尔:你好 能加下 扣扣吗? 我将证书加入本地之后 切换域名 (正式服务器的是域名 测试服务器是ip 地址 )我切换成测试地址之后 但是还是能请求到数据 大佬能帮解答下吗
      • MasterY:大神,如果不更新应用,过期了有没有办法让网络继续访问。
        MasterY:@贾小敏1234 好的,谢谢。已经更新了
        贾小敏1234:如果你们的SSLPinningMode选择的是AFSSLPinningModeCertificate,那就没办法了,只能更新应用了
      • 大河_大河:“我还是建议使用AFSSLPinningModePublicKey,这个只验证公钥部分就可以了,你导入本地的证书过期了也没关系,服务器的证书的公钥是不会变的。”

        证书过期后续费,公钥会改变吧?
        贾小敏1234:不会变
      • 小巧书童:mark 一下
      • 628b616cfdd0:哇,大声太及时了,刚好遇到了这个问题

      本文标题:使用AFNetworking来支持HTTPS遇到的坑

      本文链接:https://www.haomeiwen.com/subject/gsqihftx.html