Код ошибки PHP cURL 60


85

При попытке настроить среду php в Windows (используя wamp) для использования Amazon PHP SDK, когда я пытаюсь запустить образец теста, я получаю следующую ошибку:

Fatal error: Uncaught exception 'cURL_Exception' with message 'cURL resource: Resource id #10; cURL error: SSL certificate problem: unable to get local issuer certificate (cURL error code 60). See http://curl.haxx.se/libcurl/c/libcurl-errors.html for an explanation of error codes.' in C:\wamp\www\AWSSDKforPHP\lib\requestcore\requestcore.class.php on line 848

Я уже добавил в свой php.ini следующую строку

curl.cainfo = C:\Windows\ca-bundle.crt

это расположение сертификата, который я создал с помощью этого сценария VBS VBS-Script

Я также перезапустил свою службу WAMP.

Ссылка на индекс PHP curl


6
Если вас не волнует процесс сертификации, вы можете вообще отключить его curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);
denispyr

Это решило проблему для меня - stackoverflow.com/a/32095378/178163 В принципе может быть 2 файла php.ini
Джордж Каган

2
Для тех, кто сталкивается с этой проблемой впервые, как и я, причина этого, насколько я понимаю (поправьте меня, если я ошибаюсь), заключается в том, что в отличие от ситуации с HTTPS-соединением через браузер, запрос CURL не получает сертификат от сервера. Итак, нам нужно вручную загрузить сертификат сайта и добавить его в файл PHP ini. Эта проверка сертификата на стороне клиента является частью процесса HTTPS-соединения, и кажется, что ее можно обойти. Вот где curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);появляется картина.
Сандипан Натх,

сработал оберег !!!! Благодарность!
Родриго Серзеделло

Ответы:


226

Используйте этот комплект корневого сертификата сертификата:

https://curl.haxx.se/ca/cacert.pem

Скопируйте этот комплект сертификатов на свой диск. И используйте это наphp.ini

curl.cainfo = "path_to_cert\cacert.pem"

10
А если это не решит проблему? Я установил curl_setopt($ch, CURLOPT_CAINFO, ini_get('curl.cainfo'));и в php.ini [cURL] curl.cainfo = C:\dev\xampp\php\cacert.pem . Файл есть, но я все еще получаю сообщение об ошибке 60. Что-то не хватает?
Overflowh

3
@Overflowh бывает двух типов php.ini: один для php-cli, второй для php-web (apache, nginx, ...). Вам нужно установить curl.cainfo = "path_to_cert\cacert.pem"для Интернета. С другой стороны, если вы видите curl.cainfoистинное значение в вашем информационном представлении php, на этот раз может быть проблема с разрешением.
Hüseyin BABAL

Ну, на самом деле я не вижу curl.cainfoв своей информации о php. Означает ли это, что я поместил значение не в тот файл?
Overflowh

1
Да, пожалуйста, дважды проверьте расположение файла php.ini. Вы должны поместить это в веб-версию
Хусейн БАБАЛ

Я добавил в apache php.ini, но это не сработало
касим бадами

31

я исправил это, изменив php.iniфайл вC:\wamp\bin\apache\apache2.4.9\bin\

curl.cainfo = "C:/wamp/bin/php/php5.5.12/cacert.pem"

сначала я пытался изменить php.iniфайл, C:\wamp\bin\php\php5.5.12\но это не сработало.

надеюсь, что это поможет кому-то, кто ищет право php.iniизменять


1
Спасибо. Все, что потребовалось, это загрузить файл с curl.haxx.se/ca/cacert.pem и установить путь к нему в файле apache php.ini, как вы сказали. Имейте в виду, люди, вы можете разместить cacert где угодно, просто убедитесь, что вы правильно указали путь. Кроме того, не забудьте убрать точку с запятой!
Дэн Зузевич 05

1
После этого не забудьте перезагрузить apache.
hcker2000

17
php --ini

Это сообщит вам, какой именно файл php.ini загружается, чтобы вы знали, какой из них нужно изменить. Я потратил много времени на изменение неправильного файла php.ini, потому что у меня были установлены WAMP и XAMPP.

Кроме того, не забудьте перезапустить сервер WAMP (или что-то еще, что вы используете) после изменения php.ini.


1
спасатель жизни! 3 проклятых дня устранения неполадок, и это оказывается проблемой
suo

13

@Overflowh Я тоже безуспешно пробовал ответить на этот вопрос. Я изменил версию php с 5.3.24 на 5.5.8, так как этот параметр будет работать только в php 5.3.7 и выше. Затем я нашел этот http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue. Я загрузил оттуда cacert.pem и заменил тот, который я загрузил / сделал из curl.hxxx.se по ссылке выше, и все начало работать. Я пытался получить IPN песочницы PayPal для проверки. С радостью сообщаю, что после замены .pem все в порядке, используя параметр curl.cainfo в php.ini, которого все еще не было в 5.3.24.


2
Я столкнулся с той же проблемой и был исправлен, просто загрузив вышеупомянутую форму файла .pem. Спасибо
saqibahmad

