iOS https证书配置闪退问题

本文讲述了iOS开发者在处理HTTPS证书时遇到的问题,发现服务端提供的.cer格式证书需为data格式才能被正确解析。作者提供了.pem和.crt转.cer的转换方法以及相关命令。

iOS使用的https证书都是.cer格式的,以往服务端给我的证书都是.pem或.crt格式,我通过终端转换为.cer后直接就能用了,很顺利。但是最近换证书服务端给我的格式刚好就是.cer格式,我看格式一样就没在转换了,结果换上证书后,AFN直接闪退了,闪退位置:

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

后面查了才知道,原来iOS用的.cer证书内容还必须是data格式的

服务端给我的.cer证书:

正确的.cer证书:

解决方案:

  1. 直接让后端给正确的data格式.cer证书。
  2. 钥匙串访问证书,右键导出为新的.cer证书。
  3. 让后端给.pem文件用自己转换(转换命令见后文)。
  4. 代码转换为data。
- (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;
}

附:证书转换命令

pem转换为cer

1.cd到pem证书所在的位置
2.输入此命令即可:openssl x509 -inform pem -in 你的证书名字.pem -outform der -out 你的新证书.cer

crt转换为pem

openssl x509 -in 你的证书名字.crt -out 你的新证书.pem

crt转换为cer

openssl x509 -in 你的证书.crt -out 你的新证书.cer -outform der

参考链接:
iOS中cer证书转换失败闪退“SecCertificateCreateWithData” - 简书

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值