【发布时间】:2014-11-18 08:13:22
【问题描述】:
我收到此错误: 致命错误:Curl 失败并出现错误 #58:无法使用客户端证书(未找到密钥或密码错误?)
我有一个从 .p12 文件中提取证书信息的脚本。我认为这是开始的问题,但是我用它来粘贴我生成的 .pem 文件的内容: https://www.sslshopper.com/certificate-decoder.html 它解码/看到一切都很好。所以我认为 .pem 没问题。
$ch = curl_init();
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// converting
$response = curl_exec($ch);
// converting
$response1 = str_replace("<soap:Body>","",$response);
$response2 = str_replace("</soap:Body>","",$response1);
if($response === false){
throw new Exception(curl_error($ch), curl_errno($ch));
}
pem 文件是这样的:
-----BEGIN CERTIFICATE-----
<cert bla bla>
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
<key bla bla>
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
<cert bla bla>
-----END CERTIFICATE-----–
欢迎提出任何建议。
谢谢
【问题讨论】:
-
我认为您还需要提供 SSL 密钥;不过,也许您可能想尝试改用
CURLOPT_CAINFO。 -
独立于您的具体问题,使用
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0)和curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0)是generally a bad idea。 -
将从 .p12 文件中解码的内容粘贴到远程网站也是一个坏主意,如果这也包含您的私钥的话。
-
您的提取脚本是否生成了
-----BEGIN PRIVATE KEY-----或只是-----BEGIN CERTIFICATE-----的内容? -
-----BEGIN CERTIFICATE-----
-----END CERTIFICATE----- -----BEGIN PRIVATE KEY----- -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -----END CERTIFICATE-----