5

我希望能够获得 ssl 证书(如果可能,+chain)以便能够显示可分辨名称并确定它是否是 EV 证书。(通过证书策略检测 EV 证书(维基百科

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

是否可以使用 CFNetwork 等较低层来检索证书?

4

1 回答 1

10

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

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

去做这个:

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

  2. 在你的实现中,如果保护空间的认证方式是NSURLAuthenticationMethodServerTrust,你有两种选择:

    2a. Return NO,并让默认的 TLS 算法启动。

    2b。Return YES,在这种情况下,您的-connection:didReceiveAuthenticationChallenge:委托回调将被调用。

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

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

    3a。-cancelAuthenticationChallenge:通过调用质询的发送者来禁止连接。

    3b。-useCredential:forAuthenticationChallenge:通过调用挑战的发送者来允许连接。要获取凭证,请致电-[NSURLCredential initWithTrust:]。你在这里传递什么信任对象实际上并不重要。保护空间里的那个就行了。

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

于 2011-02-25T14:19:50.290 回答