我目前正在从以下 post 工作。这是代码:
SecCertificateRef certs = NULL;
SecPolicyRef policy = NULL;
NSString *publicKeyString = @"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeJ8N8fuGShAJnniDg4yuRrxrG61ZF2T24eXSEH87jCJmLbc+MV70AgP/LC8btzSU4FFP56lBmDcmW+Prupf5gO1RXhjPIlET73t5Ny1I3ze+xaShAA9qB0c9dNb26NxVd95wCHNmQhon9qBFmTVZb0CdgscxYcDuLOGskDnATrwIDAQAB";
NSData *publicKeyStringData = [[NSData alloc] initWithBase64EncodedString:publicKeyString options:0];
certs = SecCertificateCreateWithData(kCFAllocatorDefault, (__bridge CFDataRef) publicKeyStringData);
根据帖子,如果
certs
变量为 NULL,则数据格式不正确。我检查了上面的公钥,它的确是base64,所以我看不出certs
为什么为NULL? 最佳答案
证书可以有以下扩展名:.CER、.CRT、.DER、.PEM。它可以用两种方式编码:DER 和 PEM。该apple方法仅接受DER编码。
如果您有 .CER 或 .CRT 扩展名,则必须确定它是采用 DER 还是 PEM 编码进行编码的。 (如果有 .PEM 或 .DER 扩展名就很清楚了。)
要检查当前编码,请将扩展名更改为 DER 并尝试读取它:
如果您看到错误,很可能是 PEM 编码的证书,您需要将其更改为 DER 编码:
//来源:https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them
关于ios - SecCertificateCreateWithData 总是返回 null,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40155587/