公司运维反应Https证书有效期变短,之前是两年现在是一年。给我们提个需求,当证书过期时候我们去请求下发一个证书字符串。转换的时候AF闪退出了问题
网上看到其他人是把证书放到项目中转换失败在AF中闪退,闪退位置
[pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];
闪退原因
证书里面内容不同,我们可以打开证书查看内部
1.错误的cer
2.正确的cer
我们加载闪退,是因为没有转换成证书data.我从服务器下载的字符串转cer时候转的失败,里面的字符需要经过base64转换
解决方案
处理内部字符串并用base64转换成data数据
需要处理三点
1.换行符“\n”
2."-----BEGIN CERTIFICATE-----"
3."-----END CERTIFICATE-----"
- (NSData *)convertCerStringToData:(NSString *)cerStr
{
NSString * pubSpaceStr = [cerStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
NSString * pubStartStr = [pubSpaceStr stringByReplacingOccurrencesOfString:@"-----BEGIN CERTIFICATE-----" withString:@""];
NSString *pubEndStr = [pubStartStr stringByReplacingOccurrencesOfString:@"-----END CERTIFICATE-----" withString:@""];
NSData *cerData = [[NSData alloc] initWithBase64EncodedString:pubEndStr options:0];
return cerData;
}