Sprievodca konfiguráciou SSL, TLS a Proxy v curl

Konfigurácia HTTPS certifikátov, verzií TLS, proxy serverov a vlastného DNS rozlíšenia v curl je nevyhnutná pre bezpečnú API komunikáciu, CI/CD pipeline a ladenie sieťových problémov. Táto príručka pokrýva všetky prepínače SSL, TLS, proxy a siete — od vypnutia kontroly certifikátov pomocou -k pre lokálny vývoj po nastavenie vzájomného TLS s --cert a smerovanie prevádzky cez SOCKS5 proxy. Každá možnosť obsahuje jasné vysvetlenie, bezpečnostné odporúčania a príklad pripravený na skopírovanie.

Rýchly prehľad prepínačov SSL a Proxy

-kSSL/TLS

Povoliť nezabezpečené spojenia — preskočiť všetku SSL verifikáciu

--cacertSSL/TLS

Overiť certifikát servera voči konkrétnemu CA balíku

--certSSL/TLS

Poskytnúť klientsky certifikát pre vzájomnú TLS autentifikáciu

--keySSL/TLS

Poskytnúť súbor súkromného kľúča pre klientsky certifikát

--tlsv1.2SSL/TLS

Použiť TLS verziu 1.2 alebo vyššiu pre spojenie

--tlsv1.3SSL/TLS

Použiť TLS verziu 1.3 alebo vyššiu pre spojenie

--ssl-reqdSSL/TLS

Vyžadovať SSL/TLS pre spojenie (zlyhať ak nie je dostupné)

--ciphersSSL/TLS

Špecifikovať ktoré SSL šifry použiť pre spojenie

--cert-typeSSL/TLS

