2010-08-07 54 views
4

前幾天我發現了ASIHTTPRequest,現在我被阻塞了。 我想通過https地址驗證我的自我(https://user:[email protected]/0.1/userCom/?apikey=12432ASIHTTPRequest身份驗證

我試試這個代碼:

NSURL *url = [NSURL URLWithString:@"https://api.domain.com/0.1/userCom/?apikey=12432"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request setDelegate:self]; 
[request setUsername:@"myUserName"]; 
[request setPassword:@"myPassword"]; 
[request startAsynchronous]; 

而且我已經實現了委託方法

-(void)requestFailed:(ASIHTTPRequest *)request 
{ 
NSError *error = [request error]; 
NSLog(@"Failed %@ with code %d and with userInfo %@",[error domain],[error code],[error userInfo]); 
} 

-(void)requestFinished:(ASIHTTPRequest *)request 
{ 
NSLog(@"Finished : %@",[request responseString]); 
} 

當我啓動我的應用程序直接調用requestFailed方法,並且我收到以下消息:

Failed ASIHTTPRequestErrorDomain with code 1 and with userInfo { 
NSLocalizedDescription = "A connection failure occurred: SSL problem (possibly a bad/expired/self-signed certificate)"; 
NSUnderlyingError = "Error Domain=NSOSStatusErrorDomain Code=-9807 \"The operation couldn\U2019t be completed. (OSStatus error -9807.)\" UserInfo=0x680fbf0 {}";

有想法解決這個問題嗎? 非常感謝!

回答

7

有兩種可能的方法:

一)固定如果可能的話你/在服務器上的證書。 (或者您有可能使用錯誤的主機名進行連接的機會很小?在設備上使用Safari時是否出現相同的錯誤?)

這絕對是正確和首選的方法。

或:

II) 禁用證書檢查:

[request setValidatesSecureCertificate:NO]; 

禁用證書檢查是,也許很明顯,不是一個好的長久之計。禁用它會消除https提供的大量安全性,並讓您的應用面向中間人(MITM)攻擊開放。在調試或使用沒有合適證書的測試服務器時,它可能是一個很好的臨時解決方案,但從長遠來看,您應該修復基礎問題,以便服務器的證書有效。

+0

i)這不是我的服務器,所以我會檢查這與我的客戶端:) 如果我嘗試https:// user:[email protected]/0.1/userCom/?apikey = 12432對我Safari Mac沒有問題。 ii)運作良好! 感謝您的幫助。如果你有任何其他的東西要添加,請寫下:) – Pierre 2010-08-07 11:50:00

+0

這可能是你的Mac有一些證書頒發機構提出的iphone沒有,並且缺少證書頒發機構可能導致這種錯誤。如果你在設備上的safari上出現類似的錯誤,那麼這就是問題 - 如果設備上的safari工作正常,那麼它可能是某種asihttprequest錯誤。 – JosephH 2010-08-07 12:49:37

+0

在大多數情況下禁用證書檢查幫助 – knuku 2010-11-23 15:01:25

0

也適用於我,但原因是另一回​​事 - 因爲我的測試設備的日期&時間設置設置爲過去的日期。

證書只在特定的日期範圍內有效,這就是爲什麼應用程序未能使用錯誤的日期設置對其進行驗證的原因。我通過在iPhone上設置正確的日期&來修復它。