您的位置:首页 > 理论基础 > 计算机网络

iOS开发 AFN配置https请求

2018-01-09 11:10 591 查看
一.项目中的网络交互都是基于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// 如果是需要验证自建证书,需要设置为YESsecurityPolicy.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 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加载的代码 就是删除下面的代码(么有的就省了这一步)   
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>  
iOS适配https参考链接:https://github.com/ChenYilong/iOS9AdaptationTips 证书生成的参考链接:http://www.2cto.com/Article/201510/444706.html 证书转换的参考链接:http://www.jianshu.com/p/97745be81d64
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: