PHP CURL CURLOPT_SSL_VERIFYPEER zignorowano

117

Z jakiegoś powodu nie mogę używać CURL z HTTPS. Wszystko działało dobrze, dopóki nie uruchomiłem aktualizacji bibliotek curl. Teraz otrzymuję tę odpowiedź podczas próby wykonania żądań CURL: Problem z certyfikatem SSL CA (ścieżka? Prawa dostępu?)

Poniższe sugestie zamieszczone tutaj dotyczące powiązanych problemów próbowałem wykonać następujące czynności:

  • Wyłącz weryfikację dla hosta i peera

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);
    
  • Włącz CURLOPT_SSL_VERIFYPEERi wskaż cacert.pem pobrany z http://curl.haxx.se/docs/caextract.html

    curl_setopt($cHandler, CURLOPT_SSL_VERIFYPEER, true);  
    curl_setopt($cHandler, CURLOPT_CAINFO, getcwd() . "/positiveSSL.ca-bundle");
    
  • Próbowałem również zrobić to samo z pakietem positiveSSL.ca, który został dostarczony jako pakiet certyfikatu CA dla serwera, z którym próbuję się połączyć.

  • Edytuj ustawienia php ini za pomocą curl.cainfo=cacert.pem(plik w tym samym katalogu i dostępny dla apache)

  • Zmień nazwę /etc/pki/nssdbna/etc/pki/nssdb.old

Niestety żadne z powyższych nie jest w stanie rozwiązać mojego problemu i ciągle pojawia się komunikat Problem z komunikatem SSL CA cert (ścieżka? Prawa dostępu?).

I przede wszystkim nie potrzebuję tej weryfikacji (mam świadomość problemów z bezpieczeństwem).

Czy ktoś ma jakieś inne sugestie?

AKTUALIZACJA

Po aktualizacji do najnowszych bibliotek i ponownym uruchomieniu całego pudełka, nie tylko apache, który robiłem, wszystko wydaje się teraz znowu działać !!!

Greg
źródło
1
Czy zaktualizowałeś bibliotekę Curl skompilowaną na innym stosie SSL (być może GnuTLS vs OpenSSL)?
Bruno
Nie sądzę. Systemem jest Fedora 16 i tak naprawdę było w przypadku aktualizacji yum. Najbardziej irytujące jest to, że nie potrzebuję / nie chcę całej tej weryfikacji i nie mogę po prostu jej wyłączyć.
Greg
Jeśli chcesz używać protokołu HTTPS ze względów bezpieczeństwa, zawsze będziesz chciał mieć ten proces weryfikacji.
Bruno
Zdaję sobie z tego sprawę, jednak mój przypadek użycia sprawia, że ​​jest to trochę zbędne. Zaktualizowałem również curl do najnowszej dostępnej wersji, a php do wersji 5.4. Teraz komunikat o błędzie zniknął, ale nie dostaję też żadnej informacji z curl :)
Greg
Ha, teraz widzę gdzieś funkcja curl_errno raportuje stan 77, który według instrukcji to CURLE_SSL_CACERT_BADFILE.
Greg

Odpowiedzi:

240

Zgodnie z dokumentacją: aby zweryfikować certyfikat hosta lub równorzędnego, należy określić alternatywne certyfikaty z CURLOPT_CAINFOopcją lub katalog certyfikatów można określić za pomocą CURLOPT_CAPATHopcji.

Spójrz także CURLOPT_SSL_VERIFYHOST:

  • 1, aby sprawdzić istnienie wspólnej nazwy w certyfikacie równorzędnym SSL.
  • 2, aby sprawdzić istnienie wspólnej nazwy, a także sprawdzić, czy jest ona zgodna z podaną nazwą hosta.

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
koniczyna
źródło
5
Wyłączenie weryfikacji SSL i tak prawie całkowicie usuwa wszystkie zabezpieczenia SSL. Zamiast tego powinieneś naprawić konfigurację PHP.
Scopey
7
@Scopey, ale czasami możesz go potrzebować w lokalnych środowiskach programistycznych z certyfikatami z podpisem własnym. Więc prawdopodobnie nie ma to sensu w środowiskach niepublicznych, ale dla przypomnienia zawsze lepiej jest mieć jakieś ostrzeżenie w dzienniku (np. SSL verification disabled)
Ivan Borshchov
2

Mieliśmy ten sam problem na maszynie CentOS7. Wyłączenie VERIFYHOST VERIFYPEERnie rozwiązało problemu, nie mieliśmy już błędu cURL, ale odpowiedź nadal była nieprawidłowa. Wykonanie a wgetdo tego samego odsyłacza co cURL również spowodowało błąd certyfikatu.

-> Nasze rozwiązanie polegało również na ponownym uruchomieniu VPS, co rozwiązało problem i mogliśmy ponownie wykonać żądanie.

Dla nas wydawało się to problemem zepsucia pamięci. Ponowne uruchomienie VPS ponownie załadowało bibliotekę do pamięci i teraz działa. Jeśli więc powyższe rozwiązanie @clovernie działa, spróbuj ponownie uruchomić komputer.

Rvanlaak
źródło
Upewnij się, że nie jest przerywany. Miałem problem z weryfikacją paypal i peer, gdzie czasami działało, czasami nie. Wydawało się przypadkowe. Jawne konfigurowanie ścieżki cafile i informowanie curl, gdzie został rozwiązany problem.
Neil Davis