zoukankan      html  css  js  c++  java
  • iOS开发 AFN配置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.   
    48. 参考链接:http://www.jianshu.com/p/97745be81d64。  
    49.    
    50. 四.在info.plist去掉之前允许http加载的代码 就是删除下面的代码(么有的就省了这一步)  
    51.  <key>NSAppTransportSecurity</key>  
    52.     <dict>  
    53.  <key>NSAllowsArbitraryLoads</key>  
    54.  <true/>  
    55.     </dict>  



    [objc] view plain copy
    1. 一、  
    2.  2017年1月1日起所有提交到 App Store 的App必须强制开启 ATS。  
    3.  就是要求去掉 Info.plist 的 NSAllowsArbitraryLoads  
    4.  1.这要求所有通过APP发送的网络请求都需要https  
    5.    
    6.  2.开启ATS,图片(例如图像的URL)等静态文件的url需要用https,否则会无法加载;  
    7.    
    8.  3.对于H5,网页浏览和视频播放的行为,iOS 10 中新加入了NSAllowsArbitraryLoadsInWebContent 键。通过将它设置为 YES ,  
    9.  可以让你的 app 中的 WKWebView 和使用 AVFoundation 播放的在线视频不受 ATS 的限制。  
    10.  这也应该是绝大多数使用了相关特性的 app 的选择。但是坏消息是这个键在 iOS 9 中并不会起作用.  
    11.    
    12.  4.iOS9中可以选择使用 NSExceptionDomains 来针对特定的域名开放 HTTP 应该要相对容易过审核。“需要访问的域名是第三方服务器,他们没有进行 HTTPS 对应”会是审核时的一个可选理由,但是这应该只需要针对特定域名,而非全面开放。如果访问的是自己的服务器的话,可能这个理由会无法通过。是需要在Info.plist 配置中的XML源码  
    13.      <key>NSAppTransportSecurity</key>  
    14.      <dict>  
    15.          <key>NSExceptionDomains</key>  
    16.          <dict>  
    17.              <key>XXX.com</key>  
    18.              <dict>  
    19.                  <!--适用于这个特定域名下的所有子域-->  
    20.                  <key>NSIncludesSubdomains</key>  
    21.                  <true/>  
    22.                  <!--扩展可接受的密码列表:这个域名可以使用不支持 forward secrecy 协议的密码-->  
    23.                  <key>NSExceptionRequiresForwardSecrecy</key>  
    24.                  <false/>  
    25.                  <!--允许App进行不安全的HTTP请求-->  
    26.                  <key>NSExceptionAllowsInsecureHTTPLoads</key>  
    27.                  <true/>  
    28.                  <!--在这里声明所支持的 TLS 最低版本-->  
    29.                  <key>NSExceptionMinimumTLSVersion</key>  
    30.                  <string>TLSv1.1</string>  
    31.              </dict>  
    32.          </dict>  
    33.      </dict>  
    34.    
    35.  二、  
    36.  目前项目中用到的第三方已经支持https的有  
    37.  WKWebView  
    38.  UIWebView  
    39.  SDWebImage  
    40.  支付宝SDK  
    41.  微信支付SDK  
    42.  友盟SDK  
    43.  极光推送SDK  
    44.    
    45.  其中用到的UIWebView 以后要逐步替换为WKWebView  


    iOS适配https参考链接:
    https://github.com/ChenYilong/iOS9AdaptationTips

    证书生成的参考链接:http://www.2cto.com/Article/201510/444706.html

    证书转换的参考链接:http://www.jianshu.com/p/97745be81d64

     

  • 相关阅读:
    Json对象与Json字符串互转(4种转换方式)
    Web.config配置文件详解
    jQuery BlockUI Plugin Demo 6(Options)
    jQuery BlockUI Plugin Demo 5(Simple Modal Dialog Example)
    jQuery BlockUI Plugin Demo 4(Element Blocking Examples)
    jQuery BlockUI Plugin Demo 3(Page Blocking Examples)
    jQuery BlockUI Plugin Demo 2
    <configSections> 位置引起的错误
    关于jQuery的cookies插件2.2.0版设置过期时间的说明
    jQuery插件—获取URL参数
  • 原文地址:https://www.cnblogs.com/zhun/p/7941120.html
Copyright © 2011-2022 走看看