AFNetworking 请求HTTPS时 SSL的身份验证设置

之前一直在使用的是http,从i0S9更新之后,苹果要求使用https,目的是为了防止中间人攻击,保证数据的安全性.

http和https 具体不懂的可以百度!

AFN如何验证SSL呢?

第一web端服务器必须要提供一个叫SSL的证书,证书里面包含有一个叫.crt的文件,你需要将它转换成.cer的格式,转换方法如下:

  openssl x509 -in your certificate.crt -out your certificate.cer -outform der


转换成功后需要找到你转换成.cer的文件.添加到你的xcode工程当中去;

我用的是AFN2.x 需要添加AFSecuriPolicy和setAFHTTPRequestOperationManager, 如下


- (AFSecurityPolicy*)SecurityPolicy

{

    NSString *cerPath = [[NSBundlemainBundle] pathForResource:@"your certificate"ofType:@"cer"];

    NSData *certData = [NSDatadataWithContentsOfFile:cerPath];

    AFSecurityPolicy *securityPolicy = [[AFSecurityPolicyalloc] init];

    [securityPolicy setAllowInvalidCertificates:YES];

    [securityPolicy setPinnedCertificates:@[certData]];

    [securityPolicy setSSLPinningMode:AFSSLPinningModePublicKey];

    return securityPolicy;

}    


管理器设置


   AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManagermanager];

    [manager setSecurityPolicy:[selfSecurityPolicy]]; 

   manager.responseSerializer = [AFHTTPResponseSerializerserializer];

    [manager GET:@"your Url" parameters:nilsuccess:^(AFHTTPRequestOperation *operation,id responseObject) {

        NSLog(@"成功了");

    } failure:^(AFHTTPRequestOperation *operation,NSError *error) {

        NSLog(@"Error: %@", error);

    }];

    

}

 这样就可以了,你run一下 会打印出来的信息如下:



这说明请求还是失败的,那具体改如何解决呢? 需要你将下面的代码添加上就OK了!

securityPolicy.allowInvalidCertificates =NO;

    securityPolicy.validatesDomainName =YES;

    securityPolicy.validatesCertificateChain =NO;


allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO;

如果是需要验证自建证书,需要设置为YES

validatesDomainName 是否需要验证域名,默认为YES

假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。

置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立

validatesCertificateChain 是否验证整个证书链,默认为YES, 设置为YES,会将服务器返回的Trust Object上的证书链与本地导入的证书进行对比,达到验证的效果,(对于这具体不明白的可以百度)!


好了 现在你run一下就没问题了, 一切就OK 了!

如有说的不对的地方请指出(见谅)!







  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值