use*_*610 3 security objective-c ios
我目前在以下职位上工作。这是代码:
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);
Run Code Online (Sandbox Code Playgroud)
根据帖子,如果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 10或更高版本,SecCertificateCreateWithData则将返回nil。
iOS10中的安全框架中的某些更改。iOS10中的“ SecCertificateCreateWithData”已损坏或方法变得更加严格。
看起来像个错误。
您可以在以下位置查看错误报告:https://openradar.appspot.com/28618141
也可以在这里阅读相关的gitHub帖子:https : //github.com/lionheart/openradar-mirror/issues/16045
编辑:
从这里的线程开始:为什么SecCertificateCreateWithData总是返回nil?
还要在此处检查文档是否相同:SecCertificateCreateWithData
SecCertificateCreateWithData返回的最常见原因nil是数据不是有效的证书。一个普遍的问题是人们试图通过PEM格式证书,而SecCertificateCreateWithData要求DER。如果使用文本编辑器打开证书,是否看到Base64?还是看到二进制的咕?如果您看到了Base64,则需要DER先将证书转换为二进制()格式,然后再传递给SecCertificateCreateWithData。对于捆绑包中包含的单个证书,您可以使用Mac上的“钥匙串访问”对其进行预转换。
| 归档时间: |
|
| 查看次数: |
3305 次 |
| 最近记录: |