curl SSL, TLS & Proxy konfigurationsguide

Konfiguration af HTTPS-certifikater, TLS-versioner, proxyer og brugerdefineret DNS-opløsning i curl er essentielt for sikker API-kommunikation, CI/CD-pipelines og fejlfinding af netværksproblemer. Denne guide dækker alle SSL-, TLS-, proxy- og netværksflag — fra deaktivering af certifikatkontrol med -k til opsætning af mutual TLS med --cert og routing af trafik gennem SOCKS5-proxyer. Hver mulighed inkluderer en klar forklaring, sikkerhedsovervejelser og et kopierklart eksempel.

Hurtig reference for SSL & Proxy flag

-kSSL/TLS

Tillad usikre forbindelser — spring al SSL-verifikation over

--cacertSSL/TLS

Verificer servercertifikatet mod en specifik CA-bundle

--certSSL/TLS

Angiv et klientcertifikat til mutual TLS-autentificering

--keySSL/TLS

Angiv den private nøglefil til klientcertifikatet

--tlsv1.2SSL/TLS

Brug TLS version 1.2 eller højere til forbindelsen

--tlsv1.3SSL/TLS

Brug TLS version 1.3 eller højere til forbindelsen

--ssl-reqdSSL/TLS

Kræv SSL/TLS til forbindelsen (fejl hvis ikke tilgængelig)

--ciphersSSL/TLS

Angiv hvilke SSL-ciphers der skal bruges til forbindelsen

--cert-typeSSL/TLS

Angiv klientcertifikattypen (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Fastgør og verificer serverens offentlige nøgle (HPKP-stil)

-xProxy

Rut al trafik gennem den angivne proxyserver

Rut forbindelsen gennem en SOCKS5-proxy

Angiv brugernavn:adgangskode til proxyserveren

Liste over værter, der ikke skal gå gennem proxyen

--socks5-hostnameProxy

SOCKS5-proxy med DNS-opløsning gennem proxyen

--proxy-cacertProxy

CA-certifikat til at verificere selve HTTPS-proxyen

--resolveNetværk

Map et specifikt host:port-par til en brugerdefineret IP-adresse

--connect-toNetværk

Forbind til et andet host:port end URL'en angiver

--local-portNetværk

Sæt det lokale portnummer eller -interval til forbindelsen

--interfaceNetværk

Bind forbindelsen til et specifikt netværksinterface

--dns-serversNetværk

Brug brugerdefinerede DNS-servere i stedet for systemstandard (c-ares)

curl -k: Ignorer SSL-certifikatfejl

Hvad det gør
Flaget -k (eller --insecure) deaktiverer al SSL/TLS-certifikatverifikation. curl vil ikke kontrollere, om servercertifikatet er underskrevet af en betroet CA, om hostnavnet matcher, eller om certifikatet er udløbet.
Hvornår det bruges
Brug kun til lokal udvikling med self-signed certifikater eller testmiljoeer. Til staging/produktion, brug --cacert med det faktiske CA-certifikat i stedet — det er både sikrere og mere eksplicit.
$ curl -k https://localhost:8443/api/health

Brug aldrig -k i produktionsscripts eller CI/CD-pipelines. Det deaktiverer al certifikatvalidering, hvilket gør din forbindelse sårbar over for man-in-the-middle-angreb. Brug --cacert til at stole på en specifik CA i stedet.

curl --cacert: Brug et brugerdefineret CA-certifikat

Hvad det gør
Flaget --cacert fortaeller curl at verificere serverens SSL-certifikat mod en specifik CA (Certificate Authority) bundle-fil i PEM-format, i stedet for systemets standard trust store.
Hvornår det bruges
Brug når din server bruger et certifikat underskrevet af en privat eller intern CA, der ikke er i systemets trust store. Dette er almindeligt i virksomhedsmiljoeer, Kubernetes-klynger og Docker-opsætninger med intern PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Klientcertifikat (Mutual TLS)

Hvad det gør
Flaget --cert giver et klientsidecertifikat til mutual TLS (mTLS). Ved mTLS præsenterer både serveren og klienten certifikater for at verificere hinandens identitet. Certifikatfilen skal være i PEM- eller PKCS#12-format.
Hvornår det bruges
Kræves når serveren kræver klientcertifikat-autentificering — almindeligt i bank-API'er, offentlige tjenester, IoT-enhedskommunikation og zero-trust-arkitekturer. Par altid med --key medmindre nøglen er indlejret i cert-filen.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Klientcertifikatets private nøgle

Hvad det gør
Flaget --key angiver den private nøglefil, der parres med klientcertifikatet angivet via --cert. Noeglen skal matche certifikatet. Hvis nøglen er adgangskodebeskyttet, vil curl bede om adgangskoden (eller brug --pass).
Hvornår det bruges
Brug altid sammen med --cert. Hvis den private nøgle allerede er indlejret i certifikatfilen (almindeligt med PKCS#12 / .p12-filer), kan du udelade --key.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Gennemtving minimum TLS 1.2

Hvad det gør
Flaget --tlsv1.2 tvinger curl til at bruge TLS 1.2 som den mindste acceptable version til SSL/TLS-håndtrykket. Ældre protokoller (TLS 1.0, 1.1, SSLv3) afvises.
Hvornår det bruges
Brug til at håndhæve en minimumssikkerhedsstandard. TLS 1.2 kræves til PCI-DSS-overholdelse og understoettes af alle moderne servere. De fleste moderne curl-builds bruger allerede TLS 1.2+ som standard, men dette flag gør det eksplicit.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Gennemtving minimum TLS 1.3

Hvad det gør
Flaget --tlsv1.3 tvinger curl til at bruge TLS 1.3 — den hurtigste og mest sikre TLS-version. TLS 1.3 eliminerer den ekstra round-trip i håndtrykket (0-RTT-understoettelse) og fjerner alle forældede cipher suites.
Hvornår det bruges
Brug når du ved, at serveren understoetter TLS 1.3 og du vil have den bedste ydeevne og sikkerhed. Bemærk: TLS 1.3 kræver OpenSSL 1.1.1+ eller et kompatibelt TLS-bibliotek. Ikke alle servere understoetter det endnu.
$ curl --tlsv1.3 https://modern-api.example.com/data

Yderligere SSL/TLS-muligheder

--ssl-reqd

Kræv SSL/TLS til forbindelsen (fejl hvis ikke tilgængelig)

--ciphers

Angiv hvilke SSL-ciphers der skal bruges til forbindelsen

--cert-type

Angiv klientcertifikattypen (PEM, DER, ENG, P12)

--pinnedpubkey

Fastgør og verificer serverens offentlige nøgle (HPKP-stil)

curl -x: Brug en HTTP/HTTPS-proxy

Hvad det gør
Flaget -x (eller --proxy) ruter al curl-trafik gennem den angivne proxyserver. Formatet er [protocol://]host[:port]. Understoettede proxy-protokoller: HTTP, HTTPS, SOCKS4, SOCKS5.
Hvornår det bruges
Brug til virksomhedsproxyer, fejlfinding med værktøjer som Fiddler, Charles eller mitmproxy, test af geografiske begrænsninger, eller når direkte internetadgang ikke er tilgængelig. Du kan ogsaa sætte miljoevariablerne http_proxy / https_proxy i stedet.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Brug en SOCKS5-proxy

Hvad det gør
Flaget --socks5 fortaeller curl at bruge en SOCKS5-proxy til TCP-forbindelsen. I modsætning til HTTP-proxyer opererer SOCKS5 på TCP-niveau og kan håndtere enhver protokol — ikke kun HTTP. DNS-opløsning sker lokalt som standard; brug --socks5-hostname til at opløse DNS gennem proxyen.
Hvornår det bruges
Brug til SSH-tunneler (ssh -D), Tor-netværksadgang, eller når proxyen skal håndtere ikke-HTTP-protokoller. SOCKS5 understoetter UDP og kan valgfrit håndtere DNS — hvilket gør den mere fleksibel end HTTP-proxyer.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Proxy-autentificering

Hvad det gør
Flaget --proxy-user (eller -U) sender autentificeringsoplysninger til proxyserveren. Formatet er user:password. Dette er adskilt fra serverautentificering (-u).
Hvornår det bruges
Kræves når proxyserveren kræver autentificering — almindeligt i virksomheds- og enterprise-netværksmiljoeer. Oplysningerne sendes til proxyen, ikke til målserveren.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Omgå proxy for specifikke værter

Hvad det gør
Flaget --noproxy angiver en kommasepareret liste over værter, domaener eller IP-adresser, der skal omgå proxyen og forbinde direkte. Understoetter wildcards: *.example.com matcher alle subdomaener.
Hvornår det bruges
Brug til at udelukke localhost, interne tjenester eller specifikke domaener fra proxyen. Dette er vigtigt, når en proxy er sat globalt via miljoevariabler, men nogle værter (som lokale tjenester) har brug for direkte adgang. Brug * for at omgå proxyen for alle værter.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Yderligere proxy-muligheder

--socks5-hostname

SOCKS5-proxy med DNS-opløsning gennem proxyen

--proxy-cacert

CA-certifikat til at verificere selve HTTPS-proxyen

curl --resolve: Brugerdefineret DNS-opløsning

Hvad det gør
Flaget --resolve giver en brugerdefineret IP-adresse for et specifikt host:port-par, der fuldstaendigt omgår DNS-opslag. Formatet er host:port:address. Flere --resolve-indtastninger kan angives.
Hvornår det bruges
Essentielt til test foer DNS-propagering, verificering af en specifik backend bag en load balancer, eller lokal udvikling hvor du har brug for et rigtigt hostnavn til SSL-certifikatvalidering. I modsætning til redigering af /etc/hosts er dette per-anmodning og port-specifikt.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Omdiriger forbindelse til anden vært

Hvad det gør
Flaget --connect-to omdirigerer TCP-forbindelsen til et andet host:port-par, mens den beholder den originale URL til HTTP-anmodningen (inkl. Host-headeren og SNI). Format: HOST1:PORT1:HOST2:PORT2.
Hvornår det bruges
Brug til at teste en specifik backend-server bag en load balancer uden at ændre DNS eller /etc/hosts. I modsætning til --resolve mapper dette host:port til host:port (ikke til en IP), hvilket er nyttigt, når maalet ogsaa har et hostnavn.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Yderligere netværksmuligheder

--local-port

Sæt det lokale portnummer eller -interval til forbindelsen

--interface

Bind forbindelsen til et specifikt netværksinterface

--dns-servers

Brug brugerdefinerede DNS-servere i stedet for systemstandard (c-ares)

Virkelige SSL & Proxy scenarier

Disse eksempler kombinerer flere flag for at håndtere almindelige sikkerheds- og netværksopgaver i udvikling, CI/CD og produktionsmiljoeer.

Test HTTPS på Localhost

Ved lokal udvikling med et self-signed certifikat, kombiner --resolve med --cacert (eller -k til hurtig test). Dette lader dig bruge et rigtigt hostnavn til korrekt SSL/SNI uden at ændre din hosts-fil.

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

Mutual TLS (klientcertifikat-autentificering)

Nogle API'er kræver, at både server og klient præsenterer certifikater. Angiv --cert, --key og --cacert for at etablere en fuldt verificeret tovejs TLS-forbindelse.

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

Virksomhedsproxy med autentificering

I virksomhedsnetværk med obligatoriske proxyservere, kombiner -x med -U til proxy-credentials. Tilføj --noproxy for at udelukke interne tjenester fra proxyen.

$ 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 tjenester i Docker bruger certifikater fra en intern CA, monter CA-certifikatet i containeren og henvis til det med --cacert. Dette er sikrere end -k, fordi det stadig validerer certifikatkæden.

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

SOCKS5-proxy via SSH-tunnel

Opret en SOCKS5-proxy med ssh -D og rut curl-trafik igennem den med --socks5. Dette er nyttigt til at tilgå interne tjenester gennem en bastion-vært.

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

Ofte stillede spørgsmål om curl SSL & Proxy

Hvordan springer jeg SSL-certifikatverifikation over i curl?

Brug curl -k URL eller curl --insecure URL. Dette deaktiverer alle certifikatkontroller — udløb, hostnavn-uoverensstemmelse, ubetroet CA. Brug kun til lokal udvikling. Til produktion, brug --cacert med det faktiske CA-certifikat.

Hvordan får jeg curl til at stole på et self-signed certifikat?

Brug curl --cacert /path/to/ca.pem URL for at angive det CA-certifikat, der underskrev dit self-signed cert. Dette er sikrere end -k, fordi det stadig validerer certifikatkæden — og kun stoler på din specifikke CA.

Hvordan tjekker jeg, hvilken TLS-version curl bruger?

Koer curl -v URL og se efter linjen * SSL connection using TLSv1.x / CipherSuite i det detaljerede output. For at gennemtvinge en specifik version, brug --tlsv1.2 eller --tlsv1.3.

Hvad er mutual TLS (mTLS), og hvordan bruger jeg det med curl?

Mutual TLS kræver, at både serveren og klienten præsenterer certifikater. Brug: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Parret --cert/--key autentificerer klienten; --cacert verificerer serveren.

Hvordan bruger jeg curl gennem en HTTP-proxy?

Brug curl -x http://proxy:port URL. Til en HTTPS-proxy: curl -x https://proxy:port URL. Alternativt sæt miljoevariablerne http_proxy og https_proxy — curl opfanger dem automatisk.

Hvordan bruger jeg curl med en SOCKS5-proxy?

Brug curl --socks5 host:port URL til lokal DNS-opløsning eller curl --socks5-hostname host:port URL til at opløse DNS gennem proxyen (vigtigt for privatliv/Tor). Eksempel med SSH-tunnel: ssh -D 1080 user@bastion, derefter curl --socks5 localhost:1080 URL.

Hvordan autentificerer jeg med en proxyserver i curl?

Brug curl -x http://proxy:port -U user:password URL. Flaget -U (eller --proxy-user) sender oplysninger til proxyen. Dette er adskilt fra -u, som autentificerer med målserveren.

Hvordan udelukker jeg bestemte værter fra proxyen i curl?

Brug --noproxy "localhost,127.0.0.1,*.internal.com" eller sæt miljoevariablen NO_PROXY. Understoetter wildcards (*.example.com). Brug --noproxy "*" for at omgå proxyen helt for en enkelt anmodning.

Hvordan tester jeg HTTPS på localhost med curl?

Til hurtig test: curl -k https://localhost:8443/. Til korrekt validering: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. --resolve-tilgangen lader certifikatets hostnavn matche korrekt.

Hvordan tilsidesætter jeg DNS-opløsning for en specifik vært i curl?

Brug curl --resolve host:port:IP URL. Eksempel: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Dette omgår DNS kun for det host:port-par — ingen grund til at redigere /etc/hosts.

Hvordan løser jeg 'SSL certificate problem: certificate has expired' i curl?

Servercertifikatet er udløbet. Løsninger: (1) Forny certifikatet på serveren, (2) Opdater din CA-bundle: curl --cacert /path/to/updated-ca.pem URL, (3) Kun til test: curl -k URL. Tjek udløb: curl -v URL 2>&1 | grep expire.

Er det sikkert at bruge curl --insecure (-k) i produktion?

Nej. Flaget -k deaktiverer al certifikatvalidering — udløb, hostnavn og tillidskæde. Dette gør din forbindelse sårbar over for man-in-the-middle-angreb. Brug altid --cacert med det specifikke CA-certifikat i produktion og CI/CD-pipelines.