AFNetworking 2.x 的SSL身份认证
2016-04-24 22:39
239 查看
一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探
其实这么做的话还是不够的.我们还需要防止中间人攻击(不明白的自己去百度)。攻击者通过伪造的ssl证书使app连接到了伪装的假冒的服务器上,这是个严重的问题!
那么如何防止中间人攻击呢?
首先web服务器必须提供一个ssl证书,需要一个 .crt 文件,然后设置app只能连接有效ssl证书的服务器。
在开始写代码前,先要把 .crt 文件转成 .cer 文件,然后在加到xcode 里面
如果你用的是NSURLConnection,你需要这样检查证书,必须添加一个 NSURLConnectionDelegate
用 AFNetworking 2.x的话就简单多了,只需要添加一个
要经常用的话,推荐写一个方法,然后以后用就可以复制黏贴了
然后在管理器里这么设置
其实这么做的话还是不够的.我们还需要防止中间人攻击(不明白的自己去百度)。攻击者通过伪造的ssl证书使app连接到了伪装的假冒的服务器上,这是个严重的问题!
那么如何防止中间人攻击呢?
首先web服务器必须提供一个ssl证书,需要一个 .crt 文件,然后设置app只能连接有效ssl证书的服务器。
在开始写代码前,先要把 .crt 文件转成 .cer 文件,然后在加到xcode 里面
openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
如果你用的是NSURLConnection,你需要这样检查证书,必须添加一个 NSURLConnectionDelegate
- (void)connection:(NSURLConnection *)connection willSendRequestForAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge
用 AFNetworking 2.x的话就简单多了,只需要添加一个
AFSecurityPolicy和 set
AFHTTPRequestOperationManager
要经常用的话,推荐写一个方法,然后以后用就可以复制黏贴了
- (AFSecurityPolicy*)customSecurityPolicy { /**** SSL Pinning ****/ NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"你的证书" ofType:@"cer"]; NSData *certData = [NSData dataWithContentsOfFile:cerPath]; AFSecurityPolicy *securityPolicy = [[AFSecurityPolicy alloc] init]; [securityPolicy setAllowInvalidCertificates:NO]; [securityPolicy setPinnedCertificates:@[certData]]; [securityPolicy setSSLPinningMode:AFSSLPinningModeCertificate]; /**** SSL Pinning ****/ return securityPolicy; }
然后在管理器里这么设置
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; /**** SSL Pinning ****/ [manager setSecurityPolicy:[self customSecurityPolicy]]; /**** SSL Pinning ****/ [manager GET:@"网站的url" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary* responseObject) { //这里是你自己的代码了 } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //注释同上 }];
相关文章推荐
- docker之路--docker服务非正常结束的解决
- C# 网络通信大小端转换类
- MySql乱码解决
- 技术分析之CSS+div
- 数据结构--二叉堆与堆排序
- 《LeetBook》leetcode题解(20):Valid Parentheses[E]——栈解决括号匹配问题
- [PHP] 排序和查找算法
- 项目代码风格要求
- torch7学习笔记1——itorch_notebook与lua编译的安装
- RTSP协议
- Oracle 常用命令
- 团队项目第一阶段冲刺站立会议06
- ubuntu安装ftp服务器——vsftpd,实现ftp传输文件
- leetcode
- 蘑菇街2017春招笔试
- 移植u-boot-2012.04.01到s3c2440
- SQLMap使用
- Java Experiment 3 PairProgramming
- 20145310 《Java程序设计》第8周学习总结
- Java线程池ThreadPoolExecutor简介(二)