我希望能够获得ssl证书(如果可能的话+链),以便能够显示专有名称并确定它是否是EV证书。 (通过证书策略检测EV证书(wikipedia)
据我所见,如果证书是自签名的,您只会收到一些证书详细信息。
是否可以使用像CFNetwork这样的较低层来检索证书?
答案 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
身份验证 方法
要做到这一点:
实施-connection:canAuthenticateAgainstProtectionSpace:
委托回调。
在您的实现中,如果是身份验证方法
保护空间是NSURLAuthenticationMethodServerTrust
,你有
两个选择:
2a上。返回NO
,然后启用默认的TLS算法。
2B。返回YES
,在这种情况下,将调用-connection:didReceiveAuthenticationChallenge:
委托回调。
如果您想在查看之前查看证书
决定,您可以在保护空间对象上调用-serverTrust
获取一个信任对象,然后使用 SecTrust API 来获取
证书链。
如果您选择路径2b,则会调用-connection:didReceiveAuthenticationChallenge:
委托回调。你有两个选择:
3A。通过在质询的发件人上调用-cancelAuthenticationChallenge:
来禁止连接。
3B。通过在质询的发件人上调用-useCredential:forAuthenticationChallenge:
来允许连接。要获取凭据,请致电-[NSURLCredential initWithTrust:]
。在这里传递的信任对象实际上并不重要;来自保护空间的人将会这样做。
您不必同步执行此操作。你可以锁定 挑战并从你的委托回调中返回,然后解决 在未来的某个时刻挑战。