it-swarm.com.ru

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

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

Может кто-нибудь посоветовать, что еще можно попробовать?

134
Dor Dadush

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

  1. Загрузите комплект сертификатов .

  2. Положите это где-нибудь. В моем случае это был каталог c:\wamp\ (если вы используете Wamp 64 bit, то это 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.

265
Mladen Janjetovic

Отказ от ответственности: этот код делает ваш сервер небезопасным.

У меня была такая же проблема в файле Mandrill.php после строки № 65, где написано: $ this-> ch = curl_init ();

Добавьте следующие две строки:

curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, 0);

Это решило мою проблему, а также отправило электронное письмо с использованием localhost, но я предлагаю НЕ использовать его в живом варианте. На вашем живом сервере код должен работать без этого кода.

97
Shehzad Nizamani

Спасибо @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"

И применил ту же настройку в установке 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 для локального хоста, шаги на этот пост сработали для меня на Centos 7 / Vagrant / Chrome Browser.

39
Damodar Bashyal

Когда вы просматриваете http://curl.haxx.se/docs/caextract.html страницу, вы заметите большими буквами раздел под названием:

RSA-1024 удален

Прочтите его, а затем загрузите версию сертификатов, которая включает сертификаты «RSA-1024» . https://github.com/bagder/ca-bundle/blob/e9175fec5d0c4d42de24ed6d84a06d504d5e5a09/ca-bundle.crt

Те будут работать с Mandrill.

Отключение SSL - плохая идея.

18
Arturo Alvarado

Вышеуказанные шаги, хотя и полезны, не работали для меня в 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, и это должно это исправить (просто остановите и запустите services по мере необходимости).
10
HopeKing

Я нашел новое решение без какой-либо сертификации для вызова curl только добавить двухстрочный код.

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
7
Manish sharma

Если у вас нет доступа к 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.

6
ban-geoengineering

разрабатывая приведенные выше ответы для развертывания сервера.

$hostname = gethostname();
if($hostname=="mydevpc")
{
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
}

должен выполнить трюк для среды разработки без ущерба для сервера при развертывании.

2
Noel

Если ни одно из приведенных выше решений не работает, попробуйте обновить установку XAMPP до более новой версии.

Я запускал XAMPP с php 5.5.11, точно такой же код не работал, я обновился до XAMPP с php 5.6.28 и вышеприведенные решения работали.

Кроме того, только обновление PHP также не работало, похоже на комбинацию настроек Apache и php в этой версии XAMPP.

Надеюсь, это поможет кому-то.

0
ccrez

Я пробовал это работает

открыть

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;
0
Yuan Libres

У меня очень простое решение этой проблемы. Вы можете сделать это без какого-либо файла сертификата ..

Перейти на Laravel Root Folder -> Vender -> guzzlehttp -> guzzle -> src

open Client.php

найти $ по умолчанию Массив. что выглядит так ...

$defaults = [
    'allow_redirects' => RedirectMiddleware::$defaultSettings,
    'http_errors'     => true,
    'decode_content'  => true,
    'verify'          => true,
    'cookies'         => false
];

Теперь главное задание - изменить значение проверить ключ.

'verify'          => false,

Поэтому после этого он не будет проверять сертификат SSL для запроса CURL ... Это решение работает для меня. Я нахожу это решение после многих исследований ...

0
pankaj

Я получил ошибку как:

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's done.

Надеюсь, что это может помочь кому-то

0
S Debasish Nayak

У меня была такая же проблема при создании моего приложения в AppVeyor.

  • Загрузить https://curl.haxx.se/ca/cacert.pem to c:\php
  • Включить openssl echo extension=php_openssl.dll >> c:\php\php.ini
  • Найдите сертификат echo curl.cainfo=c:\php\cacert.pem >> c:\php\php.ini
0
Facedown