2015-04-06 4 views
0

Я пытаюсь создать прокси-сервер, где я буду запрашивать объект JSON из API с помощью curl. Я смог успешно выполнить эту работу, за исключением сертификации.Загрузил сертификат PEM, но все еще получил «неспособность получить сертификат локального эмитента»

<?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(); 
?> 

Я уже скачал файл PEM сертификации yahooapis (с и без цепи) и помещаю его в том же уровне папки как файл proxy.php, но я все еще получаю ошибку «не удалось получить сертификат местного эмитента ".

Любые идеи о том, что может отсутствовать?

Кроме того, не рекомендуется устанавливать значение CURLOPT_SSL_VERIFYPEER в false, поскольку я знаю, что это обходит проверку. Мне нужно проверить сервер, прежде чем он подключится.

Спасибо!

ответ

0

curl_setopt ($ ч, CURLOPT_CAINFO, getcwd() "\ VeriSignClass3PublicPrimaryCertificationAuthority-G5.crt".);

Я не думаю, что это правильный вариант. Вам нужен G3, а не сертификат G5 с отпечатком 74: 2C: 31: 92: E6: 07: E4: 24: EB: 45: 49: 54: 2B: E1: BB: C5: 3E: 61: 74: E2. Сертификат G5 не будет работать с стеком OpenSSL с настройкой, используемой query.yahooapis.com из-за проблем OpenSSL с альтернативным доверительным путем. Для более подробной информации смотрите http://kriscience.blogspot.de/2013/03/supporting-trusted-but-untrusted.html.

+0

Я загрузил сертификат G3, и отпечаток пальца действительно отличается. У вас есть ссылка на другой публичный API, который я мог бы проверить на наличие этого отпечатка или сертификата? Не имеет значения, какой результат до тех пор, пока это JSON. –

+0

Нет, я не знаю ни одного другого API. –

Смежные вопросы