iOS HttpS证书问题
1.AFNetworking配置Https
AFSecurityPolicy *policy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeCertificate];
[policy setAllowInvalidCertificates:YES]; //是否允许无效证书(也就是自建的证书),默认为NO
[policy setValidatesDomainName:NO]; // 是否需要验证域名,默认为YES;
NSString *cer1Path = [[NSBundle mainBundle] pathForResource:@"certification" ofType:@"cer"];//从mainBundle中取出证书
NSData *cer1Data = [NSData dataWithContentsOfFile:cer1Path]; NSSet *set = [NSSet setWithObject:cer1Data]; //可以设置多个证书 policy.pinnedCertificates = set;
self.manager.securityPolicy = policy;
2.配置完闪退
后端给的证书配置完闪退,打全局断点发现崩到AFNetworking的库里,
for(NSData*certificateDatainself.pinnedCertificates) { [Certificates addObject:(__bridge_transferid)SecCertificateCreateWithData(NULL, (__bridgeCFDataRef)certificateData)]; }
证书文件经过转化的值为空,就说明是证书的问题
原因:后端证书原本为crt格式的文件,直接改后缀cer并不能用
如果是Windows的系统,可以执行下面的命令:openssl x509 -in 你的证书.crt -out 你的证书.cer -outform der
可以去到cer类型的证书
如果是Mac系统,则可以直接改后缀为cer导入钥匙串,再从钥匙串中导出为cer的证书
证书导入到项目中,按照1的配置,就可以测试连接了