iOS开发 AFN配置https请求

本文详细介绍如何在iOS项目中配置AFNetworking进行HTTPS交互,并实现SSL证书验证,包括证书的安装与转换步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.项目中的网络交互都是基于AFN,要求AFN版本在 3.0及其以上; 
  
二.代码部分  
设置AFN请求管理者的时候 添加 https ssl 验证。  
// 1.获得请求管理者  

 
  1. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
  2. // 2.加上这个函数,https ssl 验证。
  3. [manager setSecurityPolicy:[self customSecurityPolicy]];


// https ssl 验证函数  
  

   
  1. - (AFSecurityPolicy *)customSecurityPolicy {
  2. // 先导入证书 证书由服务端生成,具体由服务端人员操作
  3. NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//证书的路径
  4. NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
  5. // AFSSLPinningModeCertificate 使用证书验证模式
  6. AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
  7. // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
  8. // 如果是需要验证自建证书,需要设置为YES
  9. securityPolicy.allowInvalidCertificates = YES;
  10. //validatesDomainName 是否需要验证域名,默认为YES;
  11. //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
  12. //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。
  13. //如置为NO,建议自己添加对应域名的校验逻辑。
  14. securityPolicy.validatesDomainName = NO;
  15. securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil nil];
  16. return securityPolicy;
  17. }
  
三.关于证书 参考文章:http: //www.2cto.com/Article/201510/444706.html  
服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换:  
1.证书转换  
在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句  
  
openssl x 509 -in 你的证书.crt -out 你的证书.cer -outform der  
  
这样你就可以得到cer类型的证书了。双击,导入电脑。  
2.证书放入工程  
1、可以直接把转换好的cer文件拖动到工程中。  
2、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出 .cer文件的证书了  
  
参考链接:http: //www.jianshu.com/p/97745be81d64。  
   
四.在info .plist去掉之前允许http加载的代码 就是删除下面的代码(么有的就省了这一步)  
 
<key>NSAppTransportSecurity</key>  
    <dict>  
 <key>NSAllowsArbitraryLoads</key>  
 <true/>  
    </dict>  




  

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值