iOS开发 AFN配置https请求

一.项目中的网络交互都是基于AFN,要求AFN版本在3.0及其以上;

二.代码部分
设置AFN请求管理者的时候 添加 https ssl 验证。
// 1.获得请求管理者
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
// 2.加上这个函数,https ssl 验证。
[manager setSecurityPolicy:[self customSecurityPolicy]];

// https ssl 验证函数

- (AFSecurityPolicy *)customSecurityPolicy {
    
    // 先导入证书 证书由服务端生成,具体由服务端人员操作
    NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"xxx" ofType:@"cer"];//证书的路径
    NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
    
    // AFSSLPinningModeCertificate 使用证书验证模式
    AFSecurityPolicy *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;
    
    securityPolicy.pinnedCertificates = [[NSSet alloc] initWithObjects:cerData, nil];
    
    return securityPolicy;
}


三.关于证书 参考文章:http://www.2cto.com/Article/201510/444706.html
服务端给的是crt后缀的证书,其中iOS客户端用到的cer证书,是需要开发人员转换:
1.证书转换
在服务器人员,给你发送的crt证书后,进到证书路径,执行下面语句

openssl x509 -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>


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

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

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

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

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值