【发布时间】:2012-06-14 23:25:15
【问题描述】:
我需要连接到要求将证书附加到请求的安全 API。我已经在我的设备(它的钥匙串)上安装了所需的证书,但我在尝试让它工作时遇到了很多麻烦。理想情况下,我想使用ASIHTTPRequest 来完成此操作,因为它具有方便的setClientCertificateIdentity: 方法。但是,我无法将安装的证书转换为所需的文件格式 (SecIdentityRef)。
我已尝试使用 Apple 文档中的代码从钥匙串中提取 Cert,但这似乎不起作用(只是陷入错误)。我什至试过,只是为了它,将证书嵌入到应用程序本身中,至少看看我是否能让它工作,但没有骰子。根据我正在阅读的所有堆栈溢出线程,我将其转换为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 格式的证书才能附加到发送请求.看起来很简单,我知道。现在我担心这是否可能?
真的很感激任何明确的方向。提前致谢!
-文森特
【问题讨论】:
标签: iphone objective-c ios ssl https