我需要连接到安全的API,该API需要将证书附加到请求。我已在我的设备(其钥匙串)上安装了所需的证书,并且在试图使其运行时遇到了一个麻烦。理想情况下,我希望使用ASIHTTPRequest
来完成此操作,因为它具有方便的setClientCertificateIdentity:
方法。但是,我无法将安装的证书转换为所需的文件格式(SecIdentityRef)。iOS - 将安装的证书从钥匙串连接到请求
我已经尝试过从苹果文档中提取证书的钥匙串中的证书,这似乎并不工作(只是陷入错误)。我甚至尝试过,只是为了做到这一点,将证书嵌入到应用程序本身中,至少可以看到我是否能够工作,但没有骰子。我将它转换为NSData
,根据我正在阅读的所有堆栈溢出线程,但是当我尝试使用各种方法从数据中提取SecIdentityRef
时,它总是失败。
我也尝试过不使用ASIHTTPRequest
,只是为了利用didReceiveAuthenticationChallenge
方法,但我也遇到了障碍。话虽这么说,我也有成功具有代码中找到我的证书我通过下面的代码要:
- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge {
SecTrustRef trustRef = [[challenge protectionSpace] serverTrust];
SecTrustEvaluate(trustRef, NULL);
CFIndex count = SecTrustGetCertificateCount(trustRef);
for (CFIndex i = 0; i < count; i++)
{
SecCertificateRef certRef = SecTrustGetCertificateAtIndex(trustRef, i);
CFStringRef certSummary = SecCertificateCopySubjectSummary(certRef);
CFDataRef certData = SecCertificateCopyData(certRef);
NSLog(@"certSummary: %@", certSummary);
}
这并打印证书,我需要。但在此之后,我认为这是将它发送回服务器的问题,这似乎与我手边的代码无关。我仍然没有回应,也没有数据。
因此,理想情况下,我最好喜欢使用ASIHTTPRequest
(尽管我知道它不再受支持),并且我需要格式为SecIdentityRef
的Cert以附加发送请求。我知道似乎很简单。现在我担心这是否可能?
真的很感激任何明确的方向。提前致谢!
-Vincent
原来苹果文档中的代码工作正常。 “extractIdentityAndTrust”方法是我使用的方法。我的问题是我使用的是.cer文件中的NSData,我需要从.pfx文件中使用它。 https://developer.apple.com/library/mac/#documentation/security/conceptual/CertKeyTrustProgGuide/iPhone_Tasks/iPhone_Tasks.html – svguerin3