iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
来源:互联网 发布:设循环队列用数组 编辑:程序博客网 时间:2024/05/21 09:32
正式的CA证书非常昂贵,很多人都知道,AFNetworking2只要通过下面的代码,你就可以使用自签证书来访问HTTPS
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy defaultPolicy];
securityPolicy.allowInvalidCertificates = YES;
这么做有个问题,就是你无法验证证书是否是你的服务器后端的证书,给中间人攻击,即通过重定向路由来分析伪造你的服务器端打开了大门。
解决方法。AFNetworking2是允许内嵌证书的,通过内嵌证书,AFNetworking2就通过比对服务器端证书、内嵌的证书、站点域名是否一致来验证连接的服务器是否正确。由于CA证书验证是通过站点域名进行验证的,如果你的服务器后端有绑定的域名,这是最方便的。将你的服务器端证书,如果是pem格式的,用下面的命令转成cer格式
openssl x509 -
in
<你的服务器证书>.pem -outform der -out server.cer
然后将生成的server.cer文件,如果有自建ca,再加上ca的cer格式证书,引入到app的bundle里,AFNetworking2在
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModeCertificate];
或者
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy AFSSLPinningModePublicKey];
securityPolicy.allowInvalidCertificates = YES;
//还是必须设成YES
情况下,会自动扫描bundle中.cer的文件,并引入,这样就可以通过自签证书来验证服务器唯一性了。
我前面说过,验证站点证书,是通过域名的,如果服务器端站点没有绑定域名(万恶的备案),仅靠IP地址上面的方法是绝对不行的。怎么办?答案是想通过设置是不可以的,你只能修改AFNetworking2的源代码!打开AFSecurityPolicy.m文件,找到方法:
- (
BOOL
)evaluateServerTrust:(SecTrustRef)serverTrust
forDomain:(NSString *)domain
将下面这部分注释掉
// SecTrustSetAnchorCertificates(serverTrust, (__bridge CFArrayRef)pinnedCertificates);
//
// if (!AFServerTrustIsValid(serverTrust)) {
// return NO;
// }
//
// if (!self.validatesCertificateChain) {
// return YES;
// }
这样,AFSecurityPolicy就只会比对服务器证书和内嵌证书是否一致,不会再验证证书是否和站点域名一致了。
这么做为什么是安全的?了解HTTPS的人都知道,整个验证体系中,最核心的实际上是服务器的私钥。私钥永远,永远也不会离开服务器,或者以任何形式向外传输。私钥和公钥是配对的,如果事先在客户端预留了公钥,只要服务器端的公钥和预留的公钥一致,实际上就已经可以排除中间人攻击了。
- iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
- iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
- iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
- iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
- AFNetworking2安全的使用自签证书访问HTTPS
- AFNetworking2安全的使用自签证书访问HTTPS
- iOS实用技巧 - AFNetworking安全的使用自签证书访问HTTPS
- iOS9 HTTPS请求: AFNetworking2安全的使用自签证书访问HTTPS
- AFNetworking2安全的使用自签证书访问
- AFNetworking2安全的使用自签证书访问
- AFNetworking2使用自签证书
- iOS Https协议 自签证书访问数据
- Android使用OkHttp访问自签名证书的Https接口
- nginx服务器使用自签ca配置https加密访问
- https ca 自签证书安装步骤
- Nginx搭建HTTPS服务器--自签证书
- Nginx搭建HTTPS服务器--自签证书
- nginx使用ssl模块配置HTTPS支持(自签证书)
- C++基础之内联函数
- 电容参数:X5R,X7R,Y5V,COG 详解
- 使用HAProxy、PHP、Redis和MySQL支撑每天上亿请求的架构细节
- oracle学习之体系结构2
- PHP-Date()
- iOS实用技巧 - AFNetworking2安全的使用自签证书访问HTTPS
- iOS,初始篇(一)
- 递归 数字排列
- Python 面试题集合
- C# 多线程更新Processbar
- JAVA中获取工程路径的方法
- android常用组件
- IOS 紧急申请情况链接和对应的问题
- LeetCode | Best Time to Buy and Sell Stock II(股票购买抛售问题II)