Ошибка сертификата 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, но по-прежнему получает ту же ошибку.



Я действительно не знаю, что еще попробовать.



может кто посоветует на что еще я могу попробовать?

898   11  

11 ответов:

наконец-то получил эту работу!

  1. скачать пакет сертификат.

  2. положите его куда-нибудь. В моем случае, это было c:\wamp\ каталог (если вы используете WAMP 64 бит, то это c:\wamp64\).

  3. включить mod_ssl в Apache и php_openssl.dll на php.ini (раскомментируйте их, удалив ; в начале). Но будьте осторожны, моя проблема была в том, что у меня было два php.ini файлы и мне нужно сделать это в обоих случаях. Один из них вы получаете от вашего значка панели задач WAMP, а другой, в моем случае, в C:\wamp\bin\php\php5.5.12\

  4. добавьте эти строки в свой сертификат в обоих php.ini файлы:

    curl.cainfo="C:/wamp/cacert.pem"
    openssl.cafile="C:/wamp/cacert.pem"
    
  5. перезапустить службы 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

    Ничего не найдено.