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
Onveilige verbindingen toestaan — alle SSL-verificatie overslaan
Verifieer het servercertificaat tegen een specifieke CA-bundel
Een clientcertificaat opgeven voor wederzijdse TLS-authenticatie
Het privésleutelbestand voor het clientcertificaat opgeven
TLS versie 1.2 of hoger gebruiken voor de verbinding
TLS versie 1.3 of hoger gebruiken voor de verbinding
SSL/TLS vereisen voor de verbinding (mislukken als niet beschikbaar)
Opgeven welke SSL-ciphers te gebruiken voor de verbinding
Het clientcertificaattype opgeven (PEM, DER, ENG, P12)
De publieke sleutel van de server vastpinnen en verifiëren (HPKP-stijl)
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-proxy met DNS-resolutie via de proxy
CA-certificaat om de HTTPS-proxy zelf te verifiëren
Een specifiek host:poort-paar toewijzen aan een aangepast IP-adres
Verbinden met een andere host:poort dan de URL aangeeft
Het lokale poortnummer of bereik voor de verbinding instellen
De verbinding binden aan een specifieke netwerkinterface
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
--cacertmet het werkelijke CA-certificaat — dat is zowel veiliger als explicieter.
$ curl -k https://localhost:8443/api/healthGebruik -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
--cacertvlag 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/datacurl --cert: Clientcertificaat (Wederzijdse TLS)
- Wat het doet
- De
--certvlag 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/securecurl --key: Privésleutel van het clientcertificaat
- Wat het doet
- De
--keyvlag 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--keyweglaten.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Minimaal TLS 1.2 afdwingen
- Wat het doet
- De
--tlsv1.2vlag 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.3vlag 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/dataAanvullende SSL/TLS-opties
SSL/TLS vereisen voor de verbinding (mislukken als niet beschikbaar)
Opgeven welke SSL-ciphers te gebruiken voor de verbinding
Het clientcertificaattype opgeven (PEM, DER, ENG, P12)
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_proxyomgevingsvariabelen instellen.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Een SOCKS5-proxy gebruiken
- Wat het doet
- De
--socks5vlag 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-hostnameom 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/datacurl --proxy-user: Proxy-authenticatie
- Wat het doet
- De
--proxy-user(of-U) vlag stuurt authenticatiegegevens naar de proxyserver. Het formaat isuser: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/datacurl --noproxy: Proxy omzeilen voor specifieke hosts
- Wat het doet
- De
--noproxyvlag 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.comkomt 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/apiAanvullende proxy-opties
SOCKS5-proxy met DNS-resolutie via de proxy
CA-certificaat om de HTTPS-proxy zelf te verifiëren
curl --resolve: Aangepaste DNS-resolutie
- Wat het doet
- De
--resolvevlag biedt een aangepast IP-adres voor een specifiekhost:poort-paar, waarbij DNS-lookup volledig wordt omzeild. Het formaat ishost:poort:adres. Meerdere--resolvevermeldingen 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/hostsis dit per verzoek en poortspecifiek.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Verbinding omleiden naar een andere host
- Wat het doet
- De
--connect-tovlag leidt de TCP-verbinding om naar een anderhost:poort-paar terwijl de oorspronkelijke URL voor het HTTP-verzoek behouden blijft (inclusief deHost-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/hostste wijzigen. In tegenstelling tot--resolvewijst 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/healthAanvullende netwerkopties
Het lokale poortnummer of bereik voor de verbinding instellen
De verbinding binden aan een specifieke netwerkinterface
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/statusWederzijdse 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/dataBedrijfsproxy 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/dataDocker-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/healthSOCKS5-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/statusVeelgestelde 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.