我試圖連接到使用捲曲遠程主機。連接需要使用密碼保護的證書和私鑰。到目前爲止,我不成功下面這段代碼:捲曲使用SSL證書失敗:錯誤58無法設置專用密鑰文件
<?php
$wsdl = 'https://domain.com/?wsdl';
$certFile = getcwd() . '/auth/cert.pem';
$keyFile = getcwd() . '/auth/key.pem';
$password = 'pwd';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $wsdl);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $password);
curl_setopt($ch, CURLOPT_SSLKEY, $keyFile);
#curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
#curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
#curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$output = curl_exec($ch);
var_dump(curl_errno($ch));
var_dump(curl_error($ch));
我一直得到的結果是錯誤58
:unable to set private key file: '/home/.../domains/.../public_html/auth/key.pem' type PEM
。
事情我試過到目前爲止:
- 檢查密鑰文件可讀如下建議:Unable to use libcurl to access a site requiring client authentication。試圖通過
openssl_private_key()
傳遞文件給了我一個資源,而不是布爾值。所以這看起來不錯。 - 開關在key.pem文件內容的順序如下建議:Unable to use libcurl to access a site requiring client authentication。到目前爲止沒有運氣。
- 玩過其他一些選項,如
SLL_VERIFY_PEER
,SSL_VERIFY_HOST
,SSL_CERTTYPE
以及其他選項,這些選項對於官方PHP文檔來說似乎微不足道。到目前爲止沒有運氣。
我很確定問題在於我的配置,但我不確定在哪裏尋找。
「*切換key.pem *中內容的順序」。您的'key.pem'文件(包含私鑰)應該只包含1個PEM編碼的部分(用於私鑰)。這是您可能需要更改的證書文件的順序。這個私鑰的客戶端證書應該在頂部。 – Bruno 2014-11-24 10:51:34