2010-12-11 36 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