一、背景:
苹果从IOS9.0以后就要求使用https,今年发布说的是在2017年1月1日后,所有上架的APP必须使用HTTPS(貌似目前推迟了)。不论怎么说,使用https时迟早的事情,之前通过在info.plist文件中设置 NSAppTransportSecurity为NSAllowsArbitraryLoads的方式不起作用了。这篇文章主要就是介绍在IOS中如何将http改造成https。
二、关于https:
可以简单的理解https就是http的安全版本,https实质是http+SSL;就在http请求的基础上加上一层安全措施,这样抓包工具抓到的数据显示的就是乱码,而不是明文方式了。
三、IOS中的AFNetworking使用https:
1.需要服务端提供认证证书.crt文件,然后自己导出成.cer文件
2.将导出的cer证书加入到项目中,注意勾选相应的target不然可能获取证书路径为nil
3.通过cer证书生成证书校验的安全策略
4.在AFNetworking的网络请求中设置安全策略:[_operationManager setSecurityPolicy:[CertificatehttpsTools customSecurityPolicy]];
5.通过抓包工具Charles检验请求和返回的内容是否加密
证书校验安全策略的工具类:
#import <Foundation/Foundation.h>
#import "AFNetworking.h"
@interface HttpsCertificateTools : NSObject
/**
自定义证书安全策略
@return 返回自定义的证书安全策略
*/
+ (AFSecurityPolicy*)customSecurityPolicy;
@end
#import "HttpsCertificateTools.h"
@implementation HttpsCertificateTools
+ (AFSecurityPolicy*)customSecurityPolicy{
// /先导入证书
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"服务端证书名称" ofType:@"cer"];//证书的路径
NSData *certData = [NSData dataWithContentsOfFile:cerPath];
// NSString *aString = [[NSString alloc] initWithData:certData encoding:NSUTF8StringEncoding];
// AFSSLPinningModeCertificate 使用证书验证模式
// AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
// allowInvalidCertificates 是否允许无效证书(也就是自建的证书),默认为NO
// 如果是需要验证自建证书,需要设置为YES
securityPolicy.allowInvalidCertificates = YES;
更多免费的Python学习资料
进QQ群 688244617
群里还有小伙伴跟你一起交流学习
//validatesDomainName 是否需要验证域名,默认为YES;
//假如证书的域名与你请求的域名不一致,需把该项设置为NO;如设成NO的话,即服务器使用其他可信任机构颁发的证书,也可以建立连接,这个非常危险,建议打开。