Я пытаюсь отправить запрос curl с моим правильным APP_ID, APP_SECRET и т. Д. На
https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI
Мне нужно получить от него access_token, но получить ЛОЖЬ и в curl_error()
противном случае распечатать следующее сообщение:
60: SSL certificate problem: self signed certificate in certificate chain
Мой код:
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
if ( ! $output) {
print curl_errno($ch) .': '. curl_error($ch);
}
// close curl resource to free up system resources
curl_close($ch);
return $output;
Когда я вручную перехожу к ссылке выше, я хорошо получаю access_token. Почему с curl не работает? Помоги пожалуйста.
.crt
продлением? Но я не знаю, как его достатьОтветы:
Ответы с предложением отключить
CURLOPT_SSL_VERIFYPEER
не следует. Возникает вопрос: «Почему это не работает с cURL», и, как правильно указал Мартин Холс, это опасно.Ошибка, вероятно, вызвана отсутствием обновленного пакета корневых сертификатов ЦС. Обычно это текстовый файл с набором криптографических подписей, которые curl использует для проверки SSL-сертификата хоста.
Вам необходимо убедиться, что в вашей установке PHP есть один из этих файлов и что он обновлен (в противном случае загрузите его здесь: http://curl.haxx.se/docs/caextract.html ).
Затем установите в php.ini :
Если вы устанавливаете его во время выполнения, используйте:
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
источник
Этот обходной путь опасен и не рекомендуется :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Отключать одноранговую проверку SSL - не лучшая идея. Это может сделать ваши запросы уязвимыми для злоумышленников MITM.
Фактически, вам просто нужен обновленный комплект корневых сертификатов CA. Установить обновленное так же просто, как:
Скачивание актуального
cacert.pem
файла с сайта cURL иУстановка пути к нему в файле php.ini, например, в Windows:
curl.cainfo=c:\php\cacert.pem
Это оно!
Оставайтесь в безопасности.
источник
php.ini
файла:curl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
Если сертификаты SSL не установлены в вашей системе должным образом, вы можете получить такую ошибку:
Вы можете решить эту проблему следующим образом:
Загрузите файл с обновленным списком сертификатов с https://curl.haxx.se/ca/cacert.pem
Переместите загруженный
cacert.pem
файл в безопасное место в вашей системе.Обновите свой
php.ini
файл и настройте путь к этому файлу:источник
openssl.cafile="C:/dev/ssl/mywebsite.local.crt"
в php.iniВажно: эта проблема сводила меня с ума на пару дней, и я не мог понять, что происходит с моими установками curl и openssl. Я наконец понял, что это мой промежуточный сертификат (в моем случае GoDaddy), который устарел. Я вернулся в свою административную панель godaddy SSL, загрузил новый промежуточный сертификат, и проблема исчезла.
Я уверен, что это проблема для некоторых из вас.
Очевидно, GoDaddy в какой-то момент изменил свой промежуточный сертификат из-за проблем с безопасностью, поскольку теперь они отображают это предупреждение:
«Обязательно используйте новые промежуточные сертификаты SHA-2, включенные в загруженный пакет».
Надеюсь, это поможет некоторым из вас, потому что я сходил с ума, и это устранило проблему на ВСЕХ моих серверах.
источник
Solution: curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
источник