Kod błędu PHP cURL 60

85

Podczas próby skonfigurowania środowiska php w systemie Windows (przy użyciu wampa) w celu korzystania z zestawu Amazon PHP SDK, gdy próbuję uruchomić przykładowy test, pojawia się następujący błąd:

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

Dodałem już następujący wiersz do mojego php.ini

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

który jest lokalizacją certyfikatu, który utworzyłem za pomocą tego skryptu VBS VBS-Script

Zrestartowałem również moją usługę WAMP.

Odniesienie do indeksu PHP

Ciaran
źródło
6
Jeśli nie obchodzi Cię proces certyfikacji, możesz go całkowicie wyłączyć curl_setopt($rest, CURLOPT_SSL_VERIFYPEER, false);
denispyr
To rozwiązało problem dla mnie - stackoverflow.com/a/32095378/178163 Zasadniczo mogą istnieć 2 pliki php.ini
George Kagan
2
Dla tych, którzy po raz pierwszy wpadli na ten problem, tak jak ja, przyczyną tego, o ile rozumiem (popraw mnie, jeśli się mylę), jest to, że w przeciwieństwie do sytuacji połączenia HTTPS przez przeglądarkę, żądanie CURL nie pobiera certyfikatu z serwera. Musimy więc ręcznie pobrać certyfikat witryny i dodać go do pliku ini PHP. Ta weryfikacja certyfikatu po stronie klienta jest częścią procesu połączenia HTTPS i wydaje się, że można ją ominąć. W tym miejscu curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);pojawia się obraz.
Sandeepan Nath
działał jak urok !!!! dzięki!
Rodrigo Serzedello

Odpowiedzi:

226

Użyj tego pakietu certyfikatów głównych:

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

Skopiuj ten pakiet certyfikatów na swój dysk. I używaj tego dalejphp.ini

curl.cainfo = "path_to_cert\cacert.pem"
Hüseyin BABAL
źródło
10
A jeśli to nie rozwiąże problemu? Ustawiłem curl_setopt($ch, CURLOPT_CAINFO, ini_get('curl.cainfo'));i w php.ini [cURL] curl.cainfo = C:\dev\xampp\php\cacert.pem . Plik tam jest, ale nadal pojawia się błąd 60. Czy czegoś brakuje?
Overflowh
3
@Overflowh są dwa typy php.ini: jeden dla php-cli drugi dla php-web (apache, nginx, ...). Musisz ustawić curl.cainfo = "path_to_cert\cacert.pem"na stronę internetową. Z drugiej strony, jeśli widzisz, że curl.cainfoto prawda w widoku informacji php, w tym czasie może wystąpić problem z uprawnieniami.
Hüseyin BABAL
Cóż, właściwie nie widzę curl.cainfoinformacji o moim php. Czy to oznacza, że ​​umieściłem wartość w złym pliku?
Overflowh
1
Tak, sprawdź dokładnie lokalizację pliku php.ini. Musisz to umieścić w wersji internetowej
Hüseyin BABAL
Dodałem w apache php.ini, ale to nie zadziałało
kasim badami
31

naprawiłem to, modyfikując php.iniplik wC:\wamp\bin\apache\apache2.4.9\bin\

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

najpierw próbowałem, modyfikując php.iniplik w C:\wamp\bin\php\php5.5.12\i to nie zadziałało.

mam nadzieję, że pomoże to komuś, kto szuka prawa php.inido modyfikacji

aimme
źródło
1
Dzięki. Wystarczyło pobrać plik z curl.haxx.se/ca/cacert.pem i ustawić ścieżkę do niego w pliku apache php.ini, jak powiedziałeś. Proszę, bądźcie świadomi ludzi, możecie umieścić cacert w dowolnym miejscu, po prostu upewnijcie się, że prawidłowo ustawiliście ścieżkę. Upewnij się również, że usunąłeś średnik!
Dan Zuzevich
1
Nie zapomnij po tym ponownie załadować apache.
hcker2000
17
php --ini

Dzięki temu dowiesz się dokładnie, który plik php.ini jest ładowany, więc wiesz, który zmodyfikować. Zmarnowałem dużo czasu, zmieniając zły plik php.ini, ponieważ miałem zainstalowane WAMP i XAMPP.

Nie zapomnij również zrestartować serwera WAMP (lub czegokolwiek, czego używasz) po zmianie php.ini.

Anazul
źródło
1
ratownik! 3 cholerne dni na rozwiązywanie problemów i okazuje się, że to problem
suo
13

@Overflowh Wypróbowałem powyższą odpowiedź również bez powodzenia. Zmieniłem wersję php z 5.3.24 na 5.5.8, ponieważ to ustawienie będzie działać tylko w php 5.3.7 i nowszych. Następnie znalazłem to http://flwebsites.biz/posts/how-fix-curl-error-60-ssl-issue Pobrałem stamtąd cacert.pem i zastąpiłem ten, który pobrałem / utworzyłem z curl.hxxx.se powyżej i wszystko zaczęło działać. Próbowałem uzyskać weryfikację IPN w piaskownicy PayPal. Z przyjemnością mogę powiedzieć, że po wymianie .pem wszystko jest w porządku, używając ustawienia curl.cainfo w php.ini, którego nadal nie było w 5.3.24.

