Ошибка сертификата SSL - SSL: невозможно получить сертификат локального эмитента
Я запускаю PHP версии 5.6.3 как часть XAMPP в Windows 7.
Когда я пытаюсь использовать Mandrill API, я получаю следующую ошибку:
Не удалось исключить "Mandrill_HttpError" с сообщением "Ошибка вызова API-сообщений/шаблона отправки: проблема сертификата SSL: не удалось получить сертификат локального эмитента"
Я уже пробовал все, что я читал в StackOverflow, включая добавление следующего в файл php.ini:
curl.cainfo = "C:\xampp\php\cacert.pem"
И, конечно же, скачанный в это место файл cacert.pem из http://curl.haxx.se/docs/caextract.html
но после всего этого перезапустили сервер XAMPP и Apache, но все равно получили ту же ошибку.
Я действительно не знаю, что еще попробовать.
Может ли кто-нибудь посоветовать, что еще я могу попробовать?
Ответы
Ответ 1
Наконец-то получил это на работу!
-
Загрузите комплект сертификатов.
-
Положите это где-нибудь. В моем случае это был c:\wamp\
каталога (если вы используете WAMP 64 бит, то это c:\wamp64\
).
-
Включите mod_ssl
в Apache и php_openssl.dll
в php.ini
(раскомментируйте их, удалив ;
в начале). Но будьте осторожны, моя проблема была в том, что у меня было два файла php.ini
и мне нужно сделать это в обоих из них. Одним из них является тот, который вы получаете от значка панели задач WAMP, а другой, в моем случае, в C:\wamp\bin\php\php5.5.12\
-
Добавьте эти строки в ваш сертификат в обоих файлах php.ini
:
curl.cainfo="C:/wamp/cacert.pem"
openssl.cafile="C:/wamp/cacert.pem"
-
Перезапустите сервисы Wamp.
Ответ 2
Отказ от ответственности: этот код делает ваш сервер небезопасным.
У меня была такая же проблема в файле Mandrill.php после строки № 65, где написано $this-> ch = curl_init();
Добавьте следующие две строки:
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);
Это решило мою проблему, а также отправило электронное письмо с использованием localhost, но я предлагаю НЕ использовать его в живом варианте. На вашем живом сервере код должен работать без этого кода.
Ответ 3
Спасибо @Mladen Janjetovic,
Ваше предложение работало для меня на Mac с установленными ampps.
Скопировано: http://curl.haxx.se/ca/cacert.pem
Кому: /Applications/AMPPS/extra/etc/openssl/certs/cacert.pem
И обновил php.ini
с этим путем и перезапустил Apache:
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
openssl.cafile="/Applications/AMPPS/extra/etc/openssl/certs/cacert.pem"
И применил тот же параметр в установке Windows AMPPS, и он отлично работал в нем.
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/Ampps/php/extras/ssl/cacert.pem"
openssl.cafile="C:/Ampps/php/extras/ssl/cacert.pem"
:
То же самое для wamp.
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
openssl.cafile="C:/wamp/bin/php/php5.6.16/extras/ssl/cacert.pem"
Если вы ищете создание нового SSL-сертификата с использованием SAN для localhost, шаги этот пост работали для меня на Centos 7 / Vagrant / Chrome Browser
.
Ответ 4
Когда вы просматриваете страницу http://curl.haxx.se/docs/caextract.html, вы можете заметить большими буквами секцию:
Удаленный RSA-1024
Прочитайте его, затем загрузите версию сертификатов, которая включает сертификаты "RSA-1024".
https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
Те будут работать с Mandrill.
Отключение SSL - плохая идея.
Ответ 5
Вышеупомянутые шаги, хотя и полезны, не работали для меня в Windows 8. Я не знаю отношения, но были предприняты следующие шаги. В основном изменение файла cacert.pem. Надеюсь, это поможет кому-то.
- Загрузите файл cacert.pem отсюда:
http://curl.haxx.se/docs/caextract.html
- Сохраните файл в папке установки PHP. (например: Если вы используете xampp - сохраните его в c:\Installation_Dir\xampp\php\cacert.pem).
- Откройте файл php.ini и добавьте следующие строки:
- curl.cainfo = "C:\Installation_Dir\XAMPP\PHP\cacert.pem"
openssl.cafile = "C:\Installation_Dir\xampp\php\cacert.pem"
- Перезагрузите сервер Apache, и он должен его исправить (просто остановитесь и запустите
услуг по мере необходимости).
Ответ 6
Я нашел новое решение без какой-либо требуемой сертификации, чтобы вызвать curl, только добавьте два строковых кода.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Ответ 7
Если у вас нет доступа к php.ini, добавление этого кода (после вашей $ch = curl_init();
) работает для меня:
$certificate_location = "C:\Program Files (x86)\EasyPHP-Devserver-16.1\ca-bundle.crt"; // modify this line accordingly (may need to be absolute)
curl_setopt($ch, CURLOPT_CAINFO, $certificate_location);
curl_setopt($ch, CURLOPT_CAPATH, $certificate_location);
Затем вам просто нужно скачать ca-bundle.crt и сохранить его в месте, указанном вами в $certificate_location
.
Ответ 8
используя вышеприведенные ответы для развертывания сервера.
$hostname = gethostname();
if($hostname=="mydevpc")
{
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}
должен делать трюк для среды разработки без ущерба для сервера при развертывании.
Ответ 9
У меня была такая же проблема при создании моего приложения в AppVeyor.
- Загрузите https://curl.haxx.se/ca/cacert.pem в
c:\php
- Включить openssl
echo extension=php_openssl.dll >> c:\php\php.ini
- Найти сертификат
echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
Ответ 10
Если ни одно из вышеперечисленных решений не работает, попробуйте обновить установку XAMPP до более новой версии.
Я запускал XAMPP с php 5.5.11, тот же самый точный код не работал, я обновился до XAMPP с php 5.6.28, а вышеописанные решения.
Кроме того, обновление только PHP не сработало или похоже на комбинацию параметров apache и php на этой версии XAMPP.
Надеюсь, что это поможет кому-то.
Ответ 11
Если вы знаете, что сам xampp уже снабжает источник, см. и учебник
Ответ 12
У меня очень простое решение этой проблемы. Вы можете сделать это без какого-либо файла сертификата..
Перейдите на Laravel Root Folder → Vender → guzzlehttp → guzzle → src
открыть Client.php
найти $ по умолчанию Массив. что выглядит так...
$defaults = [
'allow_redirects' => RedirectMiddleware::$defaultSettings,
'http_errors' => true,
'decode_content' => true,
'verify' => true,
'cookies' => false
];
Теперь главное задание - изменить значение ключа подтверждения.
'verify' => false,
Поэтому после этого он не будет проверять сертификат SSL для запроса CURL... Это решение работает для меня. Я нахожу это решение после многих исследований...
Ответ 13
Я пробовал это работает
открыть
vendor\guzzlehttp\guzzle\src\Handler\CurlFactory.php
и измени это
$conf[CURLOPT_SSL_VERIFYHOST] = 2;
'enter code here'$conf[CURLOPT_SSL_VERIFYPEER] = true;
к этому
$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = FALSE;
Ответ 14
Я получил ошибку как:
failed loading cafile stream: 'C:\xamppPhp\apache\bin\curl-ca-bundle.crt'
Я использую машину Windows. Итак, я выполнил следующие шаги.
1. I have downloaded .pem file from " https://curl.haxx.se/docs/caextract.html "
2. Then I kept the downloaded file inside "C:/xamppPhp/apache/bin/" folder and renamed the same downloaded file to "curl-ca-bundle.crt".
3. I restarted XAMPP and cleared the cache.
4. It done.
Надеюсь, что это может помочь кому-то
Ответ 15
для жреты вы можете попробовать это:
$client = new Client(env('API_HOST'));
$client->setSslVerification(false);
проверено на жрет/жрет 3. *