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
Povoliť nezabezpečené spojenia — preskočiť všetku SSL verifikáciu
Overiť certifikát servera voči konkrétnemu CA balíku
Poskytnúť klientsky certifikát pre vzájomnú TLS autentifikáciu
Poskytnúť súbor súkromného kľúča pre klientsky certifikát
Použiť TLS verziu 1.2 alebo vyššiu pre spojenie
Použiť TLS verziu 1.3 alebo vyššiu pre spojenie
Vyžadovať SSL/TLS pre spojenie (zlyhať ak nie je dostupné)
Špecifikovať ktoré SSL šifry použiť pre spojenie
Špecifikovať typ klientskeho certifikátu (PEM, DER, ENG, P12)
Pripnúť a overiť verejný kľúč servera (štýl HPKP)
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 proxy s DNS rozlíšením cez proxy
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
Nastaviť číslo alebo rozsah lokálneho portu pre spojenie
Naviazať spojenie na konkrétne sieťové rozhranie
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
--cacertso skutočným CA certifikátom — je to bezpečnejšie aj explicitnejšie.
$ curl -k https://localhost:8443/api/healthNikdy 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č
--cacerthovorí 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/datacurl --cert: Klientsky certifikát (Vzájomný TLS)
- Čo robí
- Prepínač
--certposkytuje 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/securecurl --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--keyvynechať.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Vynútiť minimálne TLS 1.2
- Čo robí
- Prepínač
--tlsv1.2nú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.3nú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
Vyžadovať SSL/TLS pre spojenie (zlyhať ak nie je dostupné)
Špecifikovať ktoré SSL šifry použiť pre spojenie
Špecifikovať typ klientskeho certifikátu (PEM, DER, ENG, P12)
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/datacurl --socks5: Použitie SOCKS5 proxy
- Čo robí
- Prepínač
--socks5hovorí 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-hostnamena 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/datacurl --proxy-user: Autentifikácia na proxy
- Čo robí
- Prepínač
--proxy-user(alebo-U) odošle autentifikačné údaje na proxy server. Formát jeuser: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/datacurl --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.comsa 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 proxy s DNS rozlíšením cez proxy
CA certifikát na overenie samotného HTTPS proxy
curl --resolve: Vlastné DNS rozlíšenie
- Čo robí
- Prepínač
--resolveposkytuje vlastnú IP adresu pre konkrétny párhost:port, úplne obchádzajúc DNS vyhľadávanie. Formát jehost: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/healthcurl --connect-to: Presmerovanie spojenia na iný host
- Čo robí
- Prepínač
--connect-topresmeruje TCP spojenie na iný párhost:portpri zachovaní pôvodnej URL pre HTTP požiadavku (vrátane hlavičkyHosta 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
Nastaviť číslo alebo rozsah lokálneho portu pre spojenie
Naviazať spojenie na konkrétne sieťové rozhranie
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/statusVzá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/dataKorporá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/dataDocker 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/healthSOCKS5 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.