博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS AFN配置HTTPS请求
阅读量:7187 次
发布时间:2019-06-29

本文共 3125 字,大约阅读时间需要 10 分钟。

hot3.png

一.项目中的网络交互都是基于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加载的代码 就是删除下面的代码(么有的就省了这一步) 
NSAppTransportSecurity
NSAllowsArbitraryLoads
一、 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源码     
NSAppTransportSecurity
NSExceptionDomains
XXX.com
NSIncludesSubdomains
NSExceptionRequiresForwardSecrecy
NSExceptionAllowsInsecureHTTPLoads
NSExceptionMinimumTLSVersion
TLSv1.1
二、 目前项目中用到的第三方已经支持https的有 WKWebView UIWebView SDWebImage 支付宝SDK 微信支付SDK 友盟SDK 极光推送SDK 其中用到的UIWebView 以后要逐步替换为WKWebView

转载于:https://my.oschina.net/jlongtian/blog/861790

你可能感兴趣的文章
2018-04-27 Linux学习
查看>>
ansible+jenkins+svn实现生产环境自动发布
查看>>
Java Web学习总结(5)——HttpServletResponse对象详解
查看>>
学习笔记(13)
查看>>
curl命令使用大全
查看>>
Netty4 之 简单搭建WebSocket服务
查看>>
我的Git忽略文件
查看>>
C# 项目异常处理的总结 C# 项目异常处理的总结 .NET异常处理总结
查看>>
【易语言作品】夜猫护眼宝 PC版 大神勿喷,语言是国产的易语言!
查看>>
Java基础学习总结(3)——抽象类
查看>>
安装Apache
查看>>
WebView图片加载不完全
查看>>
解决 Sublime Text 无法使用Package Control 的问题
查看>>
ReactJS学习笔记——组件复合及表单的处理
查看>>
jquery中cookie的使用
查看>>
用javascript判断IE版本号简单实用且向后兼容
查看>>
Java_Ant详解
查看>>
AWS考证方向:五、使用key密钥连接实例
查看>>
Ganglia 安装与配置详解
查看>>
易宝典文章——怎样管理Exchange Server 2013共享邮箱
查看>>