2009-10-16 92 views
4

我有一個應用程序,通過http連接罰款。在嘗試https時,我收到錯誤消息,說明根證書不受信任。我找到了我的站點證書,CA證書和CA的根證書的URL,並通過Safari將它們添加到了手機中。現在,當我進入首選項 - >常規 - >配置文件時,我可以看到我的所有證書都鏈接上了。每個證書上都有一個紅色的未簽名標籤。仍然當我連接我得到NSURLErrorServerCertificateUntrusted錯誤。我試圖找出接下來要去的地方。HTTPS與NSURLConnection - NSURLErrorServerCertificateUntrusted

任何幫助將是偉大的。唯一可能影響到這件事的是,我連接到一個奇怪的港口。所以我的網址是www.domain.com:port。端口號是否創建證書 - 域名不匹配?

現在我已經使用iPhone配置實用程序向手機添加配置文件。它有我的根證書,ca證書和站點證書。手機上的配置文件表示已通過驗證。在細節我可以看到我的三個證書。但是當我嘗試連接時,仍然收到不可信證書錯誤。有什麼建議麼?

只是想看看是否有其他人可以幫助嗎?

回答

10

在NSURLConnection加載期間,有一個受支持的API用於忽略錯誤的證書。要做到這一點,只需添加這樣的事情你NSURLConnection的委託:

- (BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { 
    return [protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { 
    if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust]) 
    if (... user allows connection despite bad certificate ...) 
     [challenge.sender useCredential:[NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust] forAuthenticationChallenge:challenge]; 

    [challenge.sender continueWithoutCredentialForAuthenticationChallenge:challenge]; 
} 

注意連接:didReceiveAuthenticationChallenge:以後可以發送其消息challenge.sender(多),如果有必要提出一個對話框,給用戶之後等

+1

你怎麼知道什麼對話框提出?似乎你可以在這裏得到NSURLErrorServerCertificateUntrusted之外的原因(比如NSURLErrorServerCertificateHasBadDate,我認爲這意味着它已經過期)。 –

+0

我們可以使用超級卡西尼的上述方法嗎?現在我正在使用IIS並將以上方法用於不可信證書,但對於某些特殊情況,我還必須考慮超卡西尼。 – Pooja