curl SSL, TLS och proxykonfigurationsguide
Att konfigurera HTTPS-certifikat, TLS-versioner, proxyer och anpassad DNS-upplösning i curl är nödvändigt för säker API-kommunikation, CI/CD-pipelines och felsökning av nätverksproblem. Den här guiden täcker alla SSL-, TLS-, proxy- och nätverksflaggor — från att inaktivera certifikatkontroller med -k för lokal utveckling till att konfigurera ömsesidig TLS med --cert och dirigera trafik genom SOCKS5-proxyer. Varje alternativ inkluderar en tydlig förklaring, säkerhetsöverväganden och ett kopieringsklart exempel.
Snabbreferens för SSL- och proxyflaggor
Tillåt osäkra anslutningar — hoppa över all SSL-verifiering
Verifiera servercertifikatet mot ett specifikt CA-paket
Tillhandahåll ett klientcertifikat för ömsesidig TLS-autentisering
Tillhandahåll den privata nyckelfilen för klientcertifikatet
Använd TLS version 1.2 eller högre för anslutningen
Använd TLS version 1.3 eller högre för anslutningen
Kräv SSL/TLS för anslutningen (misslyckas om inte tillgängligt)
Ange vilka SSL-chiffer som ska användas för anslutningen
Ange klientcertifikattypen (PEM, DER, ENG, P12)
Fäst och verifiera serverns publika nyckel (HPKP-stil)
Dirigera all trafik genom den angivna proxyservern
Dirigera anslutningen genom en SOCKS5-proxy
Ange användarnamn:lösenord för proxyservern
Lista över värdar som inte ska gå genom proxyn
SOCKS5-proxy med DNS-upplösning genom proxyn
CA-certifikat för att verifiera HTTPS-proxyn själv
Mappa ett specifikt värd:port-par till en anpassad IP-adress
Anslut till en annan värd:port än vad URL:en anger
Ställ in det lokala portnumret eller intervallet för anslutningen
Bind anslutningen till ett specifikt nätverksgränssnitt
Använd anpassade DNS-servrar istället för systemstandard (c-ares)
curl -k: Ignorera SSL-certifikatfel
- Vad den gör
- Flaggan
-k(eller--insecure) inaktiverar all SSL/TLS-certifikatverifiering. curl kontrollerar inte om servercertifikatet är signerat av en betrodd CA, om värdnamnet matchar eller om certifikatet har löpt ut. - När den används
- Använd enbart för lokal utveckling med självsignerade certifikat eller testmiljöer. För staging/produktion, använd
--cacertmed det faktiska CA-certifikatet istället — det är både säkrare och tydligare.
$ curl -k https://localhost:8443/api/healthAnvänd aldrig -k i produktionsskript eller CI/CD-pipelines. Det inaktiverar all certifikatvalidering, vilket gör din anslutning sårbar för man-in-the-middle-attacker. Använd --cacert för att lita på en specifik CA istället.
curl --cacert: Använd ett anpassat CA-certifikat
- Vad den gör
- Flaggan
--cacerttalar om för curl att verifiera serverns SSL-certifikat mot en specifik CA-paketfil (Certificate Authority) i PEM-format, istället för systemets standardförtroendearkiv. - När den används
- Använd när din server använder ett certifikat signerat av en privat eller intern CA som inte finns i systemets förtroendearkiv. Detta är vanligt i företagsmiljöer, Kubernetes-kluster och Docker-konfigurationer med intern PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Klientcertifikat (ömsesidig TLS)
- Vad den gör
- Flaggan
--certtillhandahåller ett klientcertifikat för ömsesidig TLS (mTLS). Vid mTLS presenterar både servern och klienten certifikat för att verifiera varandras identitet. Certifikatfilen bör vara i PEM- eller PKCS#12-format. - När den används
- Krävs när servern kräver klientcertifikatautentisering — vanligt i bank-API:er, statliga tjänster, IoT-enhetskommunikation och zero-trust-arkitekturer. Para alltid ihop med
--keyom inte nyckeln är inbäddad i certifikatfilen.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Klientcertifikatets privata nyckel
- Vad den gör
- Flaggan
--keyanger den privata nyckelfil som paras med klientcertifikatet som tillhandahålls av--cert. Nyckeln måste matcha certifikatet. Om nyckeln är lösenordsskyddad ber curl om lösenfrasen (eller använd--pass). - När den används
- Använd alltid tillsammans med
--cert. Om den privata nyckeln redan är inbäddad i certifikatfilen (vanligt med PKCS#12 / .p12-filer) kan du utelämna--key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Tvinga TLS 1.2 minimum
- Vad den gör
- Flaggan
--tlsv1.2tvingar curl att använda TLS 1.2 som den lägsta godtagbara versionen för SSL/TLS-handskakningen. Äldre protokoll (TLS 1.0, 1.1, SSLv3) avvisas. - När den används
- Använd för att framtvinga en lägsta säkerhetsstandard. TLS 1.2 krävs för PCI-DSS-efterlevnad och stöds av alla moderna servrar. De flesta moderna curl-byggen använder redan TLS 1.2+ som standard, men denna flagga gör det explicit.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Tvinga TLS 1.3 minimum
- Vad den gör
- Flaggan
--tlsv1.3tvingar curl att använda TLS 1.3 — den snabbaste och säkraste TLS-versionen. TLS 1.3 eliminerar den extra rundturen i handskakningen (0-RTT-stöd) och tar bort alla föråldrade chiffersviter. - När den används
- Använd när du vet att servern stöder TLS 1.3 och du vill ha bästa prestanda och säkerhet. Obs: TLS 1.3 kräver OpenSSL 1.1.1+ eller ett kompatibelt TLS-bibliotek. Inte alla servrar stöder det ännu.
$ curl --tlsv1.3 https://modern-api.example.com/dataYtterligare SSL/TLS-alternativ
Kräv SSL/TLS för anslutningen (misslyckas om inte tillgängligt)
Ange vilka SSL-chiffer som ska användas för anslutningen
Ange klientcertifikattypen (PEM, DER, ENG, P12)
Fäst och verifiera serverns publika nyckel (HPKP-stil)
curl -x: Använd en HTTP/HTTPS-proxy
- Vad den gör
- Flaggan
-x(eller--proxy) dirigerar all curl-trafik genom den angivna proxyservern. Formatet är[protocol://]host[:port]. Proxyprotokoll som stöds: HTTP, HTTPS, SOCKS4, SOCKS5. - När den används
- Använd för företagsproxyservrar, felsökning med verktyg som Fiddler, Charles eller mitmproxy, testning av geografiska begränsningar eller när direkt internetåtkomst inte är tillgänglig. Du kan också ställa in miljövariablerna
http_proxy/https_proxyistället.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Använd en SOCKS5-proxy
- Vad den gör
- Flaggan
--socks5talar om för curl att använda en SOCKS5-proxy för TCP-anslutningen. Till skillnad från HTTP-proxyer opererar SOCKS5 på TCP-nivå och kan hantera vilket protokoll som helst — inte bara HTTP. DNS-upplösning sker lokalt som standard; använd--socks5-hostnameför att lösa DNS genom proxyn. - När den används
- Använd för SSH-tunnlar (
ssh -D), Tor-nätverksåtkomst eller när proxyn måste hantera icke-HTTP-protokoll. SOCKS5 stöder UDP och kan valfritt hantera DNS — vilket gör den mer flexibel än HTTP-proxyer.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Proxyautentisering
- Vad den gör
- Flaggan
--proxy-user(eller-U) skickar autentiseringsuppgifter till proxyservern. Formatet äruser:password. Detta är separat från serverautentisering (-u). - När den används
- Krävs när proxyservern kräver autentisering — vanligt i företags- och företagsnätverksmiljöer. Uppgifterna skickas till proxyn, inte till målservern.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Kringgå proxy för specifika värdar
- Vad den gör
- Flaggan
--noproxyanger en kommaseparerad lista med värdar, domäner eller IP-adresser som ska kringgå proxyn och ansluta direkt. Stöder jokertecken:*.example.commatchar alla underdomäner. - När den används
- Använd för att exkludera localhost, interna tjänster eller specifika domäner från proxykoppling. Detta är viktigt när en proxy är inställd globalt via miljövariabler men vissa värdar (som lokala tjänster) behöver direkt åtkomst. Använd
*för att kringgå proxyn för alla värdar.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiYtterligare proxyalternativ
SOCKS5-proxy med DNS-upplösning genom proxyn
CA-certifikat för att verifiera HTTPS-proxyn själv
curl --resolve: Anpassad DNS-upplösning
- Vad den gör
- Flaggan
--resolvetillhandahåller en anpassad IP-adress för ett specifikthost:port-par, och kringgår helt DNS-uppslagning. Formatet ärhost:port:address. Flera--resolve-poster kan anges. - När den används
- Nödvändig för testning före DNS-propagering, verifiering av en specifik backend bakom en lastbalanserare eller lokal utveckling där du behöver ett riktigt värdnamn för SSL-certifikatvalidering. Till skillnad från att redigera
/etc/hostsär detta per förfrågan och portspecifikt.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Omdirigera anslutning till annan värd
- Vad den gör
- Flaggan
--connect-toomdirigerar TCP-anslutningen till ett annathost:port-par medan den behåller den ursprungliga URL:en för HTTP-förfrågan (inklusiveHost-headern och SNI). Format:HOST1:PORT1:HOST2:PORT2. - När den används
- Använd för att testa en specifik backend-server bakom en lastbalanserare utan att ändra DNS eller
/etc/hosts. Till skillnad från--resolvemappar detta värd:port till värd:port (inte till en IP), vilket är användbart när målet också har ett värdnamn.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthYtterligare nätverksalternativ
Ställ in det lokala portnumret eller intervallet för anslutningen
Bind anslutningen till ett specifikt nätverksgränssnitt
Använd anpassade DNS-servrar istället för systemstandard (c-ares)
Verkliga SSL- och proxyscenarier
Dessa exempel kombinerar flera flaggor för att hantera vanliga säkerhets- och nätverksuppgifter i utveckling, CI/CD och produktionsmiljöer.
Testa HTTPS på localhost
När du utvecklar lokalt med ett självsignerat certifikat, kombinera --resolve med --cacert (eller -k för snabb testning). Detta låter dig använda ett riktigt värdnamn för korrekt SSL/SNI utan att ändra din hosts-fil.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusÖmsesidig TLS (klientcertifikatautentisering)
Vissa API:er kräver att både server och klient presenterar certifikat. Tillhandahåll --cert, --key och --cacert för att etablera en fullständigt verifierad tvåvägs-TLS-anslutning.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataFöretagsproxy med autentisering
I företagsnätverk med obligatoriska proxyservrar, kombinera -x med -U för proxyuppgifter. Lägg till --noproxy för att exkludera interna tjänster från proxykoppling.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataDocker-container med intern CA
När tjänster i Docker använder certifikat från en intern CA, montera CA-certifikatet i containern och referera det med --cacert. Detta är säkrare än -k eftersom det fortfarande validerar certifikatkedjan.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthSOCKS5-proxy via SSH-tunnel
Skapa en SOCKS5-proxy med ssh -D och dirigera curl-trafik genom den med --socks5. Detta är användbart för att komma åt interna tjänster genom en bastionvärd.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusVanliga frågor om curl SSL och proxy
Hur hoppar jag över SSL-certifikatverifiering i curl?
Använd curl -k URL eller curl --insecure URL. Detta inaktiverar alla certifikatkontroller — utgångsdatum, värdnamnsmismatch, opålitlig CA. Använd enbart för lokal utveckling. För produktion, använd --cacert med det faktiska CA-certifikatet.
Hur får jag curl att lita på ett självsignerat certifikat?
Använd curl --cacert /path/to/ca.pem URL för att ange CA-certifikatet som signerade ditt självsignerade certifikat. Detta är säkrare än -k eftersom det fortfarande validerar certifikatkedjan — och bara litar på din specifika CA.
Hur kontrollerar jag vilken TLS-version curl använder?
Kör curl -v URL och leta efter raden * SSL connection using TLSv1.x / CipherSuite i den detaljerade utdatan. För att tvinga en specifik version, använd --tlsv1.2 eller --tlsv1.3.
Vad är ömsesidig TLS (mTLS) och hur använder jag det med curl?
Ömsesidig TLS kräver att både servern och klienten presenterar certifikat. Använd: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Paret --cert/--key autentiserar klienten; --cacert verifierar servern.
Hur använder jag curl genom en HTTP-proxy?
Använd curl -x http://proxy:port URL. För en HTTPS-proxy: curl -x https://proxy:port URL. Alternativt, ställ in miljövariablerna http_proxy och https_proxy — curl hämtar dem automatiskt.
Hur använder jag curl med en SOCKS5-proxy?
Använd curl --socks5 host:port URL för lokal DNS-upplösning, eller curl --socks5-hostname host:port URL för att lösa DNS genom proxyn (viktigt för integritet/Tor). Exempel med SSH-tunnel: ssh -D 1080 user@bastion, sedan curl --socks5 localhost:1080 URL.
Hur autentiserar jag med en proxyserver i curl?
Använd curl -x http://proxy:port -U user:password URL. Flaggan -U (eller --proxy-user) skickar uppgifter till proxyn. Detta är separat från -u, som autentiserar med målservern.
Hur exkluderar jag vissa värdar från proxyn i curl?
Använd --noproxy "localhost,127.0.0.1,*.internal.com" eller ställ in miljövariabeln NO_PROXY. Stöder jokertecken (*.example.com). Använd --noproxy "*" för att kringgå proxyn helt för en enskild förfrågan.
Hur testar jag HTTPS på localhost med curl?
För snabb testning: curl -k https://localhost:8443/. För korrekt validering: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. --resolve-metoden låter certifikatets värdnamn matcha korrekt.
Hur åsidosätter jag DNS-upplösning för en specifik värd i curl?
Använd curl --resolve host:port:IP URL. Exempel: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Detta kringgår DNS för det värd:port-paret enbart — inget behov av att redigera /etc/hosts.
Hur fixar jag 'SSL certificate problem: certificate has expired' i curl?
Servercertifikatet har löpt ut. Lösningar: (1) Förnya certifikatet på servern, (2) Uppdatera ditt CA-paket: curl --cacert /path/to/updated-ca.pem URL, (3) Enbart för testning: curl -k URL. Kontrollera utgångsdatum: curl -v URL 2>&1 | grep expire.
Är det säkert att använda curl --insecure (-k) i produktion?
Nej. Flaggan -k inaktiverar all certifikatvalidering — utgångsdatum, värdnamn och förtroendekedja. Detta gör din anslutning sårbar för man-in-the-middle-attacker. Använd alltid --cacert med det specifika CA-certifikatet i produktion och CI/CD-pipelines.