Alle Bereitstellungsanleitungen Bereitstellung

SSL-Zertifikatfehler in curl, Git, Python und Node.js beheben

Der Fehler SSL certificate problem: unable to get local issuer certificate (oder seine Varianten) ist eines der häufigsten Entwicklerprobleme. Er bedeutet, dass das Tool die Zertifikatskette des Servers nicht verifizieren kann — normalerweise weil die CA-Stammzertifikate auf Ihrem System veraltet oder nicht vorhanden sind.

Dieser Leitfaden behandelt korrekte Lösungen — nicht nur -k / --insecure Workarounds, die die Sicherheit deaktivieren.

Die Grundursache

Ihre Tools verifizieren SSL-Zertifikate anhand eines CA-Bundles — einer Datei mit vertrauenswürdigen Stammzertifikaten. Wenn dieses Bundle veraltet ist, fehlt oder der Server eine unvollständige Kette hat, schlägt die Verifizierung fehl.

Ihr Tool → "Ist dieses Zertifikat von einer CA signiert, der ich vertraue?"
CA-Bundle → "Ich habe das Stammzertifikat dieser CA nicht"
→ FEHLER: unable to get local issuer certificate

curl

Fehler

curl: (60) SSL certificate problem: unable to get local issuer certificate

Lösung 1: CA-Zertifikate aktualisieren (korrekte Lösung)

# Debian/Ubuntu
sudo apt update && sudo apt install ca-certificates
sudo update-ca-certificates

# CentOS/RHEL
sudo yum update ca-certificates

# macOS (Homebrew curl)
brew install ca-certificates

Lösung 2: CA-Bundle-Pfad angeben

curl --cacert /etc/ssl/certs/ca-certificates.crt https://example.com

Lösung 3: Umgebungsvariable setzen

export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Das sollten Sie nicht tun (außer zum Testen)

curl -k https://example.com  # Deaktiviert JEDE Zertifikatsverifizierung

Git

Fehler

fatal: unable to access 'https://...': SSL certificate problem: unable to get local issuer certificate

Lösung 1: CA-Zertifikate aktualisieren (wie bei curl)

sudo apt update && sudo apt install ca-certificates

Lösung 2: Git auf das richtige CA-Bundle verweisen

git config --global http.sslCAInfo /etc/ssl/certs/ca-certificates.crt

Lösung 3: Unter Windows (Git for Windows)

Git for Windows bringt eigene CA-Zertifikate mit. Aktualisieren Sie Git auf die neueste Version, oder:

git config --global http.sslBackend schannel

Dies weist Git an, den integrierten Windows-Zertifikatspeicher anstelle des mitgelieferten zu verwenden.

Das sollten Sie in der Produktion nicht tun

git config --global http.sslVerify false  # Deaktiviert JEDE SSL-Verifizierung für Git

Python (requests / pip)

Fehler (requests)

requests.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED]

Fehler (pip)

pip install ... Could not fetch URL https://...: connection error: [SSL: CERTIFICATE_VERIFY_FAILED]

Lösung 1: certifi aktualisieren (Pythons CA-Bundle)

pip install --upgrade certifi

Pythons requests-Bibliothek verwendet das certifi-Paket für CA-Zertifikate, nicht den Systemspeicher.

Lösung 2: Auf System-CA-Bundle verweisen

import requests
response = requests.get('https://example.com', verify='/etc/ssl/certs/ca-certificates.crt')

Oder per Umgebungsvariable:

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

Lösung 3: macOS Python (häufiges Problem)

macOS Python hat nach der Installation oft einen leeren Zertifikatspeicher. Führen Sie aus:

# Python-Installation finden
python3 -c "import ssl; print(ssl.get_default_verify_paths())"

# Zertifikate installieren (macOS Python von python.org)
/Applications/Python\ 3.x/Install\ Certificates.command

Lösung für pip im Speziellen

pip install --upgrade pip
pip config set global.cert /etc/ssl/certs/ca-certificates.crt

Node.js

Fehler

Error: unable to get local issuer certificate
  code: 'UNABLE_TO_GET_ISSUER_CERT_LOCALLY'

Lösung 1: NODE_EXTRA_CA_CERTS setzen

export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt

Dies fügt zusätzliche CAs hinzu, ohne das integrierte Bundle von Node zu ersetzen.

Lösung 2: Für selbstsignierte Zertifikate in der Entwicklung

// Nur für die Entwicklung — fügt eine bestimmte CA hinzu
const https = require('https');
const fs = require('fs');

const agent = new https.Agent({
  ca: fs.readFileSync('/path/to/custom-ca.pem'),
});

fetch('https://internal-service.local', { agent });

Das sollten Sie in der Produktion nicht tun

export NODE_TLS_REJECT_UNAUTHORIZED=0  # Deaktiviert JEDE SSL-Verifizierung