4
Ха-ха, я не могу в это поверить! У меня есть FLWebsites.biz, и я наткнулся на этот пост, совершенно не подозревая, что меня упомянули ... Я написал этот блог!
HTMLGuy

Я пытался разобраться в проблеме, и через 3-4 часа я наконец наткнулся на этот ответ. Я сказал: ну, почему бы не попробовать еще раз файл PEM. И сюрприз: наконец-то это сработало. Спасибо, что нашли этот блог :)
Саулейл

Это решило мою проблему cacert.pem под Windows 10, IIS. Спасибо.
jacouh

3
Извините, я отключил свой сайт. Перейти непосредственно к источнику: curl.haxx.se/docs/caextract.html
HTMLGuy

8

@ Hüseyin BABAL

Я получаю сообщение об ошибке с вышеуказанным сертификатом, но я пробую этот сертификат и его работу.

https://gist.github.com/VersatilityWerks/5719158/download


ВАУ. Это безумие. Я искал способ установить cacert.pem глобально и наткнулся на это. Я ЕСМЬ Универсальность Работает, ха-ха. Вы использовали мою суть.
HTMLGuy

5

Во-первых, нам нужно загрузить этот комплект корневых сертификатов:

https://curl.haxx.se/ca/cacert.pem

Переместите этот файл куда-нибудь, например, в папку PHP в папке Wamp / Xampp.

Затем отредактируйте свой "php.ini":

curl.cainfo = "C: /path/to/your/cacert.pem"

а также

openssl.cafile = "C: /path/to/your/cacert.pem"

ВАЖНЫЙ:

Убедитесь, что вы открываете файл "php.ini" непосредственно в проводнике Windows. (в моем случае: «C: \ DevPrograms \ wamp64 \ bin \ php \ php5.6.25 \ php.ini»).

Не используйте ярлык для «php.ini» в меню значка Wamp / Xampp на панели задач. Этот ярлык не работал в некоторых случаях, с которыми я сталкивался.

После сохранения "php.ini" вам не нужно "перезапускать все службы" в значке Wamp или закрывать / повторно открывать CMD.

Попробуйте с помощью «var_dump (openssl_get_cert_locations ());» и посмотрите на строку: [«ini_cafile»] => string (40) «C: /path/to/your/cacert.pem»

Выполнено.


Ваша заметка об открытии файла php.ini через проводник действительно сработала! И я наконец понял, что у php.ini из значка wamp другой путь. Спасибо!!!
Доктиджер

3

Проблема устранена, загрузите https://curl.haxx.se/ca/cacert.pem и поместите его «где-нибудь» и добавьте эту строку в php.ini:

curl.cainfo = "C:/somewhere/cacert.pem"

PS: Я получил эту ошибку, пытаясь установить модуль на drupal с помощью xampp.


3

Самое простое решение проблемы - добавить в поле следующую команду.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

Для этого не нужно будет добавлять сертификат или что-то еще.


2

Добавьте ниже в php.ini [используйте '/' вместо '\' в пути] curl.cainfo = "path / cacert.pem"

Перезагрузил мой XAMPP. У меня все сработало. Благодарность



1

Сначала вам нужно скачать сертификат по этой ссылке

https://curl.haxx.se/ca/cacert.pem

и поместите его в нужное место. Имя загружаемого файла: cacert.pem. В моем случае я помещу его в папку C: \ wamp64 \ bin \ php \ cacert.pem

Затем вы должны указать расположение файла php.ini

Например, я использую php 7, файл php.ini находится по адресу: C: \ wamp64 \ bin \ php \ php7.0.10 \ php.ini

Итак, войдите в этот файл и отмените фиксацию этой строки; openssl.cafile

также обновите его, чтобы он выглядел так: openssl.cafile = "C: \ wamp64 \ bin \ php \ cacert.pem"

Наконец, перезапустите сервер Apache и все


1

ВАЖНО : после 4 часов работы с laravel 5.7 и php 7. + и запуска / использования php artison serve на локальном хосте, пытаясь подключиться к mailgun.

ВАЖНО Для решения проблемы не работайте с ip http://127.0.0.1:8000 используйте localhost или установите имя домена по файлу хоста

в порядке ,


0

Решение - отредактировать файл php.ini, расположенный в вашей версии php (для меня это php7.0.10), а не php.ini apache. Вы найдете такой закомментированный файл: curl.cainfo Просто измените эту строку, как это curl.cainfo = "C: \ permCertificate \ cacert.pem"

Не забудьте создать каталог «permCertificate» и скопировать в него файл «cacert.pem».


У меня работает в Ampps, спасибо
Алехандро Аранда

-1

Просто чтобы вы знали, что сработало для меня, файл на https://curl.haxx.se/ca/cacert .... не работал, однако тот, который находится в zip-папке в сообщении по адресу ( http: // flwebsites .biz / posts / how-fix-curl-error-60-ssl-issue ) работал у меня без каких-либо проблем.

Как говорили другие, скопируйте файл сертификата в место на жестком диске, обновите строку

;curl.cainfo 

в вашем файле php.ini, чтобы прочитать

curl.cainfo= "path_to_cert\cacert.pem"

Перезагрузите сервер Apache.


Связанный веб-сайт является спамом.
Рик Кукиела
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.