如何在iOS中检查SSL证书的安全性?

时间:2012-02-23 11:59:12

标签: ios security ios5 ios4 ssl-certificate

我想检查天气,URL中存在SSL cetificate也想检查其版本和验证类型。

我创建了一个应用程序,我调用NSURLConnection委托方法通过服务器发送请求。

还使用了“canAuthenticateAgainstProtectionSpace”方法,但是一旦建立连接就不会调用此方法。

任何人都可以告诉我如何实现这一目标。

1 个答案:

答案 0 :(得分:9)

iOS不会为您提供非常精细的证书信息访问权限。您有两种选择:私有API或使用OpenSSL构建您自己的评估程序。

您可以在opensource code中查看私人证书功能。该版本可从SecCertificateVersion()获得。我不确定你的“验证类型”是什么意思。

要使用OpenSSL执行此操作,您可以使用SecCertificateCopyData()获取DER数据,然后自行解析所有内容。

我建议在这个问题上开一个雷达(bugreporter.apple.com)。无法访问有关证书的基本信息是一个严重的问题。

如果您正在寻找从NSURLConnection中提取证书的示例代码,请参阅Chapter 11 sample code中的iOS:PTL

- (void)connection:(NSURLConnection *)connection
  willSendRequestForAuthenticationChallenge:
  (NSURLAuthenticationChallenge *)challenge
{
  NSURLProtectionSpace *protSpace = challenge.protectionSpace;
  SecTrustRef trust = protSpace.serverTrust;
  ...
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0);
  ...

此时,cert持有您的叶子证书。