2011-10-23 169 views
2

我想用https發送一個非常簡單的ASIHTTPRequest。雖然我已經設置了validatesSecureCertificate標誌爲「NO」,我還是得到了我的請求,一個奇怪的反應:ASIHTTPRequest https請求&SSL

A connection failure occurred: SSL problem (Possible causes may include a bad/expired/self-signed certificate, clock set to wrong date) 

我使用的是非常簡單的,我刪除出於安全原因,實際參數代碼:

NSURL *url = [NSURL URLWithString:@"https://secured.cet.ac.il/KotarServices/getMyBooks.aspx?username=xxxxxxxx&password=xxxxx&packageid=x"]; 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDidFailSelector:@selector(getMyBooksFailedWithError:)]; 
    [request setDidFinishSelector:@selector(getMyBooksFinishedWithResult:)]; 
    [request setDelegate:self]; 
    [request setValidatesSecureCertificate:NO]; 
    [request startAsynchronous]; 

深入研究代碼,我發現請求在「-9807」錯誤代碼上失敗,該代碼僅與操作系統相關,與我正在與之交互的服務器無關(SecureTransport.h將其映射爲「無效證書鏈」)。任何想法如何克服這個問題?提前致謝。

回答

8

我記得我有一個GoDaddy證書的類似問題,並且必須在if(![self validatesSecureCertificate])內的註釋「處理SSL證書設置」下面的ASIHTTPRequest.m中進行以下更改, 1160:

[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsAnyRoot];

+0

謝謝,我明天會嘗試這個第一件事,並讓你知道它是否有幫助 – Stavash

+0

不幸的是,這並不能解決問題。仍然得到相同的錯誤代碼。無論如何努力 – Stavash

+0

更新:我解決了這個問題,通過設置[sslProperties setObject:(NSString *)kCFBooleanTrue forKey:(NSString *)kCFStreamSSLAllowsExpiredRoots],你確實指出了我在正確的方向 - 謝謝! – Stavash

1

我用今天剛買的GoDaddy證書遇到了這個問題。對trydis的解決方案的一個更正:我想你想在if(![self validatesSecureCertificate])之外,因爲你實際上想要驗證證書。正如評論所說,if子句中的內容「告訴CFNetwork不要驗證SSL證書」。 TBH,我不知道爲什麼GoDaddy證書被客戶端解釋爲根證書,這是首先需要進行這種更改的必要條件。