2010-11-19 131 views
2

我在使用SSL連接到服務器時遇到問題。我正在使用ASIHTTPRequest。使用自簽名SSL證書連接到HTTPS

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:@"https://server:port"]]; 
//[request setValidatesSecureCertificate:NO]; 
[request setRequestMethod:@"POST"]; 
[request setTimeOutSeconds:10]; 

[request addRequestHeader:@"Host" value:@"server:port"];  
[request addRequestHeader:@"Content-Type" value:@"text/json; charset=utf-8"]; 

上面給出了「發生連接失敗:SSL問題(可能是壞/過期/自簽名證書)」。如果我取消註釋該行[request setValidatesSecureCertificate:NO];我得到404.

我知道,在開發環境中,服務器使用自簽名證書,在生產服務器上,證書由「thawte」簽名。

所以我通過電子郵件將證書發送給自己,在我的設備上點擊使用郵件應用程序的附件 - 它將我重定向到設置並安裝了證書。當然,因爲它是自簽名的,它告訴我證書不可信,但它是證書唯一的問題,它沒有過期等。

現在我採用同樣的方法,我再次收到「連接故障發生:SSL問題(可能是一個壞/到期/自簽名證書)」或404

我還添加了證書,我的項目,加上下面幾行:

NSData* certData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"cert" ofType:@"cer"]]; 

SecCertificateRef cert = SecCertificateCreateWithData(NULL, (CFDataRef)certData); 
[request setClientCertificates:[NSArray arrayWithObject:(id)cert]]; 

,但它不什麼都不會改變。

我錯過了什麼嗎?

回答

0

我會使用類似Firefox的REST客戶端插件來從瀏覽器執行相同的POST。查看網站真正返回的內容。它可能只是404是服務器對指定URL的正確響應,而無效證書只是阻止SSL協商完成,因此您從不會看到錯誤。

+0

你能推薦任何好的?其中一些人表示他們不會在Firefox 4.0b7上工作。順便說一句,我敢肯定,API使用http和https完全相同。 – 2010-11-21 08:43:51

+0

由於兼容性問題,我還沒有升級到FF 4,所以我不知道'REST Client'是否可以使用它。插件的名稱是'REST Client'。我最近認爲,在開發中使用自簽名證書實際上是浪費金錢。在我使用自簽名證書工作的每個項目上,花費數小時的開發人員時間解決與他們有關的問題。我現在向我的客戶推薦他們只是花幾百美元購買真正的證書,併爲開發人員消除了另一個障礙。 – 2010-11-22 03:06:01

+0

如果你有證書的私鑰,你可能會自己簽名,我相信你可以配置WireShark來解密SSL流量。這可以幫助您確切瞭解您的連接上發生了什麼。 – 2010-11-22 03:09:16