curl SSL, TLS & Proxy configuratiegids

Het configureren van HTTPS-certificaten, TLS-versies, proxy's en aangepaste DNS-resolutie in curl is essentieel voor veilige API-communicatie, CI/CD-pijplijnen en het debuggen van netwerkproblemen. Deze gids behandelt elke SSL-, TLS-, proxy- en netwerkvlag — van het uitschakelen van certificaatcontroles met -k voor lokale ontwikkeling tot het opzetten van wederzijdse TLS met --cert en het routeren van verkeer via SOCKS5-proxy's. Elke optie bevat een duidelijke uitleg, beveiligingsoverwegingen en een kant-en-klaar voorbeeld.

Snelreferentie SSL & Proxy vlaggen

-kSSL/TLS

Onveilige verbindingen toestaan — alle SSL-verificatie overslaan

--cacertSSL/TLS

Verifieer het servercertificaat tegen een specifieke CA-bundel

--certSSL/TLS

Een clientcertificaat opgeven voor wederzijdse TLS-authenticatie

--keySSL/TLS

Het privésleutelbestand voor het clientcertificaat opgeven

--tlsv1.2SSL/TLS

TLS versie 1.2 of hoger gebruiken voor de verbinding

--tlsv1.3SSL/TLS

TLS versie 1.3 of hoger gebruiken voor de verbinding

--ssl-reqdSSL/TLS

SSL/TLS vereisen voor de verbinding (mislukken als niet beschikbaar)

--ciphersSSL/TLS

Opgeven welke SSL-ciphers te gebruiken voor de verbinding

--cert-typeSSL/TLS

