2012-02-23 76 views
6

我想檢查天氣SSL URL是否存在於URL中,也想檢查它的版本和驗證類型。如何檢查iOS中SSL證書的安全性?

我創建了一個應用程序,我在調用NSURLConnection委託方法通過服務器發送請求。

也使用「canAuthenticateAgainstProtectionSpace」方法,但是一旦連接建立,該方法就不會被調用。

誰能告訴我如何做到這一點。

回答

9

iOS不會提供非常詳細的證書信息訪問權限。您有兩種選擇:私有API或使用OpenSSL構建自己的評估程序。

您可以在opensource code中看到專用證書功能。該版本可從SecCertificateVersion()獲得。我不確定你在這裏的「驗證類型」是什麼意思。

要使用OpenSSL完成此操作,您可以使用SecCertificateCopyData()獲取DER數據,然後自行解析所有內容。

我建議在這個問題上開一個雷達(bugreporter.apple.com)。缺乏對證書基本信息的訪問是一個嚴重的問題。

如果你正在尋找從NSURLConnection提取證書的示例代碼,請從Chapter 11 sample codeiOS:PTL

- (void)connection:(NSURLConnection *)connection 
    willSendRequestForAuthenticationChallenge: 
    (NSURLAuthenticationChallenge *)challenge 
{ 
    NSURLProtectionSpace *protSpace = challenge.protectionSpace; 
    SecTrustRef trust = protSpace.serverTrust; 
    ... 
    SecCertificateRef cert = SecTrustGetCertificateAtIndex(trust, 0); 
    ... 

在這一點上,cert握着你的葉證書。

+0

感謝您的建議。「驗證類型」表示在URL上實現了SSL的驗證類型,包括標準驗證或擴展驗證。在這裏,我使用了「第11章示例代碼」中給出的代碼,但是當我嘗試構建應用程序時,出現編譯時錯誤a - >架構i386的未定義符號: 「_SecPolicyCreateBasicX509」,引用來自: _RNSecTrustEvaluateAsX509 ConnectionViewController.o,「_SecCertificateNotValidAfter」,引用來自: - ConnectionViewController.o中的[ConnectionViewController connection:willSendRequestForAuthenticationChallenge:] – iLearner 2012-02-24 11:40:51

+2

您需要鏈接Security.framework。 – 2012-02-24 14:57:51