在网上找了许久,没找到一个完整的关于afn设置自签名证书进行https链接的文章,也许是我搜索的方式不对,好在现在实现了afn使用自签名证书进行https链接。
https://gxl520.top/jianshu.php 这是这篇文章使用的自签名证书的https站点。
配置前准备
cer证书文件
屏幕快照 2016-11-26 下午3.31.00.png
导入工程啥的也就不说了
下面开始干正经事
导入文件到项目
cer、afn导入工程
为站点添加白名单
白名单
添加主要代码
-(void)postToWeb{ AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // 安全验证 AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate]; /* AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。 AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。 AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。 */ securityPolicy.allowInvalidCertificates = YES;//是否信任非法证书(自建证书) securityPolicy.validatesDomainName = NO;//是否验证域名有效性 manager.securityPolicy = securityPolicy; NSDictionary *postDic = @{@"jianshu":@"1"}; [manager POST:@"https://gxl520.top/jianshu.php" parameters:postDic progress:^(NSProgress * _Nonnull uploadProgress) { }success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSString *resultStr = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"请求成功,%@",resultStr); }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { NSLog(@"请求失败:%@",error); }]; }
工程一览
工程
抓包查看
抓包结果
已经加密访问了web了
假设服务器与内置证书不符
另一个cre证书文件
那么好像就请求失败了
失败
而如果将
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
换成
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];
AFSSLPinningModeNone: 代表客户端无条件地信任服务器端返回的证书。
AFSSLPinningModePublicKey: 代表客户端会将服务器端返回的证书与本地保存的证书中,PublicKey的部分进行校验;如果正确,才继续进行。
AFSSLPinningModeCertificate: 代表客户端会将服务器端返回的证书和本地保存的证书中的所有内容,包括PublicKey和证书部分,全部进行校验;如果正确,才继续进行。
那么返回的结果则
不校验证书的交互
11月29日,由于写的时候想上传demo的,后来忘了补充一点:
注释afn中的两行代码
以上是我的一些学习分享,做为自己的学习笔记
来自一名ios初学者的文章对于这篇https链接的理解是:与服务器进行交互时,用AFSSLPinningModeCertificate 验证了是我的服务器,然后使用https链接。 有出现中间人的话,那么必定是不正确的服务器证书,我的app验证不过 也就不能交互了吧。不知道我理解错了没有
也还有一个疑问,不知道我这模拟虚假服务器的方式是否正确。
作者:Amazing大龙大龙
链接:https://www.jianshu.com/p/a92fbc9b51d5
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