Průvodce konfigurací SSL, TLS a proxy v curl
Konfigurace HTTPS certifikátů, verzí TLS, proxy serverů a vlastního DNS rozlišení v curl je zásadní pro bezpečnou API komunikaci, CI/CD pipelines a ladění síťových problémů. Tento průvodce pokrývá každý přepínač SSL, TLS, proxy a sítě — od deaktivace kontroly certifikátů pomocí -k pro lokální vývoj po nastavení vzájemného TLS pomocí --cert a směrování provozu přes SOCKS5 proxy. Každá možnost obsahuje jasné vysvětlení, bezpečnostní aspekty a příklad připravený ke kopírování.
Rychlý přehled přepínačů SSL a proxy
Povolení nezabezpečených spojení — přeskočení veškerého ověření SSL
Ověření certifikátu serveru vůči konkrétnímu CA balíku
Poskytnutí klientského certifikátu pro mutual TLS ověření
Poskytnutí souboru soukromého klíče pro klientský certifikát
Použití TLS verze 1.2 nebo vyšší pro spojení
Použití TLS verze 1.3 nebo vyšší pro spojení
Vyžadování SSL/TLS pro spojení (selhání pokud není k dispozici)
Určení SSL šifer pro spojení
Určení typu klientského certifikátu (PEM, DER, ENG, P12)
Připnutí a ověření veřejného klíče serveru (styl HPKP)
Směrování veškerého provozu přes zadaný proxy server
Směrování spojení přes SOCKS5 proxy
Poskytnutí uživatelského jména:hesla pro proxy server
Seznam hostitelů, kteří by neměli procházet přes proxy
SOCKS5 proxy s DNS rozlišením přes proxy
CA certifikát pro ověření samotného HTTPS proxy
Mapování konkrétního páru host:port na vlastní IP adresu
Připojení k jinému host:port než určuje URL
Nastavení čísla lokálního portu nebo rozsahu pro spojení
Navázání spojení na konkrétní síťové rozhraní
Použití vlastních DNS serverů místo systémových výchozích (c-ares)
curl -k: Ignorování chyb SSL certifikátu
- Co dělá
- Přepínač
-k(nebo--insecure) deaktivuje veškeré ověření SSL/TLS certifikátů. curl nebude kontrolovat, zda je certifikát serveru podepsaný důvěryhodnou CA, zda se shoduje název hostitele nebo zda certifikát nevypršel. - Kdy použít
- Používejte pouze pro lokální vývoj se self-signed certifikáty nebo testovací prostředí. Pro staging/produkci použijte místo toho
--cacertse skutečným CA certifikátem — je to bezpečnější a explicitnější.
$ curl -k https://localhost:8443/api/healthNikdy nepoužívejte -k v produkčních skriptech nebo CI/CD pipelines. Deaktivuje veškerou validaci certifikátů, čímž je vaše spojení zranitelné vůči útokům typu man-in-the-middle. Použijte --cacert pro důvěru konkrétní CA.
curl --cacert: Použití vlastního CA certifikátu
- Co dělá
- Přepínač
--cacertříká curl, aby ověřil SSL certifikát serveru vůči konkrétnímu souboru CA (Certificate Authority) balíku ve formátu PEM, místo výchozího úložiště důvěry systému. - Kdy použít
- Použijte, když váš server používá certifikát podepsaný soukromou nebo interní CA, která není v systémovém úložišti důvěry. To je běžné v korporátních prostředích, Kubernetes clusterech a Docker prostředích s interní PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Klientský certifikát (Mutual TLS)
- Co dělá
- Přepínač
--certposkytuje certifikát na straně klienta pro mutual TLS (mTLS). Při mTLS oba — server i klient — předloží certifikáty k ověření identity. Soubor certifikátu by měl být ve formátu PEM nebo PKCS#12. - Kdy použít
- Vyžadováno, když server vyžaduje ověření klientským certifikátem — běžné u bankovních API, vládních služeb, IoT komunikace a architektur s nulovým důvěryhodností. Vždy párujte s
--key, pokud klíč není vložen v cert souboru.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Soukromý klíč klientského certifikátu
- Co dělá
- Přepínač
--keyurčuje soubor soukromého klíče, který se páruje s klientským certifikátem poskytnutým přes--cert. Klíč musí odpovídat certifikátu. Pokud je klíč chráněn heslem, curl si vyžádá heslo (nebo použijte--pass). - Kdy použít
- Vždy používejte společně s
--cert. Pokud je soukromý klíč již vložen v souboru certifikátu (běžné u PKCS#12 / .p12 souborů), můžete--keyvynechat.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Vynucení minimálně TLS 1.2
- Co dělá
- Přepínač
--tlsv1.2nutí curl používat TLS 1.2 jako minimální přijatelnou verzi pro SSL/TLS handshake. Starší protokoly (TLS 1.0, 1.1, SSLv3) jsou odmítnuty. - Kdy použít
- Použijte pro vynucení minimálního bezpečnostního standardu. TLS 1.2 je vyžadován pro shodu s PCI-DSS a je podporován všemi moderními servery. Většina moderních buildů curl již používá TLS 1.2+ ve výchozím nastavení, ale tento přepínač to činí explicitním.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Vynucení minimálně TLS 1.3
- Co dělá
- Přepínač
--tlsv1.3nutí curl používat TLS 1.3 — nejrychlejší a nejbezpečnější verzi TLS. TLS 1.3 eliminuje extra round-trip v handshake (podpora 0-RTT) a odstraňuje všechny zastaralé cipher suites. - Kdy použít
- Použijte, když víte, že server podporuje TLS 1.3 a chcete nejlepší výkon a bezpečnost. Poznámka: TLS 1.3 vyžaduje OpenSSL 1.1.1+ nebo kompatibilní TLS knihovnu. Ne všechny servery ho zatím podporují.
$ curl --tlsv1.3 https://modern-api.example.com/dataDalší SSL/TLS možnosti
Vyžadování SSL/TLS pro spojení (selhání pokud není k dispozici)
Určení SSL šifer pro spojení
Určení typu klientského certifikátu (PEM, DER, ENG, P12)
Připnutí a ověření veřejného klíče serveru (styl HPKP)
curl -x: Použití HTTP/HTTPS proxy
- Co dělá
- Přepínač
-x(nebo--proxy) směruje veškerý provoz curl přes zadaný proxy server. Formát je[protocol://]host[:port]. Podporované proxy protokoly: HTTP, HTTPS, SOCKS4, SOCKS5. - Kdy použít
- Použijte pro korporátní proxy servery, ladění s nástroji jako Fiddler, Charles nebo mitmproxy, testování geografických omezení nebo když není k dispozici přímý přístup k internetu. Můžete také nastavit proměnné prostředí
http_proxy/https_proxy.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Použití SOCKS5 proxy
- Co dělá
- Přepínač
--socks5říká curl, aby pro TCP spojení použil SOCKS5 proxy. Na rozdíl od HTTP proxy SOCKS5 operuje na úrovni TCP a může zpracovat jakýkoli protokol — nejen HTTP. DNS rozlišení se provádí lokálně ve výchozím nastavení; použijte--socks5-hostnamepro rozlišení DNS přes proxy. - Kdy použít
- Použijte pro SSH tunely (
ssh -D), přístup k síti Tor nebo když proxy musí zpracovat protokoly jiné než HTTP. SOCKS5 podporuje UDP a volitelně může zpracovat DNS — díky čemuž je flexibilnější než HTTP proxy.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Ověření proxy
- Co dělá
- Přepínač
--proxy-user(nebo-U) odesílá přihlašovací údaje proxy serveru. Formát jeuser:password. To je oddělené od ověření serveru (-u). - Kdy použít
- Vyžadováno, když proxy server vyžaduje ověření — běžné v korporátních a podnikových síťových prostředích. Přihlašovací údaje se odesílají proxy, nikoli cílovému serveru.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Obejití proxy pro konkrétní hostitele
- Co dělá
- Přepínač
--noproxyurčuje čárkou oddělený seznam hostitelů, domén nebo IP adres, které by měly obejít proxy a připojit se přímo. Podporuje zástupné znaky:*.example.comodpovídá všem subdoménám. - Kdy použít
- Použijte pro vyloučení localhost, interních služeb nebo konkrétních domén z proxy. To je důležité, když je proxy nastaveno globálně přes proměnné prostředí, ale některí hostitelé (jako lokální služby) potřebují přímý přístup. Pro obejití proxy pro všechny hostitele použijte
*.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiDalší proxy možnosti
SOCKS5 proxy s DNS rozlišením přes proxy
CA certifikát pro ověření samotného HTTPS proxy
curl --resolve: Vlastní DNS rozlišení
- Co dělá
- Přepínač
--resolveposkytuje vlastní IP adresu pro konkrétní párhost:port, zcela obcházejíce DNS vyhledávání. Formát jehost:port:address. Lze zadat více--resolvezáznamů. - Kdy použít
- Zásadní pro testování před propagací DNS, ověření konkrétního backendu za load balancerem nebo lokální vývoj, kde potřebujete skutečný hostname pro validaci SSL certifikátu. Na rozdíl od úpravy
/etc/hostsje to per-request a specifické pro port.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Přesměrování spojení na jiného hostitele
- Co dělá
- Přepínač
--connect-topřesměruje TCP spojení na jiný párhost:port, přičemž zachovává původní URL pro HTTP požadavek (včetně hlavičkyHosta SNI). Formát:HOST1:PORT1:HOST2:PORT2. - Kdy použít
- Použijte pro testování konkrétního backendového serveru za load balancerem bez modifikace DNS nebo
/etc/hosts. Na rozdíl od--resolvemapuje host:port na host:port (ne na IP), což je užitečné, když cíl má také hostname.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthDalší síťové možnosti
Nastavení čísla lokálního portu nebo rozsahu pro spojení
Navázání spojení na konkrétní síťové rozhraní
Použití vlastních DNS serverů místo systémových výchozích (c-ares)
Reálné scénáře SSL a proxy
Tyto příklady kombinují více přepínačů pro řešení běžných bezpečnostních a síťových úloh při vývoji, CI/CD a v produkčních prostředích.
Testování HTTPS na Localhost
Při lokálním vývoji se self-signed certifikátem kombinujte --resolve s --cacert (nebo -k pro rychlé testování). To vám umožní použít skutečný hostname pro správné SSL/SNI bez modifikace souboru hosts.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusMutual TLS (ověření klientským certifikátem)
Některá API vyžadují, aby server i klient předložili certifikáty. Poskytněte --cert, --key a --cacert pro vytvoření plně ověřeného oboustranného TLS spojení.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataKorporátní proxy s ověřením
V korporátních sítích s povinnými proxy servery kombinujte -x s -U pro přihlašovací údaje proxy. Přidejte --noproxy pro vyloučení interních služeb z proxy.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataDocker kontejner s interní CA
Když služby v Dockeru používají certifikáty od interní CA, připojte CA certifikát do kontejneru a odkažte na něj pomocí --cacert. To je bezpečnější než -k, protože stále validuje řetěz certifikátů.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthSOCKS5 proxy přes SSH tunel
Vytvořte SOCKS5 proxy pomocí ssh -D a směrujte provoz curl přes něj pomocí --socks5. To je užitečné pro přístup k interním službám přes bastion host.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusČasto kladené otázky o curl SSL a proxy
Jak přeskočím ověření SSL certifikátu v curl?
Použijte curl -k URL nebo curl --insecure URL. To deaktivuje veškeré kontroly certifikátů — vypršení, nesoulad hostname, nedůvěryhodná CA. Používejte pouze pro lokální vývoj. Pro produkci použijte --cacert se skutečným CA certifikátem.
Jak zajistím, aby curl důvěřoval self-signed certifikátu?
Použijte curl --cacert /path/to/ca.pem URL pro zadání CA certifikátu, který podepsal váš self-signed certifikát. To je bezpečnější než -k, protože stále validuje řetěz certifikátů — důvěřuje pouze vaší konkrétní CA.
Jak zjistím, jakou verzi TLS curl používá?
Spusťte curl -v URL a hledejte řádek * SSL connection using TLSv1.x / CipherSuite v podrobném výstupu. Pro vynucení konkrétní verze použijte --tlsv1.2 nebo --tlsv1.3.
Co je mutual TLS (mTLS) a jak ho použiji s curl?
Mutual TLS vyžaduje, aby oba — server i klient — předložili certifikáty. Použijte: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Pár --cert/--key ověřuje klienta; --cacert ověřuje server.
Jak použiji curl přes HTTP proxy?
Použijte curl -x http://proxy:port URL. Pro HTTPS proxy: curl -x https://proxy:port URL. Alternativně nastavte proměnné prostředí http_proxy a https_proxy — curl je automaticky detekuje.
Jak použiji curl se SOCKS5 proxy?
Použijte curl --socks5 host:port URL pro lokální DNS rozlišení nebo curl --socks5-hostname host:port URL pro rozlišení DNS přes proxy (důležité pro soukromí/Tor). Příklad s SSH tunelem: ssh -D 1080 user@bastion, pak curl --socks5 localhost:1080 URL.
Jak se ověřím na proxy serveru v curl?
Použijte curl -x http://proxy:port -U user:password URL. Přepínač -U (nebo --proxy-user) odesílá přihlašovací údaje na proxy. To je oddělené od -u, které ověřuje cílový server.
Jak vyloučím určité hostitele z proxy v curl?
Použijte --noproxy "localhost,127.0.0.1,*.internal.com" nebo nastavte proměnnou prostředí NO_PROXY. Podporuje zástupné znaky (*.example.com). Pro kompletní obejití proxy pro jeden požadavek použijte --noproxy "*".
Jak otestuji HTTPS na localhost pomocí curl?
Pro rychlé testování: curl -k https://localhost:8443/. Pro správnou validaci: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Přístup s --resolve umožňuje správnou shodu hostname certifikátu.
Jak přepíšu DNS rozlišení pro konkrétního hostitele v curl?
Použijte curl --resolve host:port:IP URL. Příklad: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. To obejde DNS pouze pro daný pár host:port — není nutné editovat /etc/hosts.
Jak opravím chybu 'SSL certificate problem: certificate has expired' v curl?
Certifikát serveru vypršel. Řešení: (1) Obnovte certifikát na serveru, (2) Aktualizujte CA balík: curl --cacert /path/to/updated-ca.pem URL, (3) Pouze pro testování: curl -k URL. Kontrola vypršení: curl -v URL 2>&1 | grep expire.
Je bezpečné používat curl --insecure (-k) v produkci?
Ne. Přepínač -k deaktivuje veškerou validaci certifikátů — vypršení, hostname a řetěz důvěry. To činí vaše spojení zranitelným vůči útokům typu man-in-the-middle. V produkci a CI/CD pipelines vždy používejte --cacert s konkrétním CA certifikátem.