【问题标题】:How to check the security of the SSL certificate in iOS?如何在 iOS 中检查 SSL 证书的安全性?
【发布时间】:2012-03-13 20:01:27
【问题描述】:

我想检查 URL 中是否存在 SSL 证书,还想检查其版本和验证类型。

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

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

我如何做到这一点?

【问题讨论】:

    标签: ios security ios5 ios4 ssl-certificate


    【解决方案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
    猜你喜欢
    • 2011-07-19
    • 1970-01-01
    • 2012-04-11
    • 2016-08-24
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2017-08-06
    相关资源
    最近更新 更多