我發現下面的代碼: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);
我試過了,但我沒有得到任何匹配(請檢查我的編輯)。 – 2012-04-09 14:26:43
對不起; Mac OS X在大腦中。在iOS中,除了應用程序鑰匙串以外,您無權訪問任何鑰匙串。所以你不能從設備上獲得證書列表。您可以使用我鏈接的列表(HT5012)來查找設備上的正常情況,但它不提供完整的證書。通常情況下,您不需要「任何」根目錄,只需要根證書,以便您可以直接發佈這些根目錄。但是,除此之外,您可以從Mac導出證書並將其與您的產品一起發貨,或者您可以使用上述第二種方法。 – 2012-04-09 14:46:48
問題是用戶不會連接到我的服務器,而是連接到其他服務器,並且我想驗證它是否具有有效的SSL證書(我無法預先預測哪個是我要驗證根證書的原因) 。無論如何,我想我會嘗試第二種方法,並在可能的情況下切換我的代碼以使用本地呼叫,這將爲我處理SSL驗證。謝謝。 – 2012-04-09 17:58:54