iOS AFNetworking 使用Https访问服务器


  1. 一.项目中的网络交互都是基于AFN,要求AFN版本在3.0及其以上;  
  2.   
  3. 二.代码部分  
  4. 设置AFN请求管理者的时候 添加 https ssl 验证。  
  5. // 1.获得请求管理者  
  6. AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];  
  7. // 2.加上这个函数,https ssl 验证。  
  8. [manager setSecurityPolicy:[self customSecurityPolicy]];  
  9.   
  10. // https ssl 验证函数  
  11.   
  12. - (AFSecurityPolicy *)customSecurityPolicy {  
  13.       
  14.     // 先导入证书 证书由服务端生成,具体由服务端人员操作  
  15.     NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//证书的路径  
  16.     NSData *cerData = [NSData dataWithContentsOfFile:cerPath];  
  17.       
  18.     // AFSSLPinningModeCertificate 使用证书验证模式  
  19.     AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];  
  20.          // allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO  
  21.     // 如果是需要验证自建证书,需要设置为YES  
  22.     securityPolicy.allowInvalidCertificates = YES;  
  23.       
  24.     //validatesDomainName 是否需要验证域名,默认为YES;  
  25.     //假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。  
  26.     //置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的,假如证书上注册的域名是www.google.com,那么mail.google.com是无法验证通过的;当然,有钱可以注册通配符的域名*.google.com,但这个还是比较贵的。  
  27.     //如置为NO,建议自己添加对应域名的校验逻辑。  
  28.     securityPolicy.validatesDomainName = NO;  
  29.       
  30.     securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil nil];  
  31.       
  32.     return securityPolicy;  
  33. }  
  34.   
  35.   
  36. 三.关于证书 参考文章:http://www.2cto.com/Article/201510/444706.html  
  37. 服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换:  
  38. 1.证书转换  
  39. 在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句  
  40.   
  41. openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der  
  42.   
  43. 这样你就可以得到cer类型的证书了。双击,导入电脑。  
  44. 2.证书放入工程  
  45. 1、可以直接把转换好的cer文件拖动到工程中。  
  46. 2、可以在钥匙串内,找到你导入的证书,单击右键,导出项目,就可以导出.cer文件的证书了  

  47. 或者直接在你网站上下载 例如:kyfw.12306.cn:443的:
  48.   openssl s_client -connect kyfw.12306.cn:443 /dev/null | openssl x509 -outform DER > myWebsite.cer
  49. 参考链接:http://www.jianshu.com/p/97745be81d64。  
  50.    
  51. 四.在info.plist去掉之前允许http加载的代码 就是删除下面的代码(么有的就省了这一步)  
  52.  NSAppTransportSecurity  
  53.       
  54.  NSAllowsArbitraryLoads  
  55.  <true/>  
  56.       




你可能感兴趣的:(iOS AFNetworking 使用Https访问服务器)