Czy curl ma opcję --no-check-certificate, taką jak wget?

446

Usiłuję złożyć wniosek o zwinięcie do jednego z naszych lokalnych serwerów programistycznych obsługujących witrynę programistyczną z samopodpisanym certyfikatem SSL. Używam curl z wiersza poleceń.

Widziałem kilka postów na blogu, w których wspomniano, że można dodać do listy certyfikatów lub określić konkretny (samopodpisany) certyfikat jako ważny, ale czy istnieje ogólny sposób na powiedzenie „nie weryfikuj” certyfikatu ssl - podobnie jak --no-check-certificateten Wget ma?

cwd
źródło
1
--insecurenie będzie działać, jeśli masz pewne wersje php lub apache, jak wyszczególniono w superuser.com/questions/1015325/…
user3338098,

Odpowiedzi:

594

Tak. Z strony podręcznika :

-k, - niezabezpieczone

(TLS) Domyślnie każde zawinięcie połączenia SSL jest sprawdzane pod kątem bezpieczeństwa. Ta opcja umożliwia kontynuowanie i działanie curl nawet w przypadku połączeń z serwerami, które w innym przypadku są uważane za niebezpieczne.

Połączenie z serwerem jest weryfikowane przez upewnienie się, że certyfikat serwera zawiera prawidłową nazwę i pomyślnie weryfikuje przy użyciu magazynu certyfikatów.

Zobacz ten zasób online, aby uzyskać więcej informacji: https://curl.haxx.se/docs/sslcerts.html

Zobacz także --proxy-niepewne i --cacert.

Odniesienia wymienionych w tej pozycji dokument opisuje niektóre z określonych zachowań -k.

Zachowania te można zaobserwować w przypadku curlpróśb o przetestowanie stron z BadSSL.com

curl -X GET https://wrong.host.badssl.com/
curl: (51) SSL: no alternative certificate subject name matches target host name 'wrong.host.badssl.com'

curl -k -X GET https://wrong.host.badssl.com/
..returns HTML content...
Freiheit
źródło
11
Uwielbiam fakt, że ma krótką literę
kizzx2
Czy jest jakiś sposób w konfiguracji curl, aby ustawić tę opcję jako domyślną?
Wygrywa
4
@Wins, to byłby okropny pomysł. Popraw alias, jeśli chcesz go używać wielokrotnie, abyś wiedział, co robi, i nie wysyłaj przypadkowo haseł bez szyfrowania. alias insecure-curl="curl -k"
Alexander Huszagh,
2
@AlexanderHuszagh W pracy używam curl tylko z jednego serwera z certyfikatem z podpisem własnym; nigdy nie chcę przeprowadzać pełnego sprawdzania certyfikatu. To, że w większości przypadków coś wydaje się okropnym pomysłem, nie oznacza, że ​​zawsze tak jest.
Daniel H
4
@DanielH Właśnie dlatego zasugerowałem alias: dzięki czemu zyskujesz dodatkową wygodę z wyraźną świadomością, że jest niepewny. Przepływy pracy się zmieniają: powinieneś jednak wiedzieć w pewien ograniczony sposób, kiedy handlujesz zabezpieczeniami dla wygody.
Alexander Huszagh
36

Możesz zastosować następujące polecenie, aby zastosować zmiany dla wszystkich połączeń:

$ echo insecure >> ~/.curlrc

W systemie Windows po prostu utworzyć _curlrcplik tekstowy z „niepewnego” tekst w niej w Twoim %HOME%, %CURL_HOME%, %APPDATA%, %USERPROFILE%lub %USERPROFILE%\Application Datakatalogu.

Zaletą zastosowania powyższego rozwiązania jest to, że działa ono dla wszystkich curlpoleceń, ale nie jest zalecane, ponieważ może wprowadzać ataki MITM , łącząc się z niepewnymi i niezaufanymi hostami.

kenorb
źródło
72
To wydaje się złą radą: wyłączenie tych kontroli dla wszystkich połączeń nie powinno być domyślnym, nawet jeśli zrobisz to sam przez konfigurację dla poszczególnych użytkowników. Jeśli chcesz znieść kontrole bezpieczeństwa, przynajmniej zrób to fragmentarycznie.
Christopher Schultz
4
Za każdym razem, gdy używam curl, albo kontroluję maszynę na drugim końcu albo ufam jej.
Eric Hartford,
11
@EricHartford: Cóż, dobrze dla ciebie, ale to nie czyni z tego dobrej ogólnej porady imho. Można użyć curl, na przykład podczas pobierania homebrew na osx i skończyć ze zmodyfikowaną wersją narzędzi, ponieważ włączono to jako domyślnie ślepo.
ereOn
10
Również @EricHartford, czy jesteś pewien, że zawsze robisz zaufane curl? Czy kiedykolwiek uruchomiłeś jakiś skrypt instalacyjny bash, który masz poza Internetem? To prawda, że ​​i tak możesz być w czerni, ale to zwiększa szanse.
Zlatko
to jest prawdziwy @EricHartford. Poprzednia wiadomość została opublikowana przez kogoś, kto podszywa się pode mnie. Ponieważ ufałem wszystkim maszynom ;-)
Anand Rockzz
5

Używasz certyfikatu z podpisem własnym. Dlaczego nie dołączyłeś urzędu certyfikacji do zaufanego pakietu urzędu certyfikacji (Linux) ani nie dodałeś go do zaufanego magazynu certyfikatów (Windows)? Lub po prostu użyj --cacert /Path/to/filez zawartością zaufanego samopodpisanego pliku certyfikatu.

Inne odpowiedzi odpowiadają na pytanie w oparciu o wgetporównywalne. Jednak prawdziwe pytanie brzmi: w jaki sposób utrzymywać zaufane połączenie za pomocą certyfikatu z podpisem własnym curl. Opierając się na wielu komentarzach, bezpieczeństwo jest najważniejszą kwestią w każdej z tych odpowiedzi, a najlepszą odpowiedzią byłoby zaufanie samopodpisanemu certyfikatowi i pozostawienie curlkontroli bezpieczeństwa nienaruszonych.

użytkownik3258557
źródło