Jak ignorować błędy certyfikatu SSL za pomocą cURL: Przewodnik krok po kroku

Komentarze: 0

Podczas wykonywania żądań HTTP przy użyciu cURL czasami występuje problem z weryfikacją certyfikatów SSL. Może się to zdarzyć, gdy używany jest samopodpisany certyfikat serwera lub gdy wygasł. W takich okolicznościach cURL domyślnie odrzuca połączenie, aby chronić użytkownika przed możliwym ryzykiem. Może to jednak utrudniać proces podczas testowania API, pracy w zamkniętych sieciach lub korzystania z usług lokalnych. Dlatego musimy dowiedzieć się, w jakich okolicznościach cURL ignoruje SSL i jak to zaimplementować.

W tym artykule szczegółowo opisano, jak ignorować certyfikaty SSL w cURL, konkretne polecenia, które należy wykonać, oraz możliwe obawy związane z bezpieczeństwem.

unnamed.jpg

Czym są cURL i SSL?

cURL (Client URL) to projekt oprogramowania, który zapewnia wiersz poleceń i bibliotekę do przesyłania danych przy użyciu różnych protokołów. Narzędzie to jest bardzo przydatne do automatyzacji żądań, testowania API lub pobierania informacji z różnych zasobów internetowych, ponieważ działa z wieloma typami sieci.

SSL (Secure Sockets Layer) to forma technologii szyfrowania, która zabezpiecza transmisję danych przez Internet. Certyfikat jest dokumentem potwierdzającym autentyczność danej strony internetowej i ustanawiającym bezpieczne połączenie między użytkownikiem a serwerem. Samodzielnie podpisane, wygasłe lub nieważne certyfikaty serwera prowadzą do blokad podczas korzystania z cURL.

Aby uniknąć takich wyzwań, lepiej jest wyłączyć SSL w cURL, dzięki czemu wykonywanie żądań cURL będzie miało wyższy wskaźnik powodzenia. Ta metoda testowania jest bardzo przydatna, ale może być niebezpieczna pod względem bezpieczeństwa.

cURL, curl lub Curl: Jaka jest różnica?

Oficjalna nazwa narzędzia to cURL, przy czym pierwsza litera tego słowa jest mała, a pozostałe są wielkie. W dokumentach, artykułach i kodach można znaleźć kilka innych form:

  • curl (wszystkie małe litery) - w ten sposób większość programistów zapisuje go w kodach i wierszach poleceń.
  • Curl (duże C) - jest to czasami używane w nieoficjalnych dokumentach, ale jest niepoprawne.

Niezależnie od pisowni, cURL to zawsze cURL. Jest to wieloplatformowe narzędzie wiersza poleceń do przesyłania danych za pomocą składni adresu URL. Większość osób zajmujących się tworzeniem stron internetowych, administracją systemami i DevOps używa go do wykonywania żądań HTTP, testowania interfejsów API i wykonywania interakcji automatyzacji serwera.

Dlaczego warto wyłączyć weryfikację SSL?

Zwykle narzędzie do przesyłania danych sprawdza poprawność certyfikatów pojawiających się na ekranie użytkownika w celu udaremnienia fałszywych witryn i ataków. Istnieją jednak scenariusze, w których cURL ignoruje sprawdzanie certyfikatów. Przyjrzyjmy się, kiedy pojawiają się takie przypadki:

  • Samodzielnie wydawane certyfikaty używane z serwerami testowymi lub lokalnymi. Podczas testowania interfejsów API lub aplikacji programiści często tworzą samodzielnie podpisane certyfikaty, które nie są zatwierdzone przez oficjalne urzędy certyfikacji (CA).
  • Dostęp pracowników do wewnętrznych usług korporacyjnych. Wewnętrzne serwery organizacji zazwyczaj mają certyfikaty, które nie są zaufane. Tam, gdzie zautomatyzowany dostęp do takich zasobów jest obowiązkowy, wyłączenie sprawdzania certyfikatów jest optymalnym rozwiązaniem tymczasowym.
  • Niektóre witryny mają certyfikat serwera, który wygasł lub jest nieważny. Jeśli pobranie informacji z takiego zasobu ma kluczowe znaczenie, walidację można tymczasowo wyłączyć bez napotkania przez użytkownika określonego błędu certyfikatu. W takim przypadku cURL ignoruje błędy SSL i wszystko działa poprawnie.
  • Wyłączenie sprawdzania pomaga uniknąć awarii w skryptach, które wymagają automatyzacji żądań sieciowych. Gdy skrypt konsekwentnie wysyła żądania do serwera, który ma nieprawidłowy certyfikat, należy wyłączyć sprawdzanie.

Pomimo tego, że kontrola jest istotnym czynnikiem, jej całkowite wyłączenie może stwarzać problemy i ryzyko. Omówimy je w następnej kolejności.

Zagrożenia bezpieczeństwa związane z wyłączeniem SSL

Gdy cURL ignoruje certyfikaty, oznacza to, że połączenie może zostać wykorzystane poprzez różne ataki bezpieczeństwa, a jest to szczególnie ważne, gdy w grę wchodzą poufne informacje, w tym hasła, tokeny, a nawet dane dotyczące płatności.

