iOS中cer证书转换失败闪退“SecCertificateCreateWithData”

公司运维反应Https证书有效期变短,之前是两年现在是一年。给我们提个需求,当证书过期时候我们去请求下发一个证书字符串。转换的时候AF闪退出了问题
网上看到其他人是把证书放到项目中转换失败在AF中闪退,闪退位置

[pinnedCertificates addObject:(__bridge_transfer id)SecCertificateCreateWithData(NULL, (__bridge CFDataRef)certificateData)];

闪退原因

证书里面内容不同,我们可以打开证书查看内部
1.错误的cer


错误的cer

2.正确的cer


正常可以加载的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;
}

你可能感兴趣的:(iOS中cer证书转换失败闪退“SecCertificateCreateWithData”)