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

-kSSL/TLS

Unsichere Verbindungen zulassen — alle SSL-Überprüfungen überspringen

--cacertSSL/TLS

Das Serverzertifikat gegen eine bestimmte CA-Bundle verifizieren

--certSSL/TLS

Ein Client-Zertifikat für die Mutual-TLS-Authentifizierung angeben

--keySSL/TLS

Die private Schlüsseldatei für das Client-Zertifikat angeben

--tlsv1.2SSL/TLS

TLS-Version 1.2 oder höher für die Verbindung verwenden

--tlsv1.3SSL/TLS

TLS-Version 1.3 oder höher für die Verbindung verwenden

--ssl-reqdSSL/TLS

SSL/TLS für die Verbindung erzwingen (Fehler wenn nicht verfügbar)

--ciphersSSL/TLS

Festlegen, welche SSL-Cipher für die Verbindung verwendet werden

--cert-typeSSL/TLS

Client-Zertifikatstyp angeben (PEM, DER, ENG, P12)

--pinnedpubkeySSL/TLS

Öffentlichen Schlüssel des Servers pinnen und verifizieren (HPKP-Stil)

-xProxy

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

SOCKS5-Proxy mit DNS-Auflösung über den Proxy

--proxy-cacertProxy

CA-Zertifikat zur Verifizierung des HTTPS-Proxys selbst

--resolveNetzwerk

Ein bestimmtes host:port-Paar einer benutzerdefinierten IP-Adresse zuordnen

--connect-toNetzwerk

Zu einem anderen host:port verbinden als die URL angibt

--local-portNetzwerk

Lokale Portnummer oder -bereich für die Verbindung festlegen

--interfaceNetzwerk

Verbindung an ein bestimmtes Netzwerkinterface binden

--dns-serversNetzwerk

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 --cacert mit dem tatsächlichen CA-Zertifikat — das ist sowohl sicherer als auch expliziter.
$ curl -k https://localhost:8443/api/health

Verwenden 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 --cacert weist 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/data

curl --cert: Client-Zertifikat (Mutual TLS)

Was es bewirkt
Das Flag --cert stellt 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 --key kombinieren, es sei denn, der Schlüssel ist in der Zertifikatsdatei eingebettet.
$ curl --cert client.pem --key client-key.pem https://mtls-api.example.com/secure

curl --key: Privater Schlüssel des Client-Zertifikats

Was es bewirkt
Das Flag --key gibt die private Schlüsseldatei an, die mit dem über --cert angegebenen 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 --cert verwenden. Wenn der private Schlüssel bereits in der Zertifikatsdatei eingebettet ist (üblich bei PKCS#12 / .p12-Dateien), können Sie --key weglassen.
$ curl --cert client.pem --key client-key.pem --cacert server-ca.pem https://api.example.com/secure

curl --tlsv1.2: Mindestens TLS 1.2 erzwingen

Was es bewirkt
Das Flag --tlsv1.2 zwingt 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.3 zwingt 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/data

Weitere SSL/TLS-Optionen

--ssl-reqd

SSL/TLS für die Verbindung erzwingen (Fehler wenn nicht verfügbar)

--ciphers

Festlegen, welche SSL-Cipher für die Verbindung verwendet werden

--cert-type

Client-Zertifikatstyp angeben (PEM, DER, ENG, P12)

--pinnedpubkey

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

curl --socks5: Einen SOCKS5-Proxy verwenden

Was es bewirkt
Das Flag --socks5 weist 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/data

curl --proxy-user: Proxy-Authentifizierung

Was es bewirkt
Das Flag --proxy-user (oder -U) sendet Authentifizierungsdaten an den Proxyserver. Das Format ist user: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/data

curl --noproxy: Proxy für bestimmte Hosts umgehen

Was es bewirkt
Das Flag --noproxy gibt eine kommagetrennte Liste von Hosts, Domains oder IP-Adressen an, die den Proxy umgehen und direkt verbinden sollen. Unterstützt Wildcards: *.example.com trifft 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/api

Weitere Proxy-Optionen

--socks5-hostname

SOCKS5-Proxy mit DNS-Auflösung über den Proxy

--proxy-cacert

CA-Zertifikat zur Verifizierung des HTTPS-Proxys selbst

curl --resolve: Benutzerdefinierte DNS-Auflösung

Was es bewirkt
Das Flag --resolve gibt eine benutzerdefinierte IP-Adresse für ein bestimmtes host:port-Paar an und umgeht DNS-Lookups vollständig. Das Format ist host: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/hosts gilt dies pro Anfrage und ist portspezifisch.
$ curl --resolve api.example.com:443:127.0.0.1 https://api.example.com/health

curl --connect-to: Verbindung zu anderem Host umleiten

Was es bewirkt
Das Flag --connect-to leitet die TCP-Verbindung zu einem anderen host:port-Paar um, behält aber die ursprüngliche URL für die HTTP-Anfrage bei (einschließlich Host-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/hosts zu ändern. Im Gegensatz zu --resolve wird 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/health

Weitere Netzwerk-Optionen

--local-port

Lokale Portnummer oder -bereich für die Verbindung festlegen

--interface

Verbindung an ein bestimmtes Netzwerkinterface binden

--dns-servers

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

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

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

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

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

Hä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.