2012-03-30 110 views
3

我發現下面的代碼:https://github.com/roddi/ValidateStoreReceipt/blob/master/validatereceipt.m這在MacOS訪問蘋果的根證書在iOS

加載根證書(「蘋果根CA」),我試圖使它在iOS上正常工作。

我們的代碼是用C++編寫的,使用OpenSSL在使用SSL套接字時驗證遠程對等體。

在其他平臺上,我們加載根證書並使用X509_STORE_add_cert將它們添加到上下文中。

然後我們使用SSL_get_peer_certificate並驗證主機名。這些不是自簽名證書,這就是我們爲什麼要使用設備的根證書的原因。

我的問題是如何獲得iOS設備上的根證書?

編輯:

我試過下面的查詢,但我不斷收到-25300(errSecItemNotFound)。

NSDictionary* query=[NSDictionary dictionaryWithObjectsAndKeys: 
        (__bridge id)kSecClassCertificate,kSecClass, 
        kCFBooleanTrue,kSecReturnRef, 
        kSecMatchLimitAll,kSecMatchLimit, 
        kCFBooleanTrue,kSecMatchTrustedOnly, 
        nil]; 
SecItemCopyMatching((__bridge CFDictionaryRef)query,&ref); 

回答

3

你會想要的東西沿着這些線路:

  • kSecMatchTrustedOnly組查找使用SecItemCopyMatching()的證書kCFBooleanTrue。記住,這將是a lot of certificates,而不只是一個。
  • 然後使用SecCertificateCopyData()將它們導出爲DER格式。
  • 將其導入到OpenSSL的
  • 利潤

或者,你可以走另外一條道路:

  • 轉換證書使用OpenSSL爲DER
  • 創建SecCertificateRefSecCertificateCreateWithData()
  • 創建a SecPolicyRefSecPolicyCreateSSL()
  • 創建SecTrustRefSecTrustCreateWithCertificates()
  • SecTrustEvaluate()
  • 利潤

或者當然你也可以管理與NSURLConnectionCFNetwork SSL連接(可直接在C++),該系統將盡一切評估爲你自動。只要有可能,我建議不要在iOS上使用OpenSSL,因爲它會產生很多複雜性。但是,如果需要,上面的內容應該可以幫助你彌合。

+0

我試過了,但我沒有得到任何匹配(請檢查我的編輯)。 – 2012-04-09 14:26:43

+0

對不起; Mac OS X在大腦中。在iOS中,除了應用程序鑰匙串以外,您無權訪問任何鑰匙串。所以你不能從設備上獲得證書列表。您可以使用我鏈接的列表(HT5012)來查找設備上的正常情況,但它不提供完整的證書。通常情況下,您不需要「任何」根目錄,只需要根證書,以便您可以直接發佈這些根目錄。但是,除此之外,您可以從Mac導出證書並將其與您的產品一起發貨,或者您可以使用上述第二種方法。 – 2012-04-09 14:46:48

+0

問題是用戶不會連接到我的服務器,而是連接到其他服務器,並且我想驗證它是否具有有效的SSL證書(我無法預先預測哪個是我要驗證根證書的原因) 。無論如何,我想我會嘗試第二種方法,並在可能的情況下切換我的代碼以使用本地呼叫,這將爲我處理SSL驗證。謝謝。 – 2012-04-09 17:58:54

1

有幾種分發證書的方法。使用電子郵件 - 發送證書作爲附件,點擊它將開始安裝過程。或者使用瀏覽器 - 將Safari導航到承載證書的頁面,下載並安裝。您還可以使用配置配置文件來簡化部署。

閱讀更多關於iPad in Business的信息,向下滾動至Distributing and Installing Certificates部分。

編輯:證書查詢

要找到可以使用SecItemCopyMatching提供kSecClassCertificatekSecAttrLabel一個鑰匙串項目。結帳Finding a Certificate In the KeychainCertificate, Key, and Trust Services Tasks for iOS

+0

我知道如何加載提供的證書,我的問題是如何加載現有的根證書。我不希望將證書與我的應用捆綁在一起,我想使用蘋果的應用。 – 2012-04-07 08:47:10

+0

我誤解了你的問題。看看我的編輯關於'SecItemCopyMatching'可以幫助你。 – tenorsax 2012-04-08 00:22:47

+0

我試過了,但沒有得到任何匹配(請查看我的編輯)。 – 2012-04-09 14:27:00