Używam XAMPP do programowania. Niedawno zaktualizowałem moją instalację Xampp ze starej wersji do 1.7.3.
Teraz, gdy zwijam witryny z włączoną obsługą HTTPS, otrzymuję następujący wyjątek
Błąd krytyczny: nieprzechwycony wyjątek „RequestCore_Exception” z komunikatem „zasób cURL: identyfikator zasobu nr 55; błąd cURL: problem z certyfikatem SSL, sprawdź, czy certyfikat CA jest OK. Szczegóły: błąd: 14090086: Procedury SSL: SSL3_GET_SERVER_CERTIFICATE: weryfikacja certyfikatu nie powiodła się (60) ”
Wszyscy sugerują użycie pewnych specjalnych opcji curl z kodu PHP, aby rozwiązać ten problem. Myślę, że nie powinno tak być. Ponieważ nie miałem problemu ze starą wersją XAMPP i stało się to dopiero po zainstalowaniu nowej wersji.
Potrzebuję pomocy, aby dowiedzieć się, jakie ustawienia zmienią się w mojej instalacji PHP, Apache itp. Mogą rozwiązać ten problem.
CURLOPT_SSL_VERIFYPEER
-> fałsz). Dodaj certyfikat urzędu certyfikacji witryny, z którą próbujesz wykonać protokół SSL, lub wyłącz weryfikację urzędu certyfikacji. To jedyne dwie dostępne opcje.CURLOPT_SSL_VERIFYPEER
którefalse
pokonuje cel używania SSL.To dość powszechny problem w systemie Windows. Trzeba po prostu zestaw
cacert.pem
docurl.cainfo
.Od wersji PHP 5.3.7 możesz:
php.ini
- dodaj curl.cainfo = "PATH_TO / cacert.pem"W przeciwnym razie musisz wykonać następujące czynności dla każdego zasobu cURL:
źródło
2.
, musisz dodać zmienną do dwóch oddzielnychphp.ini
plików. Zobacz stackoverflow.com/a/25706713/1101095Ostrzeżenie: może to powodować problemy z bezpieczeństwem, przed którymi ma chronić SSL, powodując, że cała baza kodu jest niepewna. Jest to sprzeczne z każdą zalecaną praktyką.
Ale naprawdę prostym rozwiązaniem, które zadziałało, było zadzwonienie:
przed dzwonieniem:
w pliku php.
Uważam, że wyłącza to wszelką weryfikację certyfikatów SSL.
źródło
Źródło: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
za wszystkie powyższe informacje Źródło: http://ademar.name/blog/2006/04/curl-ssl-certificate-problem-v.html
źródło
Powyższe rozwiązania są świetne, ale jeśli używasz WampServer, może się okazać, że ustawienie
curl.cainfo
zmiennejphp.ini
nie działa.W końcu odkryłem, że WampServer ma dwa
php.ini
pliki:Pierwszy jest używany do wywoływania plików PHP przez przeglądarkę internetową, a drugi do wywoływania polecenia przez wiersz poleceń lub
shell_exec()
.TL; DR
Jeśli używasz WampServer, musisz dodać
curl.cainfo
linię do obuphp.ini
plików.źródło
Z miłości do wszystkiego, co święte ...
W moim przypadku musiałem ustawić
openssl.cafile
zmienną konfiguracyjną PHP na ścieżkę pliku PEM.Ufam, że to prawda, że istnieje wiele systemów, w których ustawienie
curl.cainfo
w konfiguracji PHP jest dokładnie tym, czego potrzeba, ale w środowisku, w którym pracuję, jest kontener dokujący eboraas / laravel , który używa Debiana 8 (jessie) i PHP 5.6, ustawienie tej zmiennej nie załatwiło sprawy.Zauważyłem, że dane wyjściowe
php -i
nie wspominały nic o tym konkretnym ustawieniu konfiguracji, ale zawierało kilka wierszyopenssl
. Istnieje zarówno opcjaopenssl.capath
iopenssl.cafile
, ale tylko ustawienie drugiego dozwolonego zwijania za pośrednictwem PHP, aby w końcu było w porządku z adresami URL HTTPS.źródło
Czasami jeśli aplikacja, z którą próbujesz się skontaktować, ma certyfikaty z podpisem własnym, normalny plik cacert.pem z http://curl.haxx.se/ca/cacert.pem nie rozwiązuje problemu.
Jeśli masz pewność co do adresu URL punktu końcowego usługi, naciśnij go w przeglądarce, zapisz ręcznie certyfikat w formacie „X 509 certyfikat z łańcuchem (PEM)”. Wskaż ten plik certyfikatu za pomocą
źródło
Mam ten sam błąd na amazonie AMI Linux.
Rozwiązałem, ustawiając curl.cainfo na /etc/php.d/curl.ini
https://gist.github.com/reinaldomendes/97fb2ce8a606ec813c4b
Dodatek październik 2018 r
Na Amazon Linux v1 edytuj ten plik
Aby dodać tę linię
źródło
Podczas ustawiania opcji zwijania dla CURLOPT_CAINFO pamiętaj, aby używać pojedynczych cudzysłowów, użycie podwójnych cudzysłowów spowoduje tylko kolejny błąd. Twoja opcja powinna wyglądać następująco:
Dodatkowo w ustawieniach pliku php.ini należy zapisać jako: (zauważ moje podwójne cudzysłowy)
Umieszczam go bezpośrednio poniżej linii, która mówi:
extension=php_curl.dll
(Tylko w celu organizowania, możesz umieścić go w dowolnym miejscu w swoim miejscu
php.ini
, po prostu umieszczam go w pobliżu innego odwołania do curl, więc kiedy szukam za pomocą słowa kluczowego curl, nie mogę znaleźć obu odwołań do curl w jednym obszarze).źródło
Skończyło się tutaj, gdy próbowałem zdobyć GuzzleHttp (php + apache na Macu), aby uzyskać stronę z www.googleapis.com.
Oto moje ostatnie rozwiązanie na wypadek, gdyby komukolwiek to pomogło.
Sprawdź łańcuch certyfikatów dla dowolnej domeny, w której występuje ten błąd. Dla mnie była to googleapis.com
Otrzymasz coś takiego:
Uwaga: Przechwyciłem to po rozwiązaniu problemu, ponieważ dane wyjściowe łańcucha mogą wyglądać inaczej.
Następnie musisz spojrzeć na certyfikaty dozwolone w php. Uruchom phpinfo () na stronie.
Następnie poszukaj pliku certyfikatu załadowanego z danych wyjściowych strony:
Jest to plik, który musisz naprawić, dodając do niego poprawne certyfikaty.
Zasadniczo musisz dołączyć poprawne „podpisy” certyfikatu na końcu tego pliku.
Niektóre z nich można znaleźć tutaj: Może być konieczne wyszukanie w Google innych osób w łańcuchu, jeśli są one potrzebne.
Wyglądają tak:
( Uwaga: jest to obraz, więc ludzie nie będą po prostu kopiować / wklejać certyfikatów z stackoverflow )
Gdy odpowiednie certyfikaty znajdą się w tym pliku, uruchom ponownie apache i przetestuj.
źródło
Możesz spróbować ponownie zainstalować
ca-certificates
pakiet lub jawnie zezwolić na dany certyfikat, jak opisano tutaj .źródło
Rozwiązanie jest bardzo proste! Umieść tę linię przed
curl_exec
:Dla mnie to działa.
źródło