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

-kSSL/TLS

Tillåt osäkra anslutningar — hoppa över all SSL-verifiering

--cacertSSL/TLS

Verifiera servercertifikatet mot ett specifikt CA-paket

--certSSL/TLS

Tillhandahåll ett klientcertifikat för ömsesidig TLS-autentisering

--keySSL/TLS

Tillhandahåll den privata nyckelfilen för klientcertifikatet

--tlsv1.2SSL/TLS

Använd TLS version 1.2 eller högre för anslutningen

--tlsv1.3SSL/TLS

Använd TLS version 1.3 eller högre för anslutningen

--ssl-reqdSSL/TLS

Kräv SSL/TLS för anslutningen (misslyckas om inte tillgängligt)

--ciphersSSL/TLS

Ange vilka SSL-chiffer som ska användas för anslutningen

--cert-typeSSL/TLS

Ange klientcertifikattypen (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Fäst och verifiera serverns publika nyckel (HPKP-stil)

-xProxy

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-hostnameProxy

SOCKS5-proxy med DNS-upplösning genom proxyn

--proxy-cacertProxy

CA-certifikat för att verifiera HTTPS-proxyn själv

--resolveNätverk

Mappa ett specifikt värd:port-par till en anpassad IP-adress

--connect-toNätverk

Anslut till en annan värd:port än vad URL:en anger

--local-portNätverk

Ställ in det lokala portnumret eller intervallet för anslutningen

--interfaceNätverk

Bind anslutningen till ett specifikt nätverksgränssnitt

--dns-serversNätverk

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 --cacert med det faktiska CA-certifikatet istället — det är både säkrare och tydligare.
$ curl -k https://localhost:8443/api/health

Anvä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 --cacert talar 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/data

curl --cert: Klientcertifikat (ömsesidig TLS)

Vad den gör
Flaggan --cert tillhandahå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 --key om inte nyckeln är inbäddad i certifikatfilen.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Klientcertifikatets privata nyckel

Vad den gör
Flaggan --key anger 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/secure

curl --tlsv1.2: Tvinga TLS 1.2 minimum

Vad den gör
Flaggan --tlsv1.2 tvingar 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.3 tvingar 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/data

Ytterligare SSL/TLS-alternativ

--ssl-reqd

Kräv SSL/TLS för anslutningen (misslyckas om inte tillgängligt)

--ciphers

Ange vilka SSL-chiffer som ska användas för anslutningen

--cert-type

Ange klientcertifikattypen (PEM, DER, ENG, P12)

--pinnedpubkey

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_proxy istället.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Använd en SOCKS5-proxy

Vad den gör
Flaggan --socks5 talar 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-hostname fö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/data

curl --proxy-user: Proxyautentisering

Vad den gör
Flaggan --proxy-user (eller -U) skickar autentiseringsuppgifter till proxyservern. Formatet är user: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/data

curl --noproxy: Kringgå proxy för specifika värdar

Vad den gör
Flaggan --noproxy anger en kommaseparerad lista med värdar, domäner eller IP-adresser som ska kringgå proxyn och ansluta direkt. Stöder jokertecken: *.example.com matchar 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/api

Ytterligare proxyalternativ

--socks5-hostname

SOCKS5-proxy med DNS-upplösning genom proxyn

--proxy-cacert

CA-certifikat för att verifiera HTTPS-proxyn själv

curl --resolve: Anpassad DNS-upplösning

Vad den gör
Flaggan --resolve tillhandahåller en anpassad IP-adress för ett specifikt host:port-par, och kringgår helt DNS-uppslagning. Formatet är host: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/health

curl --connect-to: Omdirigera anslutning till annan värd

Vad den gör
Flaggan --connect-to omdirigerar TCP-anslutningen till ett annat host:port-par medan den behåller den ursprungliga URL:en för HTTP-förfrågan (inklusive Host-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 --resolve mappar 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/health

Ytterligare nätverksalternativ

--local-port

Ställ in det lokala portnumret eller intervallet för anslutningen

--interface

Bind anslutningen till ett specifikt nätverksgränssnitt

--dns-servers

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

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

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

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

Vanliga 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.