AFNetworking2.0和AFNetworking3.0 的HTTPS的配置
前言:
由于苹果声明在前说是2017.01.01之后提交审核的APP,必须使用HTTPS请求,要不就直接驳回审核,吓得我们年前赶紧提交了一个版本,想着年后在弄这个https,结果又有消息说是苹果推迟了这个要求,大家还可以继续使用http,至于时间好像是还没有公布,不过人家既然都这么说了,看来早晚还是要用https的,就趁着刚开年不是太忙,就把这个给配置一下。首先我要说下这个配置我是弄了一天的,至于为什么弄了这么久,是因为我和后台说好的用正式服测,结果给了我一个测试服的证书,害的我弄了快一天了才忽然发现原来域名不对,重新让后台做了个证书给我,就立马好了。
这是我从开始着手弄到请求正常遇到的不懂的点,因为一开始完全是懵逼的状态
- https比http牛逼、更安全,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。
- 前端如何和后端“沟通”呢?1、公司有钱的直接买个证书,前段把证书导入到项目加一段代码就OK了(是不是想骂人),因为我在查资料时一般都是说的很简单,结果自己还是不懂。一会后面说怎么加代码。2、公司没钱或不想掏钱的就让服务器人员自己建一个(有的公司有运维的是运维建),至于怎么建咱们就不管了。
- 其他一些问题我也忘了,不过下面我一步一步的讲解吧。
我不配图片了。
配置开始:
无论AF是2.0还是3.0的都需要完成前面步骤:
1.给后台人员或运维人员沟通,向他们所要一个.cer的证书文件,至于网上还有什么其他的CA文件、其他格式文件的,不用管,先保存到桌面。
2.回到桌面,双击此.cer文件(如果没有感觉就多双击几次也没有关系),然后打开钥匙串访问,找到你刚才添加的证书(有可能是域名、有可能是名称,实在找不到就在钥匙串访问界面右上角点击搜索,一般好像是域名的,如:139.196.什么什么的),找到后右键,导出此证书(格式也是.cer的)到桌面,现在桌面上有两个。cer格式的证书,为了不弄混淆,你可以把第一个(也就是你双击的那个蓝色的)删掉到垃圾桶里。
3。把桌面上仅有的一个.cer格式的证书,直接拖到你的工程里,位置自己随意,
4.开始工程里的操作,plist里的Allow Arbitrary Loads 改为 YES(这个不多说,不懂的网上一大堆),然后你的URL前缀要换成https://的,其他不用改。
5.开始分2.0和3.0的了,不管你封装不封装你的AF,反正需要的也就一段代码,同样也不区分GET和POST的,我以不封装的POST举例,各位看官各取所需吧:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//此处召唤https
manager.securityPolicy = [self customSecurityPolicy];
//urlString 是你的请求的URL(记得是https://开头的哦)
//param 是一个NSDictionary 是你的请求带的参数
[manager POST:urlString parameters:param success:^(AFHTTPRequestOperation *operation, id responseObject){
NSLog(@"https请求成功");
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"https请求失败,原因:%@",error);
}];
/***这是抽出来的方法,复制需看清***/
/**
* SSL校验
*/
- (AFSecurityPolicy *)customSecurityPolicy
{
//导入证书后,找到证书的路径 ()
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"这是你证书的名字(不是域名)" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
securityPolicy.pinnedCertificates = @[certData];
return securityPolicy;
}
OK,如果按照步骤应该是已经能调通了的。加入报code = 1202 或 说证书无效,域名无效或危险的,或说将要前往隐藏域名什么什么的,这些是证书不正确(意思就是证书上的域名和你请求的域名不一致,需要按证书的域名来)
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
//此处召唤https
manager.securityPolicy = [self customSecurityPolicy];
//strUrl 是你的请求的URL(记得是https://开头的哦)
//dic 是一个NSDictionary 是你的请求带的参数
[manager POST:strUrl parameters:dic progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"进度");
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"失败:%@",error);
}];
/***这是抽出来的方法,复制需看清***/
/**
* SSL校验
*/
- (AFSecurityPolicy *)customSecurityPolicy
{
//先导入证书,找到证书的路径
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"这是你证书的名字(不是域名)" ofType:@"cer"];
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
//AFSSLPinningModeCertificate 使用证书验证模式
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
//allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
//如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。
//置为NO,主要用于这种情况:客户端请求的是子域名,而证书上的是另外一个域名。因为SSL证书上的域名是独立的。
//如置为NO,建议自己添加对应域名的校验逻辑。
securityPolicy.validatesDomainName = NO;
NSSet *set = [[NSSet alloc] initWithObjects:certData, nil];
securityPolicy.pinnedCertificates = set;
return securityPolicy;
}
OK,如果按照步骤应该是已经能调通了的。加入报code = 1202 或 说证书无效,域名无效或危险的,或说将要前往隐藏域名什么什么的,这些是证书不正确(意思就是证书上的域名和你请求的域名不一致,需要按证书的域名来)
至此, 已经完成了以AFNetworking为基础的HTTPS的配置,配置好后,其实还是很容易的,只不过网上的说法或教程留的隐藏的坑太多,更多心得前往博主首页,感谢AF的网络框架,感谢看到这篇心得的朋友,希望能帮到你们。感谢所有。(纯手打)如有不明白的可以问我
AFNetworking2.0和AFNetworking3.0 的HTTPS的配置的更多相关文章
- iOS 适配https(AFNetworking3.0为例)
众所周知,苹果有言,从2017年开始,将屏蔽http的资源,强推https楼主正好近日将http转为https,给还没动手的朋友分享一二 1.准备证书 首先找后台要一个证书(SSL证书,一般你跟后台说 ...
- iOS开发--基于AFNetWorking3.0的图片缓存分析
图片在APP中占有重要的角色,对图片做好缓存是重要的一项工作.[TOC] 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.C ...
- iOS- 利用AFNetworking3.0+(最新AFN) - 实现文件断点下载
官方建议AFN的使用方法 0.导入框架准备工作 •1. 将AFNetworking3.0+框架程序拖拽进项目 •2. 或使用Cocopod 导入AFNetworking3.0+ •3. ...
- AFNetworking3.0+MBProgressHUD二次封装,一句话搞定网络提示
对AFNetworking3.0+MBProgressHUD的二次封装,使用更方便,适用性非常强: 一句话搞定网络提示: 再也不用担心网络库更新后,工程要修改很多地方了!网络库更新了只需要更新这个封装 ...
- 基于AFNetworking3.0网络封装
概述 对于开发人员来说,学习网络层知识是必备的,任何一款App的开发,都需要到网络请求接口.很多朋友都还在使用原生的NSURLConnection一行一行地写,代码到处是,这样维护起来更困难了. 对于 ...
- iOS_SN_基于AFNetworking3.0网络封装
转发文章,原地址:http://www.henishuo.com/base-on-afnetworking3-0-wrapper/?utm_source=tuicool&utm_medium= ...
- 【转载】基于AFNetWorking3.0的图片缓存分析
原文出处: Yasin的简书 理论 不喜欢理论的可以直接跳到下面的Demo实践部分 缓存介绍 缓存按照保存位置可以分为两类:内存缓存.硬盘缓存(FMDB.CoreData…).我们常说的网络请求缓存包 ...
- IOS 网络浅析-(十一 三方 AFNetworking3.0简介)
AFNetworking3.0是目前最新的版本,本来打算介绍一下2.6,但是想想2.6名不久矣,就决定不介绍了,有兴趣的小伙伴可以上网查一查.下面我就开始进入正题了. 目前使用人数最多的第三方网络库, ...
- 网络婚礼之AFNetWorking3.0
目前使用人数最多的第三方网络库,没有之一.从开始的NSURLConnection到现在的NSURLSession,它都一直保持着与苹果的步调一致,而由它也衍生出大量的相关第三方网络功能库,不仅仅因为他 ...
随机推荐
- FMDB的一些基本操作小结
http://blog.csdn.net/iunion/article/details/7204625 仅供自己记录使用, h文件 #import <Foundation/Foundation. ...
- bzoj3110: [Zjoi2013]K大数查询 【cdq分治&树套树】
模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = ...
- git 常用命令--Linus Torvalds
1.git log 显示仓库的历史记录,默认显示所有记录, 1)git log -m,显示最近的几次提交,, 2)git log --pretty=oneline 显示提交hash和注释 -p 按补 ...
- git如何正确回滚代码
git如何正确回滚代码 方法一,删除远程分支再提交 ①首先两步保证当前工作区是干净的,并且和远程分支代码一致 $ git co currentBranch $ git pull origin curr ...
- IOS开发-OC学习-MD5加密
MD5的全称是Message-Digest Algorithm 5. MD5加密算法为现在应用最广泛的哈希算法之一,该算法广泛应用于互联网网站的用户文件加密,能够将用户密码加密为128位的长整数.数据 ...
- 解决VirtualBox下安装虚拟机(Ubuntu)出错(不能为虚拟电脑Ubuntu打开一个新的任务)的有关问题
[转]http://www.myexception.cn/program/1964906.html 解决VirtualBox下安装虚拟机(Ubuntu)出错(不能为虚拟电脑Ubuntu打开一个新的任务 ...
- 理解Action,Service和Dao功能(转)
真正理解.区分Action,Service和Dao功能 在不分层的系统里,我们可以将所有的代码都写到一个地方,比如struts的Action类.在这里,我们不仅要处理页面逻辑,还要做业务逻辑,还要 ...
- c++初学(电梯实验)
模拟电梯载人实验 Elevator.h class Elevator{public: Elevator(); ~Elevator(); void getNowNum(); ...
- 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍
使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...
- 8.DNS :域名系统
前面已经提到了访问一台机器要靠IP地址和MAC地址,其中,MAC地址可以通过ARP协议得到,所以这对用户是透明的,但是IP地址就不行,无论如何用户都需要用一个指定的IP来访问一台计算机,而IP地址又非 ...