Unternehmens-Proxy / Enterprise-Umgebungen

Viele Unternehmensnetzwerke verwenden einen TLS-Inspektions-Proxy, der den Datenverkehr mit einer internen CA neu signiert. Ihre Tools vertrauen dieser internen CA nicht.

Lösung: Besorgen Sie das Unternehmens-CA-Zertifikat von Ihrer IT-Abteilung und fügen Sie es hinzu:

# Systemweit (Debian/Ubuntu)
sudo cp corporate-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

# Python
export REQUESTS_CA_BUNDLE=/path/to/corporate-ca-bundle.pem

# Node.js
export NODE_EXTRA_CA_CERTS=/path/to/corporate-ca.pem

# Git
git config --global http.sslCAInfo /path/to/corporate-ca-bundle.pem

Docker-Container

Docker-Images haben oft veraltete CA-Bundles. Lösung:

# Debian-basiert
RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates

# Alpine
RUN apk add --no-cache ca-certificates

Schnelldiagnose

# Testen, ob die SSL-Verbindung mit openssl funktioniert
openssl s_client -connect example.com:443 -servername example.com < /dev/null 2>/dev/null | grep "Verify return code"
# "0 (ok)" = Kette ist in Ordnung, das CA-Bundle Ihres Tools ist das Problem
# "21 (unable to verify)" = Kette des Servers ist unvollständig

# Prüfen, welches CA-Bundle Ihr System verwendet
python3 -c "import certifi; print(certifi.where())"
curl-config --ca 2>/dev/null || echo "Check /etc/ssl/certs/"

Häufig gestellte Fragen

Warum funktioniert es im Browser, aber nicht in curl/Python?

Browser pflegen ihren eigenen CA-Speicher (wird mit dem Browser aktualisiert). CLI-Tools verwenden das CA-Bundle des Systems oder ihr eigenes (Python verwendet certifi, Git for Windows bringt ein eigenes mit). Wenn das System-Bundle veraltet ist, schlagen CLI-Tools fehl, während Browser einwandfrei funktionieren.

Ist es sicher, die SSL-Verifizierung zu deaktivieren?

Zum schnellen Testen: ja, wenn Sie verstehen, dass Sie die Identität des Servers nicht verifizieren. Für Produktionscode oder CI/CD: niemals. Das Deaktivieren der Verifizierung macht Sie anfällig für Man-in-the-Middle-Angriffe. Beheben Sie immer die Grundursache (CA-Bundle aktualisieren oder die Kette des Servers reparieren).

Das Zertifikat des Servers ist in Ordnung, aber ich bekomme trotzdem Fehler

Überprüfen Sie, ob Ihr Tool einen Proxy trifft, der den Datenverkehr neu signiert. Unternehmensnetzwerke, einige VPNs und Antivirensoftware tun dies. Die CA des Proxys befindet sich nicht im Vertrauensspeicher Ihres Tools.

Verwandte Artikel

SSL & Zertifikate 2026-05-07
Die Zertifikats-Vertrauenskette erklaert
Wie Browser SSL-Zertifikate ueber eine Kette von der Root-CA ueber die Intermediate-CA bis zu Ihrem Zertifikat verifizieren. Erfahren Sie, warum die Kettenreihenfolge wichtig ist und wie Sie Fehler wie 'Zertifikat nicht vertrauenswuerdig' beheben.
SSL & Zertifikate 2026-05-08
Selbstsignierte vs. CA-signierte SSL-Zertifikate
Selbstsignierte Zertifikate loesen Browserwarnungen aus. CA-signierte Zertifikate werden automatisch als vertrauenswuerdig eingestuft. Erfahren Sie, wann welches angemessen ist, wie Sie beide erstellen und warum kostenlose CA-Zertifikate selbstsignierte fuer den Produktionseinsatz ueberfluessig machen.
Bereitstellung 2026-05-08
HTTPS für Localhost: SSL-Zertifikate für die lokale Entwicklung
Richten Sie vertrauenswürdiges HTTPS auf localhost mit mkcert ein — ohne Browser-Warnungen. Behandelt mkcert-Einrichtung, selbstsignierte Zertifikate und warum Let's Encrypt keine Zertifikate für localhost ausstellen kann.
SSL & Zertifikate 2026-05-08
OpenSSL-Befehle Spickzettel fuer SSL-Zertifikate
Kurzreferenz fuer die wichtigsten OpenSSL-Befehle: Zertifikatsablauf pruefen, Ketten verifizieren, Schluessel generieren, Formate konvertieren und TLS-Verbindungen debuggen.
Kostenloses SSL-Zertifikat im Browser erhalten
Keine Installation, kein Konto. Ihr privater Schlüssel verlässt nie Ihr Gerät.
Zertifikat erhalten