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

kor*_*gan 4 iphone ssl nsurlconnection cfnetwork ios

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

根据我所看到的情况,如果证书是自签名的,您只会获得一些证书详细信息.

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

kor*_*gan 9

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

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

去做这个:

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

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

    2A.返回NO,让默认的TLS算法启动.

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

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

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

    3A.通过呼叫-cancelAuthenticationChallenge:质询的发件人来禁止连接.

    3B.通过呼叫-useCredential:forAuthenticationChallenge:质询的发件人来允许连接.要获得凭证,请致电-[NSURLCredential initWithTrust:].在这里传递的信任对象实际上并不重要; 来自保护空间的那个会做.

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