下载的PEM证书但仍然“无法获得本地颁发者证书”

时间:2015-04-06 06:04:23

标签: php ssl curl

我正在尝试创建一个代理服务器,我将使用curl从API请求一个JSON对象。除了认证之外,我已经成功完成了这项工作。

<?php
error_reporting(E_ALL);

$url = "https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20csv%20where%20url%3D'http%3A%2F%2Ffinance.yahoo.com%2Fd%2Fquotes.csv%3Fs%3DMSFT%2BFFIV%26f%3Dnab'&format=json&diagnostics=true&callback=";

$ch = curl_init($url);

curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, getcwd() . "\VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt");
// Perform the request, and save content to $result
$result = curl_exec($ch);
if(curl_errno($ch)){
echo 'Curl error: ' . curl_error($ch);
} else {
    echo $result;
}
exit();
?>

我已经下载了yahooapis认证PEM文件(有链和无链)并将其放在与proxy.php文件相同的文件夹级别,但我仍然收到错误&#34;无法获得本地发行人证书&#34;。

关于可能遗漏的任何想法?

此外,请不要建议将CURLOPT_SSL_VERIFYPEER设置为false,因为我知道这会绕过验证。我需要服务器在连接之前进行验证。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

curl_setopt($ ch,CURLOPT_CAINFO,getcwd()。&#34; \ VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt&#34;);

我不认为这是正确的。你需要G3而不是带有指纹的G5证书74:2C:31:92:E6:07:E4:24:EB:45:49:54:2B:E1:BB:C5:3E:61:74: E2。由于具有备用信任路径的OpenSSL问题,G5证书不能与具有query.yahooapis.com使用的设置的OpenSSL堆栈一起使用。有关详细信息,请查看http://kriscience.blogspot.de/2013/03/supporting-trusted-but-untrusted.html