Špecifikovať typ klientskeho certifikátu (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Pripnúť a overiť verejný kľúč servera (štýl HPKP)

-xProxy

Smerovať všetku prevádzku cez špecifikovaný proxy server

Smerovať spojenie cez SOCKS5 proxy

Poskytnúť meno:heslo pre proxy server

Zoznam hostov, ktoré by nemali prechádzať cez proxy

--socks5-hostnameProxy

SOCKS5 proxy s DNS rozlíšením cez proxy

--proxy-cacertProxy

CA certifikát na overenie samotného HTTPS proxy

Namapovať konkrétny pár host:port na vlastnú IP adresu

Pripojiť sa k inému host:port ako špecifikuje URL

--local-portSieť

Nastaviť číslo alebo rozsah lokálneho portu pre spojenie

--interfaceSieť

Naviazať spojenie na konkrétne sieťové rozhranie

--dns-serversSieť

Použiť vlastné DNS servery namiesto systémových predvolených (c-ares)

curl -k: Ignorovanie chýb SSL certifikátov

Čo robí
Prepínač -k (alebo --insecure) vypne všetku verifikáciu SSL/TLS certifikátov. curl nebude kontrolovať, či je certifikát servera podpísaný dôveryhodnou CA, či sa zhoduje hostname alebo či certifikát nevypršal.
Kedy použiť
Používajte iba pre lokálny vývoj so self-signed certifikátmi alebo testovacie prostredia. Pre staging/produkciu použite --cacert so skutočným CA certifikátom — je to bezpečnejšie aj explicitnejšie.
$ curl -k https://localhost:8443/api/health

Nikdy nepoužívajte -k v produkčných skriptoch alebo CI/CD pipeline. Vypne všetku validáciu certifikátov, čím sa vaše spojenie stáva zraniteľným voči útokom man-in-the-middle. Použite --cacert na dôveru konkrétnej CA.

curl --cacert: Použitie vlastného CA certifikátu

Čo robí
Prepínač --cacert hovorí curl, aby overil SSL certifikát servera voči konkrétnemu CA (Certificate Authority) balíku vo formáte PEM namiesto predvoleného systémového úložiska dôvery.
Kedy použiť
Použite, keď váš server používa certifikát podpísaný súkromnou alebo internou CA, ktorá nie je v systémovom úložisku dôvery. Toto je bežné v korporátnych prostrediach, Kubernetes klastroch a Docker konfiguráciách s interným PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Klientsky certifikát (Vzájomný TLS)

Čo robí
Prepínač --cert poskytuje certifikát na strane klienta pre vzájomný TLS (mTLS). Pri mTLS server aj klient predkladajú certifikáty na overenie vzájomnej identity. Súbor certifikátu by mal byť vo formáte PEM alebo PKCS#12.
Kedy použiť
Vyžaduje sa, keď server vyžaduje autentifikáciu klientským certifikátom — bežné v bankových API, vládnych službách, IoT komunikácii a architektúrach s nulovým dôverom. Vždy kombinujte s --key, pokiaľ kľúč nie je vložený v súbore certifikátu.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Súkromný kľúč klientskeho certifikátu

Čo robí
Prepínač --key špecifikuje súbor súkromného kľúča, ktorý sa páruje s klientskym certifikátom poskytnutým cez --cert. Kľúč musí zodpovedať certifikátu. Ak je kľúč chránený heslom, curl vyzve na zadanie hesla (alebo použite --pass).
Kedy použiť
Vždy používajte spolu s --cert. Ak je súkromný kľúč už vložený v súbore certifikátu (bežné pre PKCS#12 / .p12 súbory), môžete --key vynechať.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Vynútiť minimálne TLS 1.2

Čo robí
Prepínač --tlsv1.2 núti curl použiť TLS 1.2 ako minimálnu akceptovateľnú verziu pre SSL/TLS handshake. Staršie protokoly (TLS 1.0, 1.1, SSLv3) sú odmietnuté.
Kedy použiť
Použite na vynútenie minimálneho bezpečnostného štandardu. TLS 1.2 je vyžadovaný pre PCI-DSS a je podporovaný všetkými modernými servermi. Väčšina moderných zostáv curl štandardne používa TLS 1.2+, ale tento prepínač to robí explicitným.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Vynútiť minimálne TLS 1.3

Čo robí
Prepínač --tlsv1.3 núti curl použiť TLS 1.3 — najrýchlejšiu a najbezpečnejšiu verziu TLS. TLS 1.3 eliminuje extra round-trip v handshake (podpora 0-RTT) a odstraňuje všetky zastarané šifrovacie sady.
Kedy použiť
Použite, keď viete, že server podporuje TLS 1.3 a chcete najlepší výkon a bezpečnosť. Poznámka: TLS 1.3 vyžaduje OpenSSL 1.1.1+ alebo kompatibilnú TLS knižnicu. Nie všetky servery ho zatiaľ podporujú.
$ curl --tlsv1.3 https://modern-api.example.com/data

Ďalšie SSL/TLS možnosti

--ssl-reqd

Vyžadovať SSL/TLS pre spojenie (zlyhať ak nie je dostupné)

--ciphers

Špecifikovať ktoré SSL šifry použiť pre spojenie

--cert-type

Špecifikovať typ klientskeho certifikátu (PEM, DER, ENG, P12)

--pinnedpubkey

Pripnúť a overiť verejný kľúč servera (štýl HPKP)

curl -x: Použitie HTTP/HTTPS proxy

Čo robí
Prepínač -x (alebo --proxy) smeruje všetku curl prevádzku cez špecifikovaný proxy server. Formát je [protocol://]host[:port]. Podporované proxy protokoly: HTTP, HTTPS, SOCKS4, SOCKS5.
Kedy použiť
Použite pre korporátne proxy servery, ladenie s nástrojmi ako Fiddler, Charles alebo mitmproxy, testovanie geografických obmedzení alebo keď priamy prístup na internet nie je dostupný. Môžete tiež nastaviť premenné prostredia http_proxy / https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Použitie SOCKS5 proxy

Čo robí
Prepínač --socks5 hovorí curl, aby použil SOCKS5 proxy pre TCP spojenie. Na rozdiel od HTTP proxy, SOCKS5 funguje na TCP úrovni a dokáže spracovať akýkoľvek protokol — nielen HTTP. DNS rozlíšenie sa vykonáva lokálne; použite --socks5-hostname na rozlíšenie DNS cez proxy.
Kedy použiť
Použite pre SSH tunely (ssh -D), prístup k sieti Tor alebo keď proxy musí spracovať nie-HTTP protokoly. SOCKS5 podporuje UDP a môže voliteľne spracovať DNS — čím je flexibilnejší než HTTP proxy.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Autentifikácia na proxy

Čo robí
Prepínač --proxy-user (alebo -U) odošle autentifikačné údaje na proxy server. Formát je user:password. Toto je oddelené od autentifikácie na serveri (-u).
Kedy použiť
Vyžaduje sa, keď proxy server vyžaduje autentifikáciu — bežné v korporátnych a enterprise sieťových prostrediach. Prihlasovacie údaje sa posielajú na proxy, nie na cieľový server.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Obídenie proxy pre konkrétne hosty

Čo robí
Prepínač --noproxy špecifikuje čiarkami oddelený zoznam hostov, domén alebo IP adries, ktoré by mali obísť proxy a pripojiť sa priamo. Podporuje zástupné znaky: *.example.com sa zhoduje so všetkými subdoménami.
Kedy použiť
Použite na vylúčenie localhost, interných služieb alebo konkrétnych domén z proxovania. Toto je dôležité, keď je proxy nastavený globálne cez premenné prostredia, ale niektoré hosty (ako lokálne služby) potrebujú priamy prístup. Použite * na obídenie proxy pre všetky hosty.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Ďalšie Proxy možnosti

--socks5-hostname

SOCKS5 proxy s DNS rozlíšením cez proxy

--proxy-cacert

CA certifikát na overenie samotného HTTPS proxy

curl --resolve: Vlastné DNS rozlíšenie

Čo robí
Prepínač --resolve poskytuje vlastnú IP adresu pre konkrétny pár host:port, úplne obchádzajúc DNS vyhľadávanie. Formát je host:port:address. Môžete poskytnúť viacero záznamov --resolve.
Kedy použiť
Nevyhnutný pre testovanie pred propagáciou DNS, overenie konkrétneho backendu za load balancerom alebo lokálny vývoj, kde potrebujete skutočný hostname pre validáciu SSL certifikátov. Na rozdiel od editácie /etc/hosts, toto je per-request a špecifické pre port.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Presmerovanie spojenia na iný host

Čo robí
Prepínač --connect-to presmeruje TCP spojenie na iný pár host:port pri zachovaní pôvodnej URL pre HTTP požiadavku (vrátane hlavičky Host a SNI). Formát: HOST1:PORT1:HOST2:PORT2.
Kedy použiť
Použite na testovanie konkrétneho backend servera za load balancerom bez zmeny DNS alebo /etc/hosts. Na rozdiel od --resolve, toto mapuje host:port na host:port (nie na IP), čo je užitočné, keď cieľ má tiež hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Ďalšie sieťové možnosti

--local-port

Nastaviť číslo alebo rozsah lokálneho portu pre spojenie

--interface

Naviazať spojenie na konkrétne sieťové rozhranie

--dns-servers

Použiť vlastné DNS servery namiesto systémových predvolených (c-ares)

Praktické scenáre SSL a Proxy

Tieto príklady kombinujú viacero prepínačov na riešenie bežných bezpečnostných a sieťových úloh v prostrediach vývoja, CI/CD a produkcie.

Testovanie HTTPS na localhost

Pri lokálnom vývoji so self-signed certifikátom kombinujte --resolve s --cacert (alebo -k pre rýchle testovanie). Toto vám umožní použiť skutočný hostname pre správne SSL/SNI bez zmeny súboru hosts.

$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/status

Vzájomný TLS (autentifikácia klientským certifikátom)

Niektoré API vyžadujú, aby server aj klient predložili certifikáty. Poskytnite --cert, --key a --cacert na vytvorenie plne overeného obojsmerného TLS spojenia.

$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/data

Korporátny proxy s autentifikáciou

V korporátnych sieťach s povinnými proxy servermi kombinujte -x s -U pre prihlasovacie údaje proxy. Pridajte --noproxy na vylúčenie interných služieb z proxovania.

$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/data

Docker kontajner s internou CA

Keď služby v Docker používajú certifikáty od internej CA, pripojte CA certifikát do kontajnera a odkazujte naň pomocou --cacert. Toto je bezpečnejšie ako -k, pretože stále validuje reťaz certifikátov.

$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/health

SOCKS5 proxy cez SSH tunel

Vytvorte SOCKS5 proxy s ssh -D a smerujte curl prevádzku cez neho pomocou --socks5. Toto je užitočné pre prístup k interným službám cez bastion host.

$ curl --socks5 localhost:1080 https://internal-api.example.com/status

Často kladené otázky o SSL a Proxy v curl

Ako preskočím overenie SSL certifikátov v curl?

Použite curl -k URL alebo curl --insecure URL. Toto vypne všetky kontroly certifikátov — expiráciu, nezhodu hostname, nedôveryhodnú CA. Používajte iba pre lokálny vývoj. Pre produkciu použite --cacert so skutočným CA certifikátom.

Ako prinútim curl dôverovať self-signed certifikátu?

Použite curl --cacert /path/to/ca.pem URL na špecifikovanie CA certifikátu, ktorý podpísal váš self-signed certifikát. Toto je bezpečnejšie ako -k, pretože stále validuje reťaz certifikátov — dôveruje iba vašej konkrétnej CA.

Ako zistím, akú verziu TLS curl používa?

Spustite curl -v URL a hľadajte riadok * SSL connection using TLSv1.x / CipherSuite v podrobnom výstupe. Na vynútenie konkrétnej verzie použite --tlsv1.2 alebo --tlsv1.3.

Čo je vzájomný TLS (mTLS) a ako ho použijem s curl?

Vzájomný TLS vyžaduje, aby server aj klient predložili certifikáty. Použite: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Pár --cert/--key autentifikuje klienta; --cacert overuje server.

Ako použijem curl cez HTTP proxy?

Použite curl -x http://proxy:port URL. Pre HTTPS proxy: curl -x https://proxy:port URL. Alternatívne nastavte premenné prostredia http_proxy a https_proxy — curl ich automaticky rozpozná.

Ako použijem curl so SOCKS5 proxy?

Použite curl --socks5 host:port URL pre lokálne DNS rozlíšenie, alebo curl --socks5-hostname host:port URL na rozlíšenie DNS cez proxy (dôležité pre súkromie/Tor). Príklad s SSH tunelom: ssh -D 1080 user@bastion, potom curl --socks5 localhost:1080 URL.

Ako sa autentifikujem na proxy serveri v curl?

Použite curl -x http://proxy:port -U user:password URL. Prepínač -U (alebo --proxy-user) odošle prihlasovacie údaje na proxy. Toto je oddelené od -u, ktorý autentifikuje na cieľovom serveri.

Ako vylúčím konkrétne hosty z proxy v curl?

Použite --noproxy "localhost,127.0.0.1,*.internal.com" alebo nastavte premennú prostredia NO_PROXY. Podporuje zástupné znaky (*.example.com). Použite --noproxy "*" na úplné obídenie proxy pre jednu požiadavku.

Ako testujem HTTPS na localhost s curl?

Pre rýchle testovanie: curl -k https://localhost:8443/. Pre správnu validáciu: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Prístup --resolve umožňuje správne zhodnotenie hostname certifikátu.

Ako prepíšem DNS rozlíšenie pre konkrétny host v curl?

Použite curl --resolve host:port:IP URL. Príklad: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Toto obíde DNS iba pre daný pár host:port — bez potreby editácie /etc/hosts.

Ako opravím 'SSL certificate problem: certificate has expired' v curl?

Certifikát servera vypršal. Riešenia: (1) Obnoviť certifikát na serveri, (2) Aktualizovať CA balík: curl --cacert /path/to/updated-ca.pem URL, (3) Iba pre testovanie: curl -k URL. Skontrolovať expiráciu: curl -v URL 2>&1 | grep expire.

Je bezpečné používať curl --insecure (-k) v produkcii?

Nie. Prepínač -k vypne všetku validáciu certifikátov — expiráciu, hostname a reťaz dôvery. Toto robí vaše spojenie zraniteľným voči útokom man-in-the-middle. Vždy používajte --cacert s konkrétnym CA certifikátom v produkcii a CI/CD pipeline.