如何在 iOS 中检查 SSL 证书的安全性?
Posted
技术标签:
【中文标题】如何在 iOS 中检查 SSL 证书的安全性?【英文标题】:How to check the security of the SSL certificate in iOS? 【发布时间】:2012-03-13 20:01:27 【问题描述】:我想检查 URL 中是否存在 SSL 证书,还想检查其版本和验证类型。
我创建了一个应用程序,我在其中调用 NSURLConnection 委托方法以通过服务器发送请求。
也使用了 "canAuthenticateAgainstProtectionSpace" 方法,但是一旦建立连接就不会调用此方法。
我如何做到这一点?
【问题讨论】:
【参考方案1】:ios 无法让您对证书信息进行非常精细的访问。您有两个选择:私有 API 或使用 OpenSSL 构建您自己的评估器。
您可以在opensource code 中看到私有证书功能。该版本可从SecCertificateVersion()
获得。我不确定您所说的“验证类型”是什么意思。
要使用 OpenSSL 执行此操作,您可以使用 SecCertificateCopyData()
获取 DER 数据,然后自己解析所有内容。
我建议就这个问题打开一个雷达 (bugreporter.apple.com)。无法访问有关证书的基本信息是一个严重的问题。
如果您正在寻找从NSURLConnection
中提取证书的示例代码,请参阅iOS:PTL 中的Chapter 11 sample code:
- (void)connection:(NSURLConnection *)connection
willSendRequestForAuthenticationChallenge:
(NSURLAuthenticationChallenge *)challenge
NSURLProtectionSpace *protSpace = challenge.protectionSpace;
SecTrustRef trust = protSpace.serverTrust;
...
SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0);
...
此时,cert
持有您的叶子证书。
【讨论】:
感谢您的建议。“验证类型”是指在 URL 上实施的 SSL 验证类型,标准或扩展验证。在这里,我使用了“第 11 章示例代码”中给出的代码,但是当我尝试构建应用程序时,出现编译时错误 -> 架构 i386 的未定义符号:“_SecPolicyCreateBasicX509”,引用自:ConnectionViewController 中的 _RNSecTrustEvaluateAsX509。 o,“_SecCertificateNotValidAfter”,引用自:-[ConnectionViewController connection:willSendRequestForAuthenticationChallenge:] in ConnectionViewController.o以上是关于如何在 iOS 中检查 SSL 证书的安全性?的主要内容,如果未能解决你的问题,请参考以下文章