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

-kSSL/TLS

Zezwól na niebezpieczne połączenia — pomiń całą weryfikację SSL

--cacertSSL/TLS

Weryfikuj certyfikat serwera względem określonego pakietu CA

--certSSL/TLS

Dostarcz certyfikat klienta do wzajemnego uwierzytelniania TLS

--keySSL/TLS

Podaj plik klucza prywatnego dla certyfikatu klienta

--tlsv1.2SSL/TLS

Użyj TLS w wersji 1.2 lub wyższej dla połączenia

--tlsv1.3SSL/TLS

Użyj TLS w wersji 1.3 lub wyższej dla połączenia

--ssl-reqdSSL/TLS

Wymagaj SSL/TLS dla połączenia (niepowodzenie, jeśli niedostępne)

--ciphersSSL/TLS

Określ, które szyfry SSL mają być używane dla połączenia

--cert-typeSSL/TLS

Określ typ certyfikatu klienta (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Przypnij i zweryfikuj klucz publiczny serwera (w stylu HPKP)

-xProxy

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

--socks5-hostnameProxy

Proxy SOCKS5 z rozdzielczością DNS przez proxy

--proxy-cacertProxy

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

--local-portSieć

Ustaw numer portu lokalnego lub zakres dla połączenia

--interfaceSieć

Powiąż połączenie z określonym interfejsem sieciowym

--dns-serversSieć

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 --cacert z właściwym certyfikatem CA — jest to zarówno bezpieczniejsze, jak i bardziej jawne.
$ curl -k https://localhost:8443/api/health

Nigdy 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 --cacert nakazuje 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/data

curl --cert: Certyfikat klienta (wzajemny TLS)

Co robi
Flaga --cert dostarcza 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/secure

curl --key: Klucz prywatny certyfikatu klienta

Co robi
Flaga --key okreś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/secure

curl --tlsv1.2: Wymuś minimum TLS 1.2

Co robi
Flaga --tlsv1.2 wymusza 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.3 wymusza 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/data

Dodatkowe opcje SSL/TLS

--ssl-reqd

Wymagaj SSL/TLS dla połączenia (niepowodzenie, jeśli niedostępne)

--ciphers

Określ, które szyfry SSL mają być używane dla połączenia

--cert-type

Określ typ certyfikatu klienta (PEM, DER, ENG, P12)

--pinnedpubkey

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/data

curl --socks5: Użyj proxy SOCKS5

Co robi
Flaga --socks5 nakazuje 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/data

curl --proxy-user: Uwierzytelnianie proxy

Co robi
Flaga --proxy-user (lub -U) wysyła dane uwierzytelniające do serwera proxy. Format to user: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/data

curl --noproxy: Pomiń proxy dla określonych hostów

Co robi
Flaga --noproxy okreś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.com odpowiada 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/api

Dodatkowe opcje proxy

--socks5-hostname

Proxy SOCKS5 z rozdzielczością DNS przez proxy

--proxy-cacert

Certyfikat CA do weryfikacji samego proxy HTTPS

curl --resolve: Niestandardowa rozdzielczość DNS

Co robi
Flaga --resolve dostarcza niestandardowy adres IP dla określonej pary host:port, całkowicie omijając wyszukiwanie DNS. Format to host: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/health

curl --connect-to: Przekieruj połączenie na inny host

Co robi
Flaga --connect-to przekierowuje połączenie TCP na inną parę host:port, zachowując oryginalny URL dla żądania HTTP (w tym nagłówek Host i 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/health

Dodatkowe opcje sieciowe

--local-port

Ustaw numer portu lokalnego lub zakres dla połączenia

--interface

Powiąż połączenie z określonym interfejsem sieciowym

--dns-servers

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/status

Wzajemny 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/data

Korporacyjne 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/data

Kontener 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/health

Proxy 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/status

Czę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.