(iOS) Obj-c .cer 从字符串存储到 SecCertificateRef

(iOS) Obj-c .cer store from string to SecCertificateRef

我已经在网上尝试了几件事,并阅读了几个小时,并经历了大约 20 次演练。他们所有人都在做不同的事情,不要指出我在做什么。

我有一个字符串形式的 .cer,通过 api 返回。然后我想将其传递给 Obj-c 中的 SecCertificateRef 对象。我遇到桥接错误,我试过了。 (__bridge id)certificate(__bridge CFStringRef)certificate。没有骰子。演员类型仍然存在错误。

我仍在学习 Obj-c,尤其是证书处理方面的知识。我有一个字符串 -----BEGIN CERTIFICATE----- MIIF4zCCA8... 形式的证书,我想将它存储在钥匙链中,然后在进行网络调用时使用它。令人惊讶的是,我找不到任何帮助演练或指南。谢谢。

好像没有人来救,所以我想通了。比我想象的要简单。它抱怨 initWithBase64Encoding 的方法已弃用,但尝试使用 Foundation 中的新方法导致了问题。

    NSString * s = @"-----BEGIN CERTIFICATE---- ....." // My Certificate raw string.

    NSRange r1 = [s rangeOfString:@"-----BEGIN CERTIFICATE-----"];
    NSRange r2 = [s rangeOfString:@"-----END CERTIFICATE-----"];
    NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length);
    NSString *subCert = [s substringWithRange:rSub];

    NSData *rawCertificate = [[NSData alloc] initWithBase64Encoding:subCert];
    SecCertificateRef parsedCertificate = SecCertificateCreateWithData(NULL, (__bridge CFDataRef)rawCertificate);

    // This gave me a valid certificate I could store.