2012-05-01 56 views
2

下面的代碼返回退出碼58PHP - 使用cURL訪問HTTPS(SSL)保護的網站

沒有捲曲文檔: CURLE_SSL_CERTPROBLEM(58) 與本地客戶端證書有問題。

// create a new CURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, $URL); 
curl_setopt($ch, CURLOPT_HEADER, false); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, true); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

curl_setopt($ch, CURLOPT_SSLCERT, getcwd() . $CERT); 
curl_setopt($ch, CURLOPT_SSLCERTPASSWD,"XXXXX"); 

curl_setopt($ch, CURLOPT_SSLVERSION, 3); 

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content Type: text/xml', 
    'User-Agent: XXXXX', 
    'User-Name: XXXXX' 
)); 

$RESPONSE = curl_exec($ch); 

var_dump($RESPONSE); 

// close CURL resource, and free up system resources 
curl_close($ch); 

有什麼我失蹤了嗎?

回答

4

確保getcwd() . $CERT中的文件存在並且是有效的PEM證書。如果它似乎確定,設置以下選項,以獲得更多的SSL證書的詳細信息輸出到STDERR:

curl_setopt($ch, CURLOPT_CERTINFO, true); 

注意,如果CURLOPT_VERBOSE設置爲true,你已經有這個設置只具有效力。

+0

謝謝Kaivosukeltaja!這實際上是服務器上的證書路徑的一個愚蠢的問題! – Ren

+0

沒問題,任!如果其中任何一個答案被證明有用,請不要忘記將它們註冊並/或標記爲已接受。 :) – Kaivosukeltaja

0

問題與本地客戶端證書

嗯有點模糊。似乎意味着Curl不像證書,而不是遠程系統不喜歡它。它是否是PEM格式?公鑰和私鑰在證書中?可以通過Web服務器讀取?

+0

是的,我同意我希望它可以更具體。它採用PEM格式。此外,通過CLI訪問它沒有問題(curl -v -k --cert xxx.pem --pass xxx https:// xxx),所以它不應該是證書的問題?這似乎是我在PHP中使用它的一個問題。 – Ren