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