2010-12-11 65 views
3

通过向kCFStreamPropertySSLSettings字典添加通常的kCFStreamSSLValidatesCertificateChain,kCFStreamSSLAllowsAnyRoot等 - 我可以使服务器&客户端身份验证正常工作。iOS - 管理SSL连接上的受信任根

但是我没有看到我怎么能得到这个更细粒度的;即

  1. 检测到从未见过的服务器/ CA的证书 - 并将接受提交给用户。
  2. 验证我连接到的服务器的证书是否与狭义信任列表(例如,先前连接期间了解到的证书)相关联。

I.e.我正在寻找的是1)类似MacOSX上的SSLSetTrustedRoots()和2)类似于kCFStreamErrorDomainSSL中的错误/域回调(例如errSSLPeerCertUnknown) - 没有哪个似乎在ipad/iphone 4.2.1上定义/访问。

或者我错过了什么?或者我需要在回调中做些明确的事情?示例赞赏(AdvancedURLConnections示例不太适用 - 我有一个原始(IRC)套接字)。

谢谢,

Dw。

回答

1

将kCFStreamSSLValidatesCertificateChain设置为kBooleanFalse并手动验证具有API的证书。

具体来说,使用

SecTrustCreateWithCertificates 

与证书你

CFReadStreamCopyProperty(readStream, kCFStreamPropertySSLPeerCertificates); 

得到然后,您可以使用

SecTrustSetAnchorCertificates 

最后调用

SecTrustEvaluate 
+0

希思 - 你有任何示例代码?所提及的功能没有随附的Apple样本(在其网站上),而Graham Lee未涵盖可口可乐安全应用。我感觉爱丽丝正在摔倒兔子洞。 – jww 2011-07-04 07:58:17

+0

看看我关于这个主题的博客文章。它涵盖了其中的一些问题。 https://blog.asolutions.com/2011/02/using-tls-with-self-signed-certificates-or-custom-root-certificates-in-ios/ – 2011-07-05 20:48:31

+0

此示例代码位于https:// github .COM/dirkx /安全钉扎逐CA – 2013-03-25 09:59:53