我想检查 SSL 证书是否出现在 URL 中,还想检查它的版本和验证类型。
我创建了一个应用程序,我在其中调用 NSURLConnection 委托(delegate)方法通过服务器发送请求。
还使用了"canAuthenticateAgainstProtectionSpace" 方法,但是一旦建立连接就不会调用此方法。
我如何实现这一目标?
最佳答案
iOS 不会让您非常精细地访问证书信息。您有两个选择:私有(private) API 或使用 OpenSSL 构建您自己的评估器。
可以在opensource code中看到私有(private)证书函数.该版本可从 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
持有您的叶子证书。
关于ios - 如何检查 iOS 中 SSL 证书的安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9412643/