AFSecurityPolicy
使用AFNetworking 进行 https请求核心是生成 AFSecurityPolicy 对象,并赋值给当前的SessionManager。
+ (AFSecurityPolicy *)customSecurityPolicy {
NSString *cerPath = [[NSBundle mainBundle] pathForResource:@"pacificcoffee_com_cn" ofType:@"cer"];
NSData *cerData = [NSData dataWithContentsOfFile:cerPath];
AFSecurityPolicy *securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
securityPolicy.allowInvalidCertificates = YES;
securityPolicy.validatesDomainName = NO;
[securityPolicy setPinnedCertificates:@[cerData]];
return securityPolicy;
}
关于cer文件
一般情况下服务端的SSL
证书为crt
格式,而mac端使用的证书则为cer
格式。这种情况可以使用 Terminal
转换一下格式即可。
在终端进入证书目录,输入一下指令
openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
然后就可以输出一个cer
证书,使用的时候直接将cer
证书拖入到工程中并确定cer
文件已经被添加到Bundle Resource
中。
allowInvalidCertificates
默认为NO,如果你的证书是不被信任的,即自建证书,那么需要设置为YES,AFNetworking
才会进行证书验证
validatesDomainName
很多时候一个SSL证书下回分出两个域名,即一个生产环境和一个测试环境,这就会到时证书中的域名和实际请求的域名可能会不一致,这样就可以将validatesDomainName
属性设置为NO来避免。
PS
通过这个网址可以简单判断一下你的域名是否支持HTTPS通信