PHP - 使用cURL访问受HTTPS(SSL)保护的站点

时间:2012-05-01 08:36:28

标签: php ssl curl https

以下代码返回退出代码58。

来自cURL文档: 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);

我有什么遗失的吗?

2 个答案:

答案 0 :(得分:4)

确保getcwd() . $CERT中的文件存在并且是有效的PEM证书。如果看起来没问题,请设置以下选项以获得更多SSL认证详细信息输出到STDERR:

curl_setopt($ch, CURLOPT_CERTINFO, true);

请注意,此设置仅在CURLOPT_VERBOSE设置为true时才有效。

答案 1 :(得分:0)

  

本地客户端证书的问题

嗯有点模糊。似乎意味着Curl不喜欢证书,而不是远程系统不喜欢它。它是PEM格式吗?证书中的公钥和私钥?可以通过webserver uid阅读吗?