【问题标题】:iOS - managing trusted roots on an SSL connectioniOS - 在 SSL 连接上管理受信任的根
【发布时间】:2010-12-11 19:07:35
【问题描述】:

通过向 kCFStreamPropertySSLSettings 字典添加常用的 kCFStreamSSLValidatesCertificateChain、kCFStreamSSLAllowsAnyRoot 等 - 我可以使服务器和客户端身份验证工作。

但是,我看不到如何获得更细粒度的信息;即

  1. 检测从未见过的服务器/CA 证书 - 并将接受度升级到用户。
  2. 根据一个狭窄的信任列表验证我连接到的服务器的证书(例如,在之前的连接过程中了解的证书)。

即我正在寻找的是 1)类似于 MacOSX 上的 SSLSetTrustedRoots() 和 2)类似于 kCFStreamErrorDomainSSL 中的错误/域回调(例如 errSSLPeerCertUnknown) - 在 ipad/iphone 4.2.1 上似乎没有定义/可访问。

或者我错过了什么?还是我需要对回调做一些明确的事情?示例赞赏(AdvancedURLConnections 示例不太适用 - 我有一个原始(IRC)套接字)。

谢谢,

Dw.

【问题讨论】:

    标签: iphone ipad ios ssl x509


    【解决方案1】:

    将 kCFStreamSSLValidatesCertificateChain 设置为 kBooleanFalse 并使用 API 手动验证证书。

    具体来说,使用

    SecTrustCreateWithCertificates
    

    使用您获得的证书

    CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates);
    

    然后,你可以使用

    SecTrustSetAnchorCertificates
    

    最后调用

    SecTrustEvaluate
    

    【讨论】:

    • Heath - 你有示例代码吗?提到的功能没有附带的 Apple 示例(在他们的网站上),并且 Graham Lee 没有在 Coca Application Security 中介绍。我感觉就像爱丽丝从兔子洞里翻滚一样。
    • 查看我关于该主题的博文。它涵盖了其中一些问题。 blog.asolutions.com/2011/02/…
    猜你喜欢
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多