如何在iOS中检索ssl服务器证书?

时间:2011-02-24 10:48:53

标签: iphone ios ssl nsurlconnection cfnetwork

我希望能够获得ssl证书(如果可能的话+链),以便能够显示专有名称并确定它是否是EV证书。 (通过证书策略检测EV证书(wikipedia

据我所见,如果证书是自签名的,您只会收到一些证书详细信息。

是否可以使用像CFNetwork这样的较低层来检索证书?

1 个答案:

答案 0 :(得分:9)

通过 macnetworkprog.lists.apple.com 邮件列表 http://web.archiveorange.com/archive/v/x0fiWEI9emJFc36DY0UP并在开发者论坛中提到了一些地方

  

嗯,默认的TLS安全策略应该足够了,但是如果   你想参与这个过程,你可以这样做(在iPhone OS上   3.0及更高版本,以及Mac OS X 10.6)通过实现   -connection:canAuthenticateAgainstProtectionSpace:和   -connection:didReceiveAuthenticationChallenge:代表回调,   寻找NSURLAuthenticationMethodServerTrust身份验证   方法

要做到这一点:

  1. 实施-connection:canAuthenticateAgainstProtectionSpace:委托回调。

  2. 在您的实现中,如果是身份验证方法 保护空间是NSURLAuthenticationMethodServerTrust,你有 两个选择:

    2a上。返回NO,然后启用默认的TLS算法。

    2B。返回YES,在这种情况下,将调用-connection:didReceiveAuthenticationChallenge:委托回调。

  3. 如果您想在查看之前查看证书 决定,您可以在保护空间对象上调用-serverTrust 获取一个信任对象,然后使用 SecTrust API 来获取 证书链。

    1. 如果您选择路径2b,则会调用-connection:didReceiveAuthenticationChallenge:委托回调。你有两个选择:

      3A。通过在质询的发件人上调用-cancelAuthenticationChallenge:来禁止连接。

      3B。通过在质询的发件人上调用-useCredential:forAuthenticationChallenge:来允许连接。要获取凭据,请致电-[NSURLCredential initWithTrust:]。在这里传递的信任对象实际上并不重要;来自保护空间的人将会这样做。

    2. 您不必同步执行此操作。你可以锁定 挑战并从你的委托回调中返回,然后解决 在未来的某个时刻挑战。