如何检索iOS中的ssl服务器证书?
我希望能够获得ssl证书(如果可能的话+链)能够显示辨别名称,并确定它是否是EV证书。 (通过证书策略检测EV证书( wikipedia )
从我所见过的情况来看,如果证书是自签名的,你只能得到一些证书的详细信息。
是否有可能使用CFNetwork这样的低层来检索证书?
通过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上)-connection:didReceiveAuthenticationChallenge:
委托callback,寻找NSURLAuthenticationMethodServerTrust
validation方法。
去做这个:
-
实现
-connection:canAuthenticateAgainstProtectionSpace:
委托callback。 -
在你的实现中,如果保护空间的authentication方法是
NSURLAuthenticationMethodServerTrust
,你有两个select:2A。 返回
NO
,并让默认的TLSalgorithm踢入。2B。 返回
YES
,在这种情况下,您的-connection:didReceiveAuthenticationChallenge:
委托callback将被调用。
如果要在做出决定之前查看证书,可以调用保护空间对象上的-serverTrust
来获取信任对象,然后使用SecTrust API获取证书链。
-
如果你采取path2b,你的
-connection:didReceiveAuthenticationChallenge:
委托callback将被调用。 你有两个select:3A。 通过在挑战的发件人上调用
-cancelAuthenticationChallenge:
禁止连接。3B。 通过在挑战的发件人上调用
-useCredential:forAuthenticationChallenge:
来允许连接。 要获得证书,请调用-[NSURLCredential initWithTrust:]
。 实际上你在这里传递的信任对象并不重要, 来自保护区的人会做。
您不必同步执行此操作。 您可以locking挑战并从您的委托callback中返回,然后在将来某个时候解决挑战。