我正在尝试创建一个代理服务器,我将使用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,因为我知道这会绕过验证。我需要服务器在连接之前进行验证。
谢谢!
答案 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。