Ошибка сертификата SSL – SSL: невозможно получить сертификат локального эмитента

Я использую PHP версии 5.6.3 как часть XAMPP в Windows 7.

Когда я пытаюсь использовать API Mandrill, я получаю следующую ошибку:

Исправлено исключение «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. Загрузите комплект сертификатов .

  2. Поместите его где-нибудь. В моем случае это был каталог c:\wamp64\ (если вы используете бит 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, но я предлагаю НЕ использовать его в живой версии в прямом эфире. На вашем живом сервере код должен работать без этого кода. Этот код делает ваш сервер небезопасным.

Спасибо @Mladen Janjetovic,

Ваше предложение работало для меня на Mac с установленными ampps.

Скопировано: http://curl.haxx.se/ca/cacert.pem

To: /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" и [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 .

Когда вы просматриваете страницу 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.pem).
  • Откройте файл php.ini и добавьте следующие строки:
  • curl.cainfo = "C: \ Installation_Dir \ xampp \ php \ cacert.pem" openssl.cafile = "C: \ Installation_Dir \ xampp \ php \ cacert.pem"
  • Перезагрузите сервер 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(); ) для меня работает:

$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 .

У меня была такая же проблема при создании моего приложения в 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 уже поставляют источник, см. И выполняйте этот учебник