Główne zagrożenia:

  • Man In The Middle Attack (MITM) - technika polegająca na przechwyceniu informacji między użytkownikiem a serwerem i zmianie lub zastąpieniu danych. Stanowi to jeszcze większe zagrożenie, gdy nie ma nikogo do weryfikacji, ponieważ wdrożenie złośliwych ataków staje się zbyt łatwe. Na przykład strona logowania może zostać zastąpiona fałszywą, aby atakujący mógł łatwo zebrać dane uwierzytelniające.
  • cURL nie jest w stanie zweryfikować certyfikatu serwera, unieważniając go. W związku z tym nie ma sposobu, aby upewnić się, że żądany węzeł jest tym, z którym nawiązano połączenie, i umożliwia zastępowanie witryn przez aktorów udających zaufane zasoby.
  • Jeśli podczas testowania weryfikacja zostanie wyłączona, a kod zostanie przeniesiony do środowiska produkcyjnego, może to zwiększyć ryzyko wycieku, a nawet ataków siłowych, które naruszają poufne informacje.

Jeśli wymagane jest, aby cURL ignorował błędy SSL, najważniejsze jest wyświetlanie certyfikatów z podpisem własnym:

  • Omijaj weryfikację tylko w środowisku testowym i unikaj jej w środowisku produkcyjnym;
  • Nie należy przesyłać poufnych informacji za pośrednictwem nieszyfrowanego połączenia;
  • Dodaj samopodpisany certyfikat do zaufanych ręcznie;
  • Monitorowanie kodu, z wyłączeniem błędów konfiguracji, w celu zapewnienia, że weryfikacja pozostaje w kodzie produkcyjnym.

W następnym bloku przeanalizujemy szczegółowo procesy wykonywane w wierszu poleceń w celu wyłączenia weryfikacji certyfikatów.

Jak ominąć błędy SSL za pomocą cURL

Aby cURL ignorował SSL, należy dołączyć określone parametry, które zawieszają weryfikację uwierzytelniania. Jak wspomniano wcześniej, takie praktyki mogą być stosowane tylko w odpowiednio zabezpieczonym środowisku.

Najskuteczniejszą metodą złagodzenia błędu nieprawidłowego certyfikatu witryny jest ręczne skonfigurowanie tymczasowej weryfikacji spoof. Można to zrobić za pomocą następujących parametrów:

  • -k lub --insecure—do łączenia się z witryną, w której certyfikat serwera okazuje się nieważny
  • --cacert—aby zdefiniować lokalizację, w której przechowywany jest plik certyfikatu użytkownika.

Oto przykład wywołania cURL, które ignoruje weryfikację certyfikatu:


curl -k https://example.com

Pozwoli to na wykonanie wywołania cURL nawet z wygasłym certyfikatem serwera.

Jeśli chcesz wysłać dane (np. w żądaniu POST):


curl -k -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param=value" https://example.com/api

W celu zapewnienia najwyższego bezpieczeństwa należy wybrać bezpośrednio katalog, w którym znajduje się plik.


curl --cacert /path/to/cert.pem https://example.com

Wyłączanie weryfikacji SSL w skrypcie

Jeśli żądanie ma być zautomatyzowane za pomocą wiersza poleceń, a obecność użytkownika nie powinna być potrzebna, wówczas korzystne jest wyłączenie sprawdzania certyfikatów w takich scenariuszach.

Oto przykład w Bashu, jak cURL ignoruje SSL:


#!/bin/bash
URL="https://example.com"
DATA=$(curl -k $URL)
echo "Server response: $DATA"

W Pythonie można używać modułu requests z weryfikacją ustawioną na False:


import requests
url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

Po uruchomieniu tego polecenia Python wyświetli ostrzeżenie dotyczące niebezpiecznego połączenia. Dodatkowo, będziesz musiał upewnić się, że napisałeś kod, aby wyłączyć ostrzeżenia, które pojawiają się w przypadku, gdy witryna ma nieprawidłowy certyfikat serwera:


import requests import urllib3 

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 

url = "https://example.com"
response = requests.get(url, verify=False)
print(response.text)

A teraz PHP z cURL:


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;

Poniższa tabela zawiera listę najpopularniejszych metod ignorowania sprawdzania SSL, ich użycia i możliwych zagrożeń.

Metoda Polecenie / Parametr Kiedy używać Ryzyko
Całkowite wyłączenie SSL i weryfikacji nazwy hosta curl -k / --insecure Testowanie interfejsów API, usług lokalnych Wysokie ryzyko ataków MITM
Korzystanie z certyfikatu niestandardowego curl --cacert /path/to/cert.pem W przypadku posiadania własnego certyfikatu Bezpieczniejsze, ale wymaga konfiguracji
Wyłączenie tylko SSL w kodzie CURLOPT_SSL_VERIFYPEER=false Testy tymczasowe Niebezpieczne, jeśli pozostanie w produkcji

Wnioski

Nieprawidłowo działające certyfikaty serwerów stwarzają więcej problemów niż tylko wtedy, gdy są obsługiwane przez cURL. Certyfikaty zapewniają bezpieczeństwo użytkownikom podczas przesyłania danych. Dlatego wyłączenie weryfikacji jest ostatecznością, gdy napotkamy błąd debugowania cURL. W zależności od przyczyny błędu istnieją inne, mniej ekstremalne podejścia, takie jak aktualizacja dokumentu, dodanie go do zaufanego regionu lub po prostu zamiana go na prawidłowy.

Bez sprawdzania SSL połączenie byłoby niezdrowe i łatwe do nadużycia przez innych użytkowników. Takie podejście jest dopuszczalne tylko w kontrolowanych środowiskach, takich jak testy lub gdy usługa jest zewnętrzna. W normalnych okolicznościach, gdy prezentowany jest nieprawidłowy certyfikat serwera, ważne jest, aby ta klauzula nie była ustawiona w kodzie roboczym, ponieważ wystąpiłyby maskowanie danych i inne luki w zabezpieczeniach.

Komentarze:

0 komentarze