2014-11-24 18 views
5

我試圖連接到使用捲曲遠程主機。連接需要使用密碼保護的證書和私鑰。到目前爲止,我不成功下面這段代碼:捲曲使用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)); 

我一直得到的結果是錯誤58unable to set private key file: '/home/.../domains/.../public_html/auth/key.pem' type PEM

事情我試過到目前爲止:

我很確定問題在於我的配置,但我不確定在哪裏尋找。

+0

「*切換key.pem *中內容的順序」。您的'key.pem'文件(包含私鑰)應該只包含1個PEM編碼的部分(用於私鑰)。這是您可能需要更改的證書文件的順序。這個私鑰的客戶端證書應該在頂部。 – Bruno 2014-11-24 10:51:34

回答

10

我已經解決了這個問題。我認爲,由於關於這個問題和不同解決方案數量的問題數量衆多,其他人將從解決方案中受益。這裏所說:

我用openssl CLI程序中.P12密鑰文件轉換成的.pem密鑰文件。訣竅是轉換髮生的方式。

首先,我用這個命令轉換它,我有問題,如問題描述:

openssl pkcs12 -in key.p12 -out key.pem -nodes -clcerts

雖然下面的命令做了實際招:

openssl pkcs12 -in key.p12 -out key.pem -clcerts

對於更多信息,請參閱我使用的源:https://community.qualys.com/docs/DOC-3273

+2

'-nodes'刪除密鑰上的加密,這可能與您在此情況下嘗試使用密碼相沖突。 – Bruno 2014-11-24 12:48:11

+0

感謝您的其他信息。我沒有意識到這一點。 – Ben 2014-11-25 08:44:45

0

剛如果這對其他人搜索這個問題很有用,我最終發現CURLOPT_SSLCERT和CURLOPT_SSLKEY似乎不適用於相對路徑。

這是WAMP,在Windows PHP版本5.5。

相關問題