2013-02-18 137 views
4

你好其他程序員,PHP curl出現SSL錯誤

我使用https連接創建了一個API。我想用證書檢查來確保API調用。現在,我已經下載了捲曲cacert.pem和放置在此我的文件夾中,但它不工作,給我這個錯誤:

SSL certificate problem: unable to get local issuer certificate 

好吧我真的很肯定的cacert.pem文件正確定位,但對於你們一些代碼,我已經寫了得到它的工作:

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_POST  ,1); 
curl_setopt($ch, CURLOPT_USERPWD, $this->api_key . ":" . $this->api_secret); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); 
curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . "/cacert.pem"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_POSTFIELDS ,$post_vars); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION ,0); 
curl_setopt($ch,CURLOPT_HTTPHEADER,array('Accept: application/json')); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL 
$data = curl_exec($ch); 

我希望你一些你們有我的問題的答案,因爲我真的不知道很多關於SSL連接。

在此先感謝!

+0

你從哪裏下載了cacert.pem? – 2013-02-18 23:18:37

+0

http://curl.haxx.se/ca/有一個包。絕對路徑:http://curl.haxx.se/ca/cacert.pem – 2013-02-18 23:22:01

+0

這應該工作;你確定這個文件是可讀的嗎? – 2013-02-18 23:26:05

回答

2

在確認您的證書包可以被您正在運行的腳本讀取後,下一步就是調查服務器本身。

如果這是您自己的服務器,很可能是您忘記安裝中間證書,即中間證書,即證書和證書隨附的證書頒發機構之一之間的證書。

如果您正在使用自簽名證書,則cacert.pem應包含要連接的服務器的公共證書;這可以從專用證書生成,概述爲here,被稱爲.crt文件。

+0

我在教程中的第6步。我無法找到虛擬主機文件嗎?你知道這是默認的位置嗎? – 2013-02-19 00:10:35

+0

@PaulOostenrijk這個文件包含所有''塊,假設Apache。 – 2013-02-19 00:15:49

+0

我要檢查虛擬主機st文件在我的託管公司。我現在找不到它..你會得到一個更新! – 2013-02-19 15:50:46