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.