美文网首页
AFN - AFSecurityPolicy

AFN - AFSecurityPolicy

作者: lxl125z | 来源:发表于2017-06-28 11:47 被阅读0次

    AFNetWorking源码之AFSecurityPolicy

    三种验证模式

    • AFSSLPinningModeNone: 这个模式表示不做SSL pinning(证书绑定,自签名证书验证),只跟浏览器一样在系统的信任机构列表里验证服务端返回的证书。若证书是信任机构签发的就会通过,若是自己服务器生成的证书,这里是不会通过的。
    • AFSSLPinningModeCertificate: 这个模式表示用证书绑定方式验证证书,需要客户端保存有服务端的证书拷贝,这里验证分两步,第一步验证证书的域名/有效期等信息,第二步是对比服务端返回的证书跟客户端返回的是否一致。这里还没弄明白第一步的验证是怎么进行的,代码上跟去系统信任机构列表里验证一样调用了SecTrustEvaluate,只是这里的列表换成了客户端保存的那些证书列表。
    • AFSSLPinningModePublicKey: 这个模式同样是用证书绑定方式验证,客户端要有服务端的证书拷贝,只是验证时只验证证书里的公钥,不验证证书的有效期等信息。只要公钥是正确的,就能保证通信不会被窃听,因为中间人没有私钥,无法解开通过公钥加密的数据。

    iOS的HTTPS请求

    1、自签名证书绑定

    12306证书为自签名证书

    /**
     12306的认证证书,他的认证证书是自签名的
    
     @return 返回指定的认证策略
     */
    -(AFSecurityPolicy*)ticketSecurityPolicy {
        // /先导入证书
        NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"12306" ofType:@"cer"];//证书的路径
        NSData *certData = [NSData dataWithContentsOfFile:cerPath];
        NSSet *set = [NSSet setWithObject:certData];
        
        AFSecurityPolicy *securityPolicy;
        if (true) {
            securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate withPinnedCertificates:set];
        }else{
            // AFSSLPinningModeCertificate 使用证书验证模式。下面这个方法会默认使用项目里面的所有证书
            securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
        }
        // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
        // 如果是需要验证自建证书,需要设置为YES
        securityPolicy.allowInvalidCertificates = YES;
        
        //validatesDomainName 是否需要验证域名,默认为YES;
        //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
        //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
        //如置为NO,建议自己添加对应域名的校验逻辑。
        securityPolicy.validatesDomainName = NO;
        
        return securityPolicy;
    }
    
    

    2 SSL证书AFN默认处理

    通过AFURLSessionManager的securityPolicy默认实现。它会和存在系统中的做对比来验证证书。

    相关文章

      网友评论

          本文标题:AFN - AFSecurityPolicy

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