pgkerr76
źródło
2
Napotkałem ten sam problem i naprawiłem go, pobierając wspomniany powyżej formularz pliku .pem. Dzięki
saqibahmad
4
Haha, nie mogę w to uwierzyć! Jestem właścicielem FLWebsites.biz i natknąłem się na ten post zupełnie nieświadomy, że zostałem wspomniany ... Napisałem tego bloga!
HTMLGuy,
Próbowałem rozwiązać problem i po 3-4 godzinach w końcu natknąłem się na tę odpowiedź. Powiedziałem: no cóż, dlaczego nie spróbować jeszcze raz innego pliku pem. I niespodzianka: w końcu zadziałało. Dzięki za znalezienie tego bloga :)
Sauleil
To rozwiązało mój problem z cacert.pem w systemie Windows 10, IIS. Dzięki.
jacouh
3
Przepraszam, wyłączyłem witrynę. Przejdź bezpośrednio do źródła: curl.haxx.se/docs/caextract.html
HTMLGuy,
8

@ Hüseyin BABAL

Otrzymuję błąd z powyższym certyfikatem, ale próbuję ten certyfikat i jego działanie.

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

Gaurang Ghinaiya
źródło
ŁAŁ. To jest szalone. Szukałem sposobu na globalne ustawienie cacert.pem i wpadłem na to. I AM VersatilityWerks haha. Wykorzystałeś moje zdanie.
HTMLGuy
5

Najpierw musimy pobrać ten pakiet certyfikatów głównych:

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

Przenieś ten plik gdzieś, na przykład do folderu PHP w folderze Wamp / Xampp.

Następnie edytuj plik „php.ini”:

curl.cainfo = "C: /ścieżka/do/twoja/cacert.pem"

i

openssl.cafile = "C: / ścieżka/do/twoja/cacert.pem"

WAŻNY:

Upewnij się, że otwierasz plik „php.ini” bezpośrednio w Eksploratorze Windows. (w moim przypadku: „C: \ DevPrograms \ wamp64 \ bin \ php \ php5.6.25 \ php.ini”).

Nie używaj skrótu do „php.ini” w menu ikony Wamp / Xampp w zasobniku systemowym. Ten skrót nie działał w niektórych przypadkach.

Po zapisaniu pliku „php.ini” nie trzeba ponownie uruchamiać wszystkich usług w ikonie Wamp ani zamykać / ponownie otwierać CMD.

Spróbuj z "var_dump (openssl_get_cert_locations ());" i spójrz na wiersz: ["ini_cafile"] => string (40) "C: /path/to/your/cacert.pem"

Gotowe.

Quang Nguyen Tri
źródło
Twoja notatka o otwieraniu pliku php.ini za pomocą eksploratora faktycznie zadziałała! I w końcu doszedłem do wniosku, że php.ini z ikony wampa ma inną ścieżkę. Dziękuję Ci!!!
Doctiger
3

Problem rozwiązany, pobierz https://curl.haxx.se/ca/cacert.pem i umieść go „gdzieś” i dodaj ten wiersz w php.ini:

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

PS: Otrzymałem ten błąd, próbując zainstalować moduł na drupalu za pomocą xampp.

mały Lis
źródło
3

Najłatwiejszym rozwiązaniem problemu jest dodanie w polu poniższego polecenia.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);

Korzystanie z tego nie będzie wymagało dodania żadnego certyfikatu ani niczego.

Arjun Londhey
źródło
2

Dodaj poniższy kod do php.ini [użyj „/” zamiast „\” w ścieżce] curl.cainfo = „path / cacert.pem”

Zrestartowałem mój XAMPP. U mnie to zadziałało. Dzięki

TTS Raja
źródło
1

Najpierw musisz pobrać certyfikat z tego linku

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

i umieść go w miejscu, w którym chcesz, aby nazwa pliku do pobrania to: cacert.pem Więc w moim przypadku umieszczę go pod C: \ wamp64 \ bin \ php \ cacert.pem

Następnie musisz określić lokalizację pliku php.ini

Na przykład używam php 7, plik php.ini znajduje się w: C: \ wamp64 \ bin \ php \ php7.0.10 \ php.ini

Więc uzyskaj dostęp do tego pliku i cofnij zatwierdzenie tej linii; openssl.cafile

zaktualizuj go tak, aby wyglądał następująco openssl.cafile = "C: \ wamp64 \ bin \ php \ cacert.pem"

Na koniec zrestartuj serwer Apache i to wszystko

MUSTAPHA GHLISSI
źródło
1

WAŻNE : po 4 godzinach pracy z laravel 5.7 i php 7. + i uruchom / użyj php artison, serwuj na localhost próbując połączyć się z mailgunem.

WAŻNE, aby rozwiązać problem, nie działa z IP http://127.0.0.1:8000 użyj lokalnego hosta lub ustaw nazwę domeny według pliku hosta

ok ,

lior ben yosef
źródło
0

Rozwiązaniem jest edycja pliku php.ini znajdującego się w twojej wersji php (dla mnie jest to php7.0.10), a nie php.ini apache. Znajdziesz taki skomentowany plik; curl.cainfo Po prostu zmień tę linię, na przykład curl.cainfo = "C: \ permCertificate \ cacert.pem"

Nie zapomnij utworzyć katalogu „permCertificate” i skopiować do niego plik „cacert.pem”.

Sami FAREH
źródło
Działa dla mnie w Ampps, dzięki
Alejandro Aranda
-1

Tak żebyś wiedział, co u mnie zadziałało, plik na https://curl.haxx.se/ca/cacert .... nie działał jednak ten w folderze zip w poście pod adresem ( http: // flwebsites .biz / posts / how-fix-curl-error-60-ssl-issue ) działał dla mnie bez żadnych problemów.

Jak powiedzieli inni, skopiuj plik certyfikatu do lokalizacji na dysku twardym, zaktualizuj wiersz

;curl.cainfo 

w pliku php.ini do odczytania

curl.cainfo= "path_to_cert\cacert.pem"

Uruchom ponownie serwer Apache.

Kompilator
źródło
Witryna, do której prowadzi łącze, jest spamerska.
Rick Kukiela