curl SSL-, TLS- und Proxy-Konfigurationsanleitung
Die Konfiguration von HTTPS-Zertifikaten, TLS-Versionen, Proxys und benutzerdefinierter DNS-Auflösung in curl ist essenziell für sichere API-Kommunikation, CI/CD-Pipelines und die Fehlersuche bei Netzwerkproblemen. Diese Anleitung behandelt alle SSL-, TLS-, Proxy- und Netzwerk-Flags — von der Deaktivierung der Zertifikatsüberprüfung mit -k über die Einrichtung von Mutual TLS mit --cert bis zur Weiterleitung von Datenverkehr über SOCKS5-Proxys. Jede Option enthält eine klare Erklärung, Sicherheitshinweise und ein kopierfertiges Beispiel.
SSL- & Proxy-Flags Kurzreferenz
Unsichere Verbindungen zulassen — alle SSL-Überprüfungen überspringen
Das Serverzertifikat gegen eine bestimmte CA-Bundle verifizieren
Ein Client-Zertifikat für die Mutual-TLS-Authentifizierung angeben
Die private Schlüsseldatei für das Client-Zertifikat angeben
TLS-Version 1.2 oder höher für die Verbindung verwenden
TLS-Version 1.3 oder höher für die Verbindung verwenden
SSL/TLS für die Verbindung erzwingen (Fehler wenn nicht verfügbar)
Festlegen, welche SSL-Cipher für die Verbindung verwendet werden
Client-Zertifikatstyp angeben (PEM, DER, ENG, P12)
Öffentlichen Schlüssel des Servers pinnen und verifizieren (HPKP-Stil)
Allen Datenverkehr über den angegebenen Proxyserver leiten
Die Verbindung über einen SOCKS5-Proxy leiten
Benutzername:Passwort für den Proxyserver angeben
Liste von Hosts, die nicht über den Proxy geleitet werden sollen
SOCKS5-Proxy mit DNS-Auflösung über den Proxy
CA-Zertifikat zur Verifizierung des HTTPS-Proxys selbst
Ein bestimmtes host:port-Paar einer benutzerdefinierten IP-Adresse zuordnen
Zu einem anderen host:port verbinden als die URL angibt
Lokale Portnummer oder -bereich für die Verbindung festlegen
Verbindung an ein bestimmtes Netzwerkinterface binden
Benutzerdefinierte DNS-Server statt Systemstandard verwenden (c-ares)
curl -k: SSL-Zertifikatfehler ignorieren
- Was es bewirkt
- Das Flag
-k(oder--insecure) deaktiviert jede SSL/TLS-Zertifikatsüberprüfung. curl prüft nicht, ob das Serverzertifikat von einer vertrauenswürdigen CA signiert ist, ob der Hostname übereinstimmt oder ob das Zertifikat abgelaufen ist. - Wann zu verwenden
- Verwenden Sie es nur für die lokale Entwicklung mit selbstsignierten Zertifikaten oder in Testumgebungen. Für Staging/Produktion verwenden Sie stattdessen
--cacertmit dem tatsächlichen CA-Zertifikat — das ist sowohl sicherer als auch expliziter.
$ curl -k https://localhost:8443/api/healthVerwenden Sie -k niemals in Produktionsskripten oder CI/CD-Pipelines. Es deaktiviert jede Zertifikatsvalidierung, was Ihre Verbindung anfällig für Man-in-the-Middle-Angriffe macht. Verwenden Sie stattdessen --cacert, um einer bestimmten CA zu vertrauen.
curl --cacert: Ein benutzerdefiniertes CA-Zertifikat verwenden
- Was es bewirkt
- Das Flag
--cacertweist curl an, das SSL-Zertifikat des Servers gegen eine bestimmte CA-Bundle-Datei (Certificate Authority) im PEM-Format zu verifizieren, anstatt den System-Trust-Store zu verwenden. - Wann zu verwenden
- Verwenden Sie es, wenn Ihr Server ein Zertifikat verwendet, das von einer privaten oder internen CA signiert wurde, die nicht im System-Trust-Store enthalten ist. Dies ist üblich in Unternehmensumgebungen, Kubernetes-Clustern und Docker-Setups mit interner PKI.
$ curl --cacert /path/to/corporate-ca.pem https://internal-api.example.com/datacurl --cert: Client-Zertifikat (Mutual TLS)
- Was es bewirkt
- Das Flag
--certstellt ein clientseitiges Zertifikat für Mutual TLS (mTLS) bereit. Bei mTLS präsentieren sowohl der Server als auch der Client Zertifikate, um die Identität des jeweils anderen zu überprüfen. Die Zertifikatsdatei muss im PEM- oder PKCS#12-Format vorliegen. - Wann zu verwenden
- Erforderlich, wenn der Server eine Client-Zertifikats-Authentifizierung verlangt — üblich bei Bank-APIs, Behördendiensten, IoT-Gerätekommunikation und Zero-Trust-Architekturen. Immer mit
--keykombinieren, es sei denn, der Schlüssel ist in der Zertifikatsdatei eingebettet.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/securecurl --key: Privater Schlüssel des Client-Zertifikats
- Was es bewirkt
- Das Flag
--keygibt die private Schlüsseldatei an, die mit dem über--certangegebenen Client-Zertifikat gepaart wird. Der Schlüssel muss mit dem Zertifikat übereinstimmen. Wenn der Schlüssel passwortgeschützt ist, fragt curl nach dem Passwort (oder verwenden Sie--pass). - Wann zu verwenden
- Immer zusammen mit
--certverwenden. Wenn der private Schlüssel bereits in der Zertifikatsdatei eingebettet ist (üblich bei PKCS#12 / .p12-Dateien), können Sie--keyweglassen.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/securecurl --tlsv1.2: Mindestens TLS 1.2 erzwingen
- Was es bewirkt
- Das Flag
--tlsv1.2zwingt curl, TLS 1.2 als Mindestversion für den SSL/TLS-Handshake zu verwenden. Ältere Protokolle (TLS 1.0, 1.1, SSLv3) werden abgelehnt. - Wann zu verwenden
- Verwenden Sie es, um einen Mindestsicherheitsstandard durchzusetzen. TLS 1.2 ist für PCI-DSS-Konformität erforderlich und wird von allen modernen Servern unterstützt. Die meisten modernen curl-Builds verwenden bereits standardmäßig TLS 1.2+, aber dieses Flag macht es explizit.
$ curl --tlsv1.2 -v https://secure.example.com/api 2>&1 | grep 'SSL connection'curl --tlsv1.3: Mindestens TLS 1.3 erzwingen
- Was es bewirkt
- Das Flag
--tlsv1.3zwingt curl, TLS 1.3 zu verwenden — die schnellste und sicherste TLS-Version. TLS 1.3 eliminiert den zusätzlichen Round-Trip im Handshake (0-RTT-Unterstützung) und entfernt alle veralteten Cipher-Suites. - Wann zu verwenden
- Verwenden Sie es, wenn Sie wissen, dass der Server TLS 1.3 unterstützt und Sie die beste Leistung und Sicherheit wünschen. Hinweis: TLS 1.3 erfordert OpenSSL 1.1.1+ oder eine kompatible TLS-Bibliothek. Nicht alle Server unterstützen es bisher.
$ curl --tlsv1.3 https://modern-api.example.com/dataWeitere SSL/TLS-Optionen
SSL/TLS für die Verbindung erzwingen (Fehler wenn nicht verfügbar)
Festlegen, welche SSL-Cipher für die Verbindung verwendet werden
Client-Zertifikatstyp angeben (PEM, DER, ENG, P12)
Öffentlichen Schlüssel des Servers pinnen und verifizieren (HPKP-Stil)
curl -x: Einen HTTP/HTTPS-Proxy verwenden
- Was es bewirkt
- Das Flag
-x(oder--proxy) leitet allen curl-Datenverkehr über den angegebenen Proxyserver. Das Format ist[protocol://]host[:port]. Unterstützte Proxy-Protokolle: HTTP, HTTPS, SOCKS4, SOCKS5. - Wann zu verwenden
- Verwenden Sie es für Unternehmensproxys, Debugging mit Tools wie Fiddler, Charles oder mitmproxy, Tests von geografischen Einschränkungen oder wenn kein direkter Internetzugang verfügbar ist. Sie können auch die Umgebungsvariablen
http_proxy/https_proxysetzen.
$ curl -x http://proxy.example.com:8080 https://api.example.com/datacurl --socks5: Einen SOCKS5-Proxy verwenden
- Was es bewirkt
- Das Flag
--socks5weist curl an, einen SOCKS5-Proxy für die TCP-Verbindung zu verwenden. Im Gegensatz zu HTTP-Proxys arbeitet SOCKS5 auf TCP-Ebene und kann jedes Protokoll verarbeiten — nicht nur HTTP. DNS-Auflösung erfolgt standardmäßig lokal; verwenden Sie--socks5-hostname, um DNS über den Proxy aufzulösen. - Wann zu verwenden
- Verwenden Sie es für SSH-Tunnel (
ssh -D), Tor-Netzwerkzugang oder wenn der Proxy Nicht-HTTP-Protokolle verarbeiten muss. SOCKS5 unterstützt UDP und kann optional DNS verarbeiten — das macht ihn flexibler als HTTP-Proxys.
$ curl --socks5 localhost:1080 https://api.example.com/datacurl --proxy-user: Proxy-Authentifizierung
- Was es bewirkt
- Das Flag
--proxy-user(oder-U) sendet Authentifizierungsdaten an den Proxyserver. Das Format istuser:password. Dies ist getrennt von der Server-Authentifizierung (-u). - Wann zu verwenden
- Erforderlich, wenn der Proxyserver eine Authentifizierung verlangt — üblich in Unternehmens- und Enterprise-Netzwerkumgebungen. Die Zugangsdaten werden an den Proxy gesendet, nicht an den Zielserver.
$ curl -x http://proxy.corp.com:3128 -U user:pass https://external-api.com/datacurl --noproxy: Proxy für bestimmte Hosts umgehen
- Was es bewirkt
- Das Flag
--noproxygibt eine kommagetrennte Liste von Hosts, Domains oder IP-Adressen an, die den Proxy umgehen und direkt verbinden sollen. Unterstützt Wildcards:*.example.comtrifft auf alle Subdomains zu. - Wann zu verwenden
- Verwenden Sie es, um localhost, interne Dienste oder bestimmte Domains vom Proxy auszuschließen. Dies ist wichtig, wenn ein Proxy global über Umgebungsvariablen gesetzt ist, aber einige Hosts (wie lokale Dienste) direkten Zugang benötigen. Verwenden Sie
*, um den Proxy für alle Hosts zu umgehen.
$ curl -x http://proxy:8080 --noproxy "localhost,127.0.0.1,*.internal.com" https://localhost:3000/apiWeitere Proxy-Optionen
SOCKS5-Proxy mit DNS-Auflösung über den Proxy
CA-Zertifikat zur Verifizierung des HTTPS-Proxys selbst
curl --resolve: Benutzerdefinierte DNS-Auflösung
- Was es bewirkt
- Das Flag
--resolvegibt eine benutzerdefinierte IP-Adresse für ein bestimmteshost:port-Paar an und umgeht DNS-Lookups vollständig. Das Format isthost:port:adresse. Mehrere--resolve-Einträge können angegeben werden. - Wann zu verwenden
- Essenziell zum Testen vor der DNS-Propagierung, zur Überprüfung eines bestimmten Backends hinter einem Load Balancer oder für die lokale Entwicklung, wenn Sie einen echten Hostnamen für die SSL-Zertifikatsvalidierung benötigen. Im Gegensatz zur Bearbeitung von
/etc/hostsgilt dies pro Anfrage und ist portspezifisch.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/healthcurl --connect-to: Verbindung zu anderem Host umleiten
- Was es bewirkt
- Das Flag
--connect-toleitet die TCP-Verbindung zu einem anderenhost:port-Paar um, behält aber die ursprüngliche URL für die HTTP-Anfrage bei (einschließlichHost-Header und SNI). Format:HOST1:PORT1:HOST2:PORT2. - Wann zu verwenden
- Verwenden Sie es, um einen bestimmten Backend-Server hinter einem Load Balancer zu testen, ohne DNS oder
/etc/hostszu ändern. Im Gegensatz zu--resolvewird hier host:port auf host:port abgebildet (nicht auf eine IP), was nützlich ist, wenn das Ziel ebenfalls einen Hostnamen hat.
$ curl --connect-to api.example.com:443:backend1.internal:8443 https://api.example.com/healthWeitere Netzwerk-Optionen
Lokale Portnummer oder -bereich für die Verbindung festlegen
Verbindung an ein bestimmtes Netzwerkinterface binden
Benutzerdefinierte DNS-Server statt Systemstandard verwenden (c-ares)
Praxisszenarien für SSL & Proxy
Diese Beispiele kombinieren mehrere Flags, um gängige Sicherheits- und Netzwerkaufgaben in Entwicklung, CI/CD und Produktionsumgebungen zu bewältigen.
HTTPS auf Localhost testen
Bei der lokalen Entwicklung mit einem selbstsignierten Zertifikat kombinieren Sie --resolve mit --cacert (oder -k zum schnellen Testen). So können Sie einen echten Hostnamen für korrektes SSL/SNI verwenden, ohne Ihre Hosts-Datei zu ändern.
$ curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/api/statusMutual TLS (Client-Zertifikats-Authentifizierung)
Einige APIs verlangen, dass sowohl Server als auch Client Zertifikate präsentieren. Geben Sie --cert, --key und --cacert an, um eine vollständig verifizierte bidirektionale TLS-Verbindung herzustellen.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://mtls-api.example.com/dataUnternehmensproxy mit Authentifizierung
In Unternehmensnetzwerken mit obligatorischen Proxyservern kombinieren Sie -x mit -U für Proxy-Anmeldedaten. Fügen Sie --noproxy hinzu, um interne Dienste vom Proxy auszuschließen.
$ curl -x http://proxy.corp.com:3128 -U user:pass --noproxy "*.internal.corp" https://external-api.com/dataDocker-Container mit interner CA
Wenn Dienste in Docker Zertifikate einer internen CA verwenden, mounten Sie das CA-Zertifikat in den Container und referenzieren Sie es mit --cacert. Dies ist sicherer als -k, da es weiterhin die Zertifikatskette validiert.
$ curl --cacert /etc/ssl/certs/internal-ca.crt https://service.docker.internal:8443/healthSOCKS5-Proxy über SSH-Tunnel
Erstellen Sie einen SOCKS5-Proxy mit ssh -D und leiten Sie curl-Datenverkehr mit --socks5 darüber. Dies ist nützlich für den Zugriff auf interne Dienste über einen Bastion-Host.
$ curl --socks5 localhost:1080 https://internal-api.example.com/statusHäufig gestellte Fragen zu curl SSL & Proxy
Wie überspringe ich die SSL-Zertifikatsüberprüfung in curl?
Verwenden Sie curl -k URL oder curl --insecure URL. Dies deaktiviert alle Zertifikatsprüfungen — Ablauf, Hostname-Nichtübereinstimmung, nicht vertrauenswürdige CA. Verwenden Sie es nur für die lokale Entwicklung. Für Produktion verwenden Sie --cacert mit dem tatsächlichen CA-Zertifikat.
Wie bringe ich curl dazu, einem selbstsignierten Zertifikat zu vertrauen?
Verwenden Sie curl --cacert /pfad/zur/ca.pem URL, um das CA-Zertifikat anzugeben, das Ihr selbstsigniertes Zertifikat signiert hat. Dies ist sicherer als -k, da es weiterhin die Zertifikatskette validiert — und nur Ihrer spezifischen CA vertraut.
Wie prüfe ich, welche TLS-Version curl verwendet?
Führen Sie curl -v URL aus und suchen Sie in der ausführlichen Ausgabe nach der Zeile * SSL connection using TLSv1.x / CipherSuite. Um eine bestimmte Version zu erzwingen, verwenden Sie --tlsv1.2 oder --tlsv1.3.
Was ist Mutual TLS (mTLS) und wie verwende ich es mit curl?
Mutual TLS erfordert, dass sowohl der Server als auch der Client Zertifikate präsentieren. Verwendung: curl --cert client.pem --key client-key.pem --cacert server-ca.pem URL. Das Paar --cert/--key authentifiziert den Client; --cacert verifiziert den Server.
Wie verwende ich curl über einen HTTP-Proxy?
Verwenden Sie curl -x http://proxy:port URL. Für einen HTTPS-Proxy: curl -x https://proxy:port URL. Alternativ setzen Sie die Umgebungsvariablen http_proxy und https_proxy — curl erkennt sie automatisch.
Wie verwende ich curl mit einem SOCKS5-Proxy?
Verwenden Sie curl --socks5 host:port URL für lokale DNS-Auflösung oder curl --socks5-hostname host:port URL, um DNS über den Proxy aufzulösen (wichtig für Datenschutz/Tor). Beispiel mit SSH-Tunnel: ssh -D 1080 user@bastion, dann curl --socks5 localhost:1080 URL.
Wie authentifiziere ich mich bei einem Proxyserver in curl?
Verwenden Sie curl -x http://proxy:port -U user:password URL. Das Flag -U (oder --proxy-user) sendet Zugangsdaten an den Proxy. Dies ist getrennt von -u, das sich beim Zielserver authentifiziert.
Wie schließe ich bestimmte Hosts vom Proxy in curl aus?
Verwenden Sie --noproxy "localhost,127.0.0.1,*.internal.com" oder setzen Sie die Umgebungsvariable NO_PROXY. Unterstützt Wildcards (*.example.com). Verwenden Sie --noproxy "*", um den Proxy für eine einzelne Anfrage vollständig zu umgehen.
Wie teste ich HTTPS auf localhost mit curl?
Zum schnellen Testen: curl -k https://localhost:8443/. Für korrekte Validierung: curl --resolve myapp.local:443:127.0.0.1 --cacert local-ca.pem https://myapp.local/. Der --resolve-Ansatz ermöglicht die korrekte Hostname-Übereinstimmung des Zertifikats.
Wie überschreibe ich die DNS-Auflösung für einen bestimmten Host in curl?
Verwenden Sie curl --resolve host:port:IP URL. Beispiel: curl --resolve api.example.com:443:192.168.1.100 https://api.example.com/. Dies umgeht DNS nur für dieses host:port-Paar — keine Bearbeitung von /etc/hosts nötig.
Wie behebe ich 'SSL certificate problem: certificate has expired' in curl?
Das Serverzertifikat ist abgelaufen. Lösungen: (1) Zertifikat auf dem Server erneuern, (2) CA-Bundle aktualisieren: curl --cacert /pfad/zur/aktualisierten-ca.pem URL, (3) Nur zum Testen: curl -k URL. Ablauf prüfen: curl -v URL 2>&1 | grep expire.
Ist es sicher, curl --insecure (-k) in der Produktion zu verwenden?
Nein. Das Flag -k deaktiviert jede Zertifikatsvalidierung — Ablauf, Hostname und Vertrauenskette. Dies macht Ihre Verbindung anfällig für Man-in-the-Middle-Angriffe. Verwenden Sie in Produktion und CI/CD-Pipelines immer --cacert mit dem spezifischen CA-Zertifikat.