Het clientcertificaattype opgeven (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

De publieke sleutel van de server vastpinnen en verifiëren (HPKP-stijl)

-xProxy

Al het verkeer via de opgegeven proxyserver routeren

De verbinding routeren via een SOCKS5-proxy

Gebruikersnaam:wachtwoord voor de proxyserver opgeven

Lijst van hosts die niet via de proxy moeten gaan

--socks5-hostnameProxy

SOCKS5-proxy met DNS-resolutie via de proxy

--proxy-cacertProxy

CA-certificaat om de HTTPS-proxy zelf te verifiëren

--resolveNetwerk

Een specifiek host:poort-paar toewijzen aan een aangepast IP-adres

Verbinden met een andere host:poort dan de URL aangeeft

--local-portNetwerk

Het lokale poortnummer of bereik voor de verbinding instellen

--interfaceNetwerk

De verbinding binden aan een specifieke netwerkinterface

--dns-serversNetwerk

Aangepaste DNS-servers gebruiken in plaats van systeemstandaarden (c-ares)

curl -k: SSL-certificaatfouten negeren

Wat het doet
De -k (of --insecure) vlag schakelt alle SSL/TLS-certificaatverificatie uit. curl controleert niet of het servercertificaat is ondertekend door een vertrouwde CA, of de hostnaam overeenkomt, of dat het certificaat is verlopen.
Wanneer te gebruiken
Gebruik alleen voor lokale ontwikkeling met zelfondertekende certificaten of testomgevingen. Gebruik voor staging/productie --cacert met het werkelijke CA-certificaat — dat is zowel veiliger als explicieter.
$ curl -k https://localhost:8443/api/health

Gebruik -k nooit in productiescripts of CI/CD-pijplijnen. Het schakelt alle certificaatvalidatie uit, waardoor uw verbinding kwetsbaar wordt voor man-in-the-middle-aanvallen. Gebruik --cacert om een specifieke CA te vertrouwen.

curl --cacert: Een aangepast CA-certificaat gebruiken

Wat het doet
De --cacert vlag vertelt curl om het SSL-certificaat van de server te verifiëren tegen een specifiek CA-bundelbestand (Certificate Authority) in PEM-formaat, in plaats van het standaard vertrouwensarchief van het systeem.
Wanneer te gebruiken
Gebruik wanneer uw server een certificaat gebruikt dat is ondertekend door een privé- of interne CA die niet in het systeemvertrouwensarchief staat. Dit komt veel voor in bedrijfsomgevingen, Kubernetes-clusters en Docker-setups met interne PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/data

curl --cert: Clientcertificaat (Wederzijdse TLS)

Wat het doet
De --cert vlag biedt een clientzijdig certificaat voor wederzijdse TLS (mTLS). Bij mTLS presenteren zowel de server als de client certificaten om elkaars identiteit te verifiëren. Het certificaatbestand moet in PEM- of PKCS#12-formaat zijn.
Wanneer te gebruiken
Vereist wanneer de server clientcertificaatauthenticatie eist — gebruikelijk bij bank-API's, overheidsdiensten, IoT-apparaatcommunicatie en zero-trust-architecturen. Combineer altijd met --key, tenzij de sleutel in het certificaatbestand is ingebed.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Privésleutel van het clientcertificaat

Wat het doet
De --key vlag specificeert het privésleutelbestand dat bij het clientcertificaat hoort dat is opgegeven met --cert. De sleutel moet overeenkomen met het certificaat. Als de sleutel met een wachtwoord is beveiligd, vraagt curl om de wachtwoordzin (of gebruik --pass).
Wanneer te gebruiken
Gebruik altijd samen met --cert. Als de privésleutel al in het certificaatbestand is ingebed (gebruikelijk bij PKCS#12 / .p12-bestanden), kunt u --key weglaten.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Minimaal TLS 1.2 afdwingen

Wat het doet
De --tlsv1.2 vlag dwingt curl om TLS 1.2 als minimaal aanvaardbare versie te gebruiken voor de SSL/TLS-handshake. Oudere protocollen (TLS 1.0, 1.1, SSLv3) worden geweigerd.
Wanneer te gebruiken
Gebruik om een minimale beveiligingsstandaard af te dwingen. TLS 1.2 is vereist voor PCI-DSS-naleving en wordt door alle moderne servers ondersteund. De meeste moderne curl-builds gebruiken al standaard TLS 1.2+, maar deze vlag maakt het expliciet.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'

curl --tlsv1.3: Minimaal TLS 1.3 afdwingen

Wat het doet
De --tlsv1.3 vlag dwingt curl om TLS 1.3 te gebruiken — de snelste en veiligste TLS-versie. TLS 1.3 elimineert de extra round-trip in de handshake (0-RTT-ondersteuning) en verwijdert alle verouderde cipher suites.
Wanneer te gebruiken
Gebruik wanneer u weet dat de server TLS 1.3 ondersteunt en u de beste prestaties en beveiliging wilt. Let op: TLS 1.3 vereist OpenSSL 1.1.1+ of een compatibele TLS-bibliotheek. Niet alle servers ondersteunen dit al.
$ curl --tlsv1.3 https://modern-api.example.com/data

Aanvullende SSL/TLS-opties

--ssl-reqd

SSL/TLS vereisen voor de verbinding (mislukken als niet beschikbaar)

--ciphers

Opgeven welke SSL-ciphers te gebruiken voor de verbinding

--cert-type

Het clientcertificaattype opgeven (PEM, DER, ENG, P12)

--pinnedpubkey

De publieke sleutel van de server vastpinnen en verifiëren (HPKP-stijl)

curl -x: Een HTTP/HTTPS-proxy gebruiken

Wat het doet
De -x (of --proxy) vlag routeert al het curl-verkeer via de opgegeven proxyserver. Het formaat is [protocol://]host[:poort]. Ondersteunde proxyprotocollen: HTTP, HTTPS, SOCKS4, SOCKS5.
Wanneer te gebruiken
Gebruik voor bedrijfsproxy's, debuggen met tools als Fiddler, Charles of mitmproxy, testen van geografische beperkingen, of wanneer directe internettoegang niet beschikbaar is. U kunt ook de http_proxy / https_proxy omgevingsvariabelen instellen.
$ curl -x http://proxy.example.com:8080 https://api.example.com/data

curl --socks5: Een SOCKS5-proxy gebruiken

Wat het doet
De --socks5 vlag vertelt curl om een SOCKS5-proxy te gebruiken voor de TCP-verbinding. In tegenstelling tot HTTP-proxy's werkt SOCKS5 op het TCP-niveau en kan het elk protocol verwerken — niet alleen HTTP. DNS-resolutie wordt standaard lokaal uitgevoerd; gebruik --socks5-hostname om DNS via de proxy op te lossen.
Wanneer te gebruiken
Gebruik voor SSH-tunnels (ssh -D), Tor-netwerktoegang, of wanneer de proxy niet-HTTP-protocollen moet verwerken. SOCKS5 ondersteunt UDP en kan optioneel DNS verwerken — waardoor het flexibeler is dan HTTP-proxy's.
$ curl --socks5 localhost:1080 https://api.example.com/data

curl --proxy-user: Proxy-authenticatie

Wat het doet
De --proxy-user (of -U) vlag stuurt authenticatiegegevens naar de proxyserver. Het formaat is user:password. Dit staat los van serverauthenticatie (-u).
Wanneer te gebruiken
Vereist wanneer de proxyserver authenticatie eist — gebruikelijk in bedrijfs- en ondernemingsnetwerkomgevingen. De referenties worden naar de proxy gestuurd, niet naar de doelserver.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/data

curl --noproxy: Proxy omzeilen voor specifieke hosts

Wat het doet
De --noproxy vlag specificeert een door komma's gescheiden lijst van hosts, domeinen of IP-adressen die de proxy moeten omzeilen en rechtstreeks verbinding moeten maken. Ondersteunt jokertekens: *.example.com komt overeen met alle subdomeinen.
Wanneer te gebruiken
Gebruik om localhost, interne diensten of specifieke domeinen uit te sluiten van proxying. Dit is belangrijk wanneer een proxy globaal is ingesteld via omgevingsvariabelen maar sommige hosts (zoals lokale diensten) directe toegang nodig hebben. Gebruik * om de proxy voor alle hosts te omzeilen.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/api

Aanvullende proxy-opties

--socks5-hostname

SOCKS5-proxy met DNS-resolutie via de proxy

--proxy-cacert

CA-certificaat om de HTTPS-proxy zelf te verifiëren

curl --resolve: Aangepaste DNS-resolutie

Wat het doet
De --resolve vlag biedt een aangepast IP-adres voor een specifiek host:poort-paar, waarbij DNS-lookup volledig wordt omzeild. Het formaat is host:poort:adres. Meerdere --resolve vermeldingen kunnen worden opgegeven.
Wanneer te gebruiken
Essentieel voor testen vóór DNS-propagatie, het verifiëren van een specifieke backend achter een load balancer, of lokale ontwikkeling waar u een echte hostnaam nodig heeft voor SSL-certificaatvalidatie. In tegenstelling tot het bewerken van /etc/hosts is dit per verzoek en poortspecifiek.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Verbinding omleiden naar een andere host

Wat het doet
De --connect-to vlag leidt de TCP-verbinding om naar een ander host:poort-paar terwijl de oorspronkelijke URL voor het HTTP-verzoek behouden blijft (inclusief de Host-header en SNI). Formaat: HOST1:POORT1:HOST2:POORT2.
Wanneer te gebruiken
Gebruik om een specifieke backendserver achter een load balancer te testen zonder DNS of /etc/hosts te wijzigen. In tegenstelling tot --resolve wijst dit host:poort toe aan host:poort (niet aan een IP), wat nuttig is wanneer het doel ook een hostnaam heeft.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/health

Aanvullende netwerkopties

--local-port

Het lokale poortnummer of bereik voor de verbinding instellen

--interface

De verbinding binden aan een specifieke netwerkinterface

--dns-servers

Aangepaste DNS-servers gebruiken in plaats van systeemstandaarden (c-ares)

Praktische SSL & Proxy scenario's

Deze voorbeelden combineren meerdere vlaggen om veelvoorkomende beveiligings- en netwerktaken in ontwikkeling, CI/CD en productieomgevingen aan te pakken.

HTTPS testen op localhost

Combineer bij lokale ontwikkeling met een zelfondertekend certificaat --resolve met --cacert (of -k voor snelle tests). Hiermee kunt u een echte hostnaam gebruiken voor correcte SSL/SNI zonder uw hosts-bestand te wijzigen.

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

Wederzijdse TLS (Clientcertificaatauthenticatie)

Sommige API's vereisen dat zowel server als client certificaten presenteren. Geef --cert, --key en --cacert op om een volledig geverifieerde tweerichtings-TLS-verbinding tot stand te brengen.

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

Bedrijfsproxy met authenticatie

Combineer in bedrijfsnetwerken met verplichte proxyservers -x met -U voor proxyreferenties. Voeg --noproxy toe om interne diensten uit te sluiten van proxying.

$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/data

Docker-container met interne CA

Wanneer diensten in Docker certificaten van een interne CA gebruiken, mount het CA-certificaat in de container en verwijs ernaar met --cacert. Dit is veiliger dan -k omdat het de certificaatketen nog steeds valideert.

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

SOCKS5-proxy via SSH-tunnel

Maak een SOCKS5-proxy met ssh -D en routeer curl-verkeer erdoorheen met --socks5. Dit is nuttig voor toegang tot interne diensten via een bastion-host.

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

Veelgestelde vragen over curl SSL & Proxy

Hoe sla ik SSL-certificaatverificatie over in curl?

Gebruik curl -k URL of curl --insecure URL. Dit schakelt alle certificaatcontroles uit — verlopen, hostnaam-mismatch, niet-vertrouwde CA. Gebruik alleen voor lokale ontwikkeling. Gebruik voor productie --cacert met het werkelijke CA-certificaat.

Hoe laat ik curl een zelfondertekend certificaat vertrouwen?

Gebruik curl --cacert /pad/naar/ca.pem URL om het CA-certificaat op te geven dat uw zelfondertekende cert heeft ondertekend. Dit is veiliger dan -k omdat het de certificaatketen nog steeds valideert — alleen uw specifieke CA wordt vertrouwd.

Hoe controleer ik welke TLS-versie curl gebruikt?

Voer curl -v URL uit en zoek naar de regel * SSL connection using TLSv1.x / CipherSuite in de uitgebreide uitvoer. Om een specifieke versie af te dwingen, gebruik --tlsv1.2 of --tlsv1.3.

Wat is wederzijdse TLS (mTLS) en hoe gebruik ik het met curl?

Wederzijdse TLS vereist dat zowel de server als de client certificaten presenteren. Gebruik: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Het --cert/--key-paar authenticeert de client; --cacert verifieert de server.

Hoe gebruik ik curl via een HTTP-proxy?

Gebruik curl -x http://proxy:poort URL. Voor een HTTPS-proxy: curl -x https://proxy:poort URL. U kunt ook de http_proxy en https_proxy omgevingsvariabelen instellen — curl pikt ze automatisch op.

Hoe gebruik ik curl met een SOCKS5-proxy?

Gebruik curl --socks5 host:poort URL voor lokale DNS-resolutie, of curl --socks5-hostname host:poort URL om DNS via de proxy op te lossen (belangrijk voor privacy/Tor). Voorbeeld met SSH-tunnel: ssh -D 1080 user@bastion, daarna curl --socks5 localhost:1080 URL.

Hoe authenticeer ik bij een proxyserver in curl?

Gebruik curl -x http://proxy:poort -U user:wachtwoord URL. De -U (of --proxy-user) vlag stuurt referenties naar de proxy. Dit staat los van -u, dat authenticeert bij de doelserver.

Hoe sluit ik bepaalde hosts uit van de proxy in curl?

Gebruik --noproxy "localhost,127.0.0.1,*.internal.com" of stel de NO_PROXY omgevingsvariabele in. Ondersteunt jokertekens (*.example.com). Gebruik --noproxy "*" om de proxy volledig te omzeilen voor een enkel verzoek.

Hoe test ik HTTPS op localhost met curl?

Voor snelle tests: curl -k https://localhost:8443/. Voor correcte validatie: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. De --resolve aanpak zorgt ervoor dat de certificaathostnaam correct overeenkomt.

Hoe overschrijf ik DNS-resolutie voor een specifieke host in curl?

Gebruik curl --resolve host:poort:IP URL. Voorbeeld: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Dit omzeilt DNS alleen voor dat host:poort-paar — geen noodzaak om /etc/hosts te bewerken.

Hoe los ik 'SSL certificate problem: certificate has expired' op in curl?

Het servercertificaat is verlopen. Oplossingen: (1) Vernieuw het certificaat op de server, (2) Werk uw CA-bundel bij: curl --cacert /pad/naar/bijgewerkt-ca.pem URL, (3) Alleen voor testen: curl -k URL. Verloop controleren: curl -v URL 2>&1 | grep expire.

Is het veilig om curl --insecure (-k) in productie te gebruiken?

Nee. De -k vlag schakelt alle certificaatvalidatie uit — verlopen, hostnaam en vertrouwensketen. Dit maakt uw verbinding kwetsbaar voor man-in-the-middle-aanvallen. Gebruik altijd --cacert met het specifieke CA-certificaat in productie en CI/CD-pijplijnen.