Przewodnik konfiguracji curl SSL, TLS i proxy
Konfigurowanie certyfikatów HTTPS, wersji TLS, serwerów proxy i niestandardowej rozdzielczości DNS w curl jest niezbędne do bezpiecznej komunikacji API, potoków CI/CD i debugowania problemów sieciowych. Ten przewodnik obejmuje każdą flagę SSL, TLS, proxy i sieci — od wyłączania sprawdzania certyfikatów za pomocą -k do lokalnego rozwoju, przez konfigurację wzajemnego TLS za pomocą --cert, po kierowanie ruchu przez proxy SOCKS5. Każda opcja zawiera jasne wyjaśnienie, uwagi dotyczące bezpieczeństwa i gotowy do skopiowania przykład.
Szybki przegląd flag SSL i proxy
Zezwól na niebezpieczne połączenia — pomiń całą weryfikację SSL
Weryfikuj certyfikat serwera względem określonego pakietu CA
Dostarcz certyfikat klienta do wzajemnego uwierzytelniania TLS
Podaj plik klucza prywatnego dla certyfikatu klienta
Użyj TLS w wersji 1.2 lub wyższej dla połączenia
Użyj TLS w wersji 1.3 lub wyższej dla połączenia
Wymagaj SSL/TLS dla połączenia (niepowodzenie, jeśli niedostępne)
Określ, które szyfry SSL mają być używane dla połączenia
Określ typ certyfikatu klienta (PEM, DER, ENG, P12)
Przypnij i zweryfikuj klucz publiczny serwera (w stylu HPKP)
Kieruj cały ruch przez wskazany serwer proxy
Kieruj połączenie przez proxy SOCKS5
Podaj nazwę użytkownika:hasło dla serwera proxy
Lista hostów, które nie powinny przechodzić przez proxy
Proxy SOCKS5 z rozdzielczością DNS przez proxy
Certyfikat CA do weryfikacji samego proxy HTTPS
Przypisz określoną parę host:port do niestandardowego adresu IP
Połącz się z innym host:port niż wskazuje URL
Ustaw numer portu lokalnego lub zakres dla połączenia
Powiąż połączenie z określonym interfejsem sieciowym
Użyj niestandardowych serwerów DNS zamiast domyślnych systemu (c-ares)
curl -k: Ignoruj błędy certyfikatu SSL
- Co robi
- Flaga
-k(lub--insecure) wyłącza całą weryfikację certyfikatów SSL/TLS. curl nie sprawdzi, czy certyfikat serwera jest podpisany przez zaufane CA, czy nazwa hosta się zgadza, ani czy certyfikat wygasł. - Kiedy używać
- Używaj wyłącznie do lokalnego rozwoju z samopodpisanymi certyfikatami lub środowisk testowych. Dla staging/produkcji użyj
--cacertz właściwym certyfikatem CA — jest to zarówno bezpieczniejsze, jak i bardziej jawne.
$ curl -k https://localhost:8443/api/healthNigdy nie używaj -k w skryptach produkcyjnych ani potokach CI/CD. Wyłącza to całą walidację certyfikatów, czyniąc połączenie podatnym na ataki man-in-the-middle. Użyj --cacert, aby zaufać konkretnemu CA.
curl --cacert: Użyj niestandardowego certyfikatu CA
- Co robi
- Flaga
--cacertnakazuje curl weryfikację certyfikatu SSL serwera względem określonego pliku pakietu CA (Certificate Authority) w formacie PEM, zamiast domyślnego magazynu zaufania systemu. - Kiedy używać
- Używaj, gdy serwer używa certyfikatu podpisanego przez prywatne lub wewnętrzne CA, którego nie ma w systemowym magazynie zaufania. Jest to typowe w środowiskach korporacyjnych, klastrach Kubernetes i konfiguracjach Docker z wewnętrzną infrastrukturą PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Certyfikat klienta (wzajemny TLS)
- Co robi
- Flaga
--certdostarcza certyfikat po stronie klienta do wzajemnego TLS (mTLS). W mTLS zarówno serwer, jak i klient przedstawiają certyfikaty w celu wzajemnej weryfikacji tożsamości. Plik certyfikatu powinien być w formacie PEM lub PKCS#12. - Kiedy używać
- Wymagany, gdy serwer wymaga uwierzytelniania certyfikatem klienta — typowe w API bankowych, usługach rządowych, komunikacji urządzeń IoT i architekturach zero-trust. Zawsze łącz z
--key, chyba że klucz jest osadzony w pliku certyfikatu.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Klucz prywatny certyfikatu klienta
- Co robi
- Flaga
--keyokreśla plik klucza prywatnego sparowany z certyfikatem klienta dostarczonym przez--cert. Klucz musi pasować do certyfikatu. Jeśli klucz jest chroniony hasłem, curl poprosi o hasło (lub użyj--pass). - Kiedy używać
- Zawsze używaj razem z
--cert. Jeśli klucz prywatny jest już osadzony w pliku certyfikatu (typowe dla PKCS#12 / plików .p12), możesz pominąć--key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Wymuś minimum TLS 1.2
- Co robi
- Flaga
--tlsv1.2wymusza na curl użycie TLS 1.2 jako minimalnej akceptowalnej wersji dla uzgadniania SSL/TLS. Starsze protokoły (TLS 1.0, 1.1, SSLv3) są odrzucane. - Kiedy używać
- Używaj do wymuszenia minimalnego standardu bezpieczeństwa. TLS 1.2 jest wymagany do zgodności z PCI-DSS i jest obsługiwany przez wszystkie nowoczesne serwery. Większość nowoczesnych wersji curl domyślnie już używa TLS 1.2+, ale ta flaga czyni to jawnym.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Wymuś minimum TLS 1.3
- Co robi
- Flaga
--tlsv1.3wymusza na curl użycie TLS 1.3 — najszybszej i najbezpieczniejszej wersji TLS. TLS 1.3 eliminuje dodatkowy round-trip w uzgadnianiu (obsługa 0-RTT) i usuwa wszystkie przestarzałe zestawy szyfrów. - Kiedy używać
- Używaj, gdy wiesz, że serwer obsługuje TLS 1.3 i chcesz najlepszej wydajności i bezpieczeństwa. Uwaga: TLS 1.3 wymaga OpenSSL 1.1.1+ lub kompatybilnej biblioteki TLS. Nie wszystkie serwery jeszcze to obsługują.
$ curl --tlsv1.3 https://modern-api.example.com/dataDodatkowe opcje SSL/TLS
Wymagaj SSL/TLS dla połączenia (niepowodzenie, jeśli niedostępne)
Określ, które szyfry SSL mają być używane dla połączenia
Określ typ certyfikatu klienta (PEM, DER, ENG, P12)
Przypnij i zweryfikuj klucz publiczny serwera (w stylu HPKP)
curl -x: Użyj proxy HTTP/HTTPS
- Co robi
- Flaga
-x(lub--proxy) kieruje cały ruch curl przez wskazany serwer proxy. Format to[protocol://]host[:port]. Obsługiwane protokoły proxy: HTTP, HTTPS, SOCKS4, SOCKS5. - Kiedy używać
- Używaj do korporacyjnych serwerów proxy, debugowania narzędziami takimi jak Fiddler, Charles lub mitmproxy, testowania ograniczeń geograficznych lub gdy bezpośredni dostęp do internetu nie jest dostępny. Możesz też ustawić zmienne środowiskowe
http_proxy/https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Użyj proxy SOCKS5
- Co robi
- Flaga
--socks5nakazuje curl użycie proxy SOCKS5 dla połączenia TCP. W przeciwieństwie do proxy HTTP, SOCKS5 działa na poziomie TCP i może obsługiwać dowolny protokół — nie tylko HTTP. Rozdzielczość DNS jest domyślnie wykonywana lokalnie; użyj--socks5-hostname, aby rozwiązywać DNS przez proxy. - Kiedy używać
- Używaj do tuneli SSH (
ssh -D), dostępu do sieci Tor lub gdy proxy musi obsługiwać protokoły inne niż HTTP. SOCKS5 obsługuje UDP i opcjonalnie może obsługiwać DNS — co czyni go bardziej elastycznym niż proxy HTTP.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Uwierzytelnianie proxy
- Co robi
- Flaga
--proxy-user(lub-U) wysyła dane uwierzytelniające do serwera proxy. Format touser:password. Jest to oddzielone od uwierzytelniania serwera (-u). - Kiedy używać
- Wymagane, gdy serwer proxy wymaga uwierzytelniania — typowe w korporacyjnych i firmowych środowiskach sieciowych. Dane uwierzytelniające są wysyłane do proxy, nie do serwera docelowego.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Pomiń proxy dla określonych hostów
- Co robi
- Flaga
--noproxyokreśla rozdzieloną przecinkami listę hostów, domen lub adresów IP, które powinny omijać proxy i łączyć się bezpośrednio. Obsługuje symbole wieloznaczne:*.example.comodpowiada wszystkim subdomenom. - Kiedy używać
- Używaj do wykluczenia localhost, wewnętrznych usług lub określonych domen z proxy. Jest to ważne, gdy proxy jest ustawione globalnie przez zmienne środowiskowe, ale niektóre hosty (jak lokalne usługi) potrzebują bezpośredniego dostępu. Użyj
*, aby ominąć proxy dla wszystkich hostów.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiDodatkowe opcje proxy
Proxy SOCKS5 z rozdzielczością DNS przez proxy
Certyfikat CA do weryfikacji samego proxy HTTPS
curl --resolve: Niestandardowa rozdzielczość DNS
- Co robi
- Flaga
--resolvedostarcza niestandardowy adres IP dla określonej paryhost:port, całkowicie omijając wyszukiwanie DNS. Format tohost:port:adres. Można podać wiele wpisów--resolve. - Kiedy używać
- Niezbędne do testowania przed propagacją DNS, weryfikacji określonego backendu za load balancerem lub lokalnego rozwoju, gdzie potrzebujesz prawdziwej nazwy hosta do walidacji certyfikatu SSL. W przeciwieństwie do edycji
/etc/hosts, jest to na żądanie i specyficzne dla portu.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Przekieruj połączenie na inny host
- Co robi
- Flaga
--connect-toprzekierowuje połączenie TCP na inną paręhost:port, zachowując oryginalny URL dla żądania HTTP (w tym nagłówekHosti SNI). Format:HOST1:PORT1:HOST2:PORT2. - Kiedy używać
- Używaj do testowania konkretnego serwera backend za load balancerem bez modyfikowania DNS lub
/etc/hosts. W przeciwieństwie do--resolve, mapuje host:port na host:port (nie na IP), co jest przydatne, gdy cel też ma nazwę hosta.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthDodatkowe opcje sieciowe
Ustaw numer portu lokalnego lub zakres dla połączenia
Powiąż połączenie z określonym interfejsem sieciowym
Użyj niestandardowych serwerów DNS zamiast domyślnych systemu (c-ares)
Praktyczne scenariusze SSL i proxy
Te przykłady łączą wiele flag, aby obsłużyć typowe zadania bezpieczeństwa i sieci w środowiskach rozwojowych, CI/CD i produkcyjnych.
Testowanie HTTPS na localhost
Przy lokalnym rozwoju z samopodpisanym certyfikatem połącz --resolve z --cacert (lub -k do szybkiego testowania). Pozwala to używać prawdziwej nazwy hosta dla prawidłowego SSL/SNI bez modyfikowania pliku hosts.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusWzajemny TLS (uwierzytelnianie certyfikatem klienta)
Niektóre API wymagają, aby zarówno serwer, jak i klient przedstawili certyfikaty. Podaj --cert, --key i --cacert, aby ustanowić w pełni zweryfikowane dwukierunkowe połączenie TLS.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataKorporacyjne proxy z uwierzytelnianiem
W sieciach korporacyjnych z obowiązkowymi serwerami proxy połącz -x z -U do podania danych uwierzytelniających proxy. Dodaj --noproxy, aby wykluczyć usługi wewnętrzne z proxowania.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataKontener Docker z wewnętrznym CA
Gdy usługi w Docker używają certyfikatów z wewnętrznego CA, zamontuj certyfikat CA w kontenerze i odwołaj się do niego za pomocą --cacert. Jest to bezpieczniejsze niż -k, ponieważ nadal waliduje łańcuch certyfikatów.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthProxy SOCKS5 przez tunel SSH
Utwórz proxy SOCKS5 za pomocą ssh -D i kieruj ruch curl przez nie za pomocą --socks5. Przydatne do dostępu do wewnętrznych usług przez host bastion.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusCzęsto zadawane pytania o curl SSL i proxy
Jak pominąć weryfikację certyfikatu SSL w curl?
Użyj curl -k URL lub curl --insecure URL. Wyłącza to wszystkie sprawdzenia certyfikatów — wygaśnięcie, niezgodność nazwy hosta, niezaufane CA. Używaj wyłącznie do lokalnego rozwoju. Dla produkcji użyj --cacert z właściwym certyfikatem CA.
Jak sprawić, by curl ufał samopodpisanemu certyfikatowi?
Użyj curl --cacert /path/to/ca.pem URL, aby określić certyfikat CA, który podpisał twój samopodpisany certyfikat. Jest to bezpieczniejsze niż -k, ponieważ nadal waliduje łańcuch certyfikatów — ufając tylko konkretnemu CA.
Jak sprawdzić, której wersji TLS używa curl?
Uruchom curl -v URL i szukaj linii * SSL connection using TLSv1.x / CipherSuite w szczegółowym wyjściu. Aby wymusić konkretną wersję, użyj --tlsv1.2 lub --tlsv1.3.
Czym jest wzajemny TLS (mTLS) i jak go używać z curl?
Wzajemny TLS wymaga, aby zarówno serwer, jak i klient przedstawili certyfikaty. Użyj: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Para --cert/--key uwierzytelnia klienta; --cacert weryfikuje serwer.
Jak używać curl przez proxy HTTP?
Użyj curl -x http://proxy:port URL. Dla proxy HTTPS: curl -x https://proxy:port URL. Alternatywnie ustaw zmienne środowiskowe http_proxy i https_proxy — curl pobiera je automatycznie.
Jak używać curl z proxy SOCKS5?
Użyj curl --socks5 host:port URL dla lokalnej rozdzielczości DNS lub curl --socks5-hostname host:port URL, aby rozwiązywać DNS przez proxy (ważne dla prywatności/Tor). Przykład z tunelem SSH: ssh -D 1080 user@bastion, następnie curl --socks5 localhost:1080 URL.
Jak uwierzytelnić się na serwerze proxy w curl?
Użyj curl -x http://proxy:port -U user:password URL. Flaga -U (lub --proxy-user) wysyła dane uwierzytelniające do proxy. Jest to oddzielone od -u, które uwierzytelnia na serwerze docelowym.
Jak wykluczyć określone hosty z proxy w curl?
Użyj --noproxy "localhost,127.0.0.1,*.internal.com" lub ustaw zmienną środowiskową NO_PROXY. Obsługuje symbole wieloznaczne (*.example.com). Użyj --noproxy "*", aby całkowicie ominąć proxy dla pojedynczego żądania.
Jak testować HTTPS na localhost za pomocą curl?
Do szybkiego testowania: curl -k https://localhost:8443/. Dla prawidłowej walidacji: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Podejście --resolve pozwala na prawidłowe dopasowanie nazwy hosta certyfikatu.
Jak nadpisać rozdzielczość DNS dla konkretnego hosta w curl?
Użyj curl --resolve host:port:IP URL. Przykład: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Omija DNS tylko dla tej pary host:port — nie trzeba edytować /etc/hosts.
Jak naprawić 'SSL certificate problem: certificate has expired' w curl?
Certyfikat serwera wygasł. Rozwiązania: (1) Odnów certyfikat na serwerze, (2) Zaktualizuj pakiet CA: curl --cacert /path/to/updated-ca.pem URL, (3) Tylko do testowania: curl -k URL. Sprawdź wygaśnięcie: curl -v URL 2>&1 | grep expire.
Czy bezpiecznie jest używać curl --insecure (-k) w produkcji?
Nie. Flaga -k wyłącza całą walidację certyfikatów — wygaśnięcie, nazwę hosta i łańcuch zaufania. Czyni to połączenie podatnym na ataki man-in-the-middle. Zawsze używaj --cacert z konkretnym certyfikatem CA w produkcji i potokach CI/CD.