Ошибка сертификата PHP - SSL: не удается получить сертификат локального издателя
Я запускаю PHP версии 5.6.3 как часть XAMPP на Windows 7.
когда я пытаюсь использовать API Mandrill, я получаю следующую ошибку:
Неперехваченное исключение "Mandrill_HttpError" с сообщением "вызов API для сообщений / отправки-ошибка шаблона: проблема с сертификатом SSL: невозможно получить сертификат локального эмитента"
Я уже пробовал все, что я читал на StackOverflow, включая добавление следующего в php.ini файл:
curl.cainfo = "C:xamppphpcacert.pem"
и конечно же скачал в это место cacert.PEM файл из http://curl.haxx.se/docs/caextract.html
но после всего этого, перезапустил XAMPP и Apache server, но по-прежнему получает ту же ошибку.
Я действительно не знаю, что еще попробовать.
может кто посоветует на что еще я могу попробовать?
11 ответов:
наконец-то получил эту работу!
скачать пакет сертификат.
положите его куда-нибудь. В моем случае, это было
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.
отказ от ответственности: этот код делает ваш сервер неуверенно.
у меня была такая же проблема в Mandrill.php файл после строки номер 65, где он говорит $this - >ch = curl_init ();
добавить следующие две строки:
curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);это решило мою проблему, а также отправило электронное письмо с помощью localhost, но я предлагаю не использовать его в живой версии live. На вашем реальном сервере код должен работать без этого кода.
Спасибо @Mladen Janjetovic,
ваше предложение работало для меня в mac с установленным ampps.
скопировать:http://curl.haxx.se/ca/cacert.pem
To:
/Applications/AMPPS/extra/etc/openssl/certs/cacert.pemи обновляется!--4--> С этим путем и перезапустить 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": Же вамп.
[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.
при просмотре http://curl.haxx.se/docs/caextract.html Страница, вы заметите большими буквами раздел под названием:
RSA-1024 удалено
прочитайте его, затем загрузите версию сертификатов, которая включает сертификаты 'RSA-1024'. https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt
Они будут работать с Мандрилом.
отключение SSL-это плохая идея.
вышеуказанные шаги, хотя и полезны, не работали для меня в Windows 8. Я не знаю взаимосвязи, но следующие шаги работали. В основном изменение в cacert.файл PEM. Надеюсь, это кому-то поможет.
- скачать cacert.PEM файл отсюда: http://curl.haxx.se/docs/caextract.html
- сохраните файл в папке установки PHP. (например: при использовании xampp-сохраните его в c:\Installation_Dir\xampp\php\cacert.УГР.)
- откройте php.ini файл и добавить эти строки:
- curl.cainfo="C:\Installation_Dir\xampp\php\cacert.УГР" openssl.cafile="C:\Installation_Dir\xampp\php\cacert.Пем"
- перезапустите сервер Apache, и это должно исправить его (просто остановите и запустите услуги по мере необходимости).
Я нашел новое решение без какой-либо необходимой сертификации для вызова curl только добавить две строки кода.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
разработка вышеуказанных ответов для развертывания сервера.
$hostname = gethostname(); if($hostname=="mydevpc") { curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); }должны сделать трюк для среды разработки без ущерба для сервера при развертывании.
Если у вас нет доступа к php.ini, добавив этот код (после
$ch = curl_init();line) работает для меня:$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.ЭЛТ и сохраните его в месте, которое вы указали в
$certificate_location.
у меня была такая же проблема при создании моего приложения в 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
Если ни одно из приведенных выше решений не работает, попробуйте обновить установку XAMPP до более новой версии.
я запускал XAMPP с php 5.5.11, тот же самый точный код не работал, я обновился до XAMPP с php 5.6.28 и решения выше работали.
кроме того, только обновление PHP не работает либо похоже на комбинацию настроек apache и php в этой версии XAMPP.
надеюсь, что это поможет кому-то.
Если вы знаете, от самого xampp уже поставляют источник, смотрите и делайте это учебник
Comments