ssl certificate problem unable to get local issuer certificate

ssl certificate problem unable to get local issuer certificate

Du sitzt vor deinem Terminal, willst ein Paket installieren oder eine API abfragen und plötzlich knallt es. Nichts geht mehr. Dein System verweigert den Dienst, weil die Vertrauenskette unterbrochen ist. Das ist kein kleiner Bug, sondern eine Sicherheitsmauer. Wer mit PHP, Python oder Git arbeitet, stolpert früher oder später über die Meldung SSL Certificate Problem Unable To Get Local Issuer Certificate. Es ist frustrierend. Ich habe selbst Nächte damit verbracht, Konfigurationsdateien zu durchforsten, nur um festzustellen, dass eine einzige kleine Zeile im Pfad fehlte. Das Problem liegt meistens nicht am Server, den du erreichen willst. Es liegt an deinem eigenen Rechner, der nicht weiß, wem er vertrauen soll. In diesem Artikel zeige ich dir, wie du dieses Hindernis aus dem Weg räumst, ohne deine Sicherheit zu kompromittieren.

Was hinter dem Fehler steckt

Wenn dein Computer eine verschlüsselte Verbindung aufbaut, prüft er das Zertifikat des Gegenübers. Das ist wie ein digitaler Ausweis. Aber ein Ausweis ist nur wertvoll, wenn eine vertrauenswürdige Behörde ihn abgestempelt hat. Dein Betriebssystem oder deine Programmierumgebung führt eine Liste dieser Behörden mit sich. Das sind die sogenannten Root-Zertifikate. Wenn diese Liste veraltet ist oder der Zugriff darauf scheitert, siehst du die Warnung SSL Certificate Problem Unable To Get Local Issuer Certificate. Das System sagt dir damit schlichtweg: Ich sehe das Zertifikat, aber ich habe keine Ahnung, ob derjenige, der es unterschrieben hat, seriös ist.

Die Rolle der Certificate Authority

Jede Webseite mit HTTPS nutzt ein Zertifikat, das von einer Certificate Authority (CA) ausgestellt wurde. Bekannte Namen sind Let's Encrypt, DigiCert oder Sectigo. Dein lokales System muss eine Kopie des Root-Zertifikats dieser Anbieter besitzen. Fehlt diese Kopie, bricht die Verbindung ab. Das passiert oft bei frischen Installationen von Entwicklungsumgebungen wie XAMPP oder wenn du Tools wie cURL direkt ansprichst. Es ist ein Schutzmechanismus. Ohne diesen Abgleich könnte jeder Angreifer eine gefälschte Identität vorgaukeln.

Warum einfache Umgehungen gefährlich sind

Im Netz findest du oft den Rat, die Verifizierung einfach abzuschalten. Bei cURL wäre das die Option -k oder --insecure. In PHP setzen viele CURLOPT_SSL_VERIFYPEER auf false. Mach das nicht. Niemals. Das ist so, als würdest du deine Haustür sperrangelweit offen lassen, nur weil der Schlüssel klemmt. Du öffnest Tür und Tor für Man-in-the-Middle-Angriffe. Dein Code schickt dann sensible Daten wie API-Keys oder Passwörter im schlimmsten Fall an einen Angreifer, der sich als dein Server ausgibt. Wir reparieren die Kette, anstatt sie zu sprengen.

SSL Certificate Problem Unable To Get Local Issuer Certificate in PHP beheben

PHP-Entwickler unter Windows trifft es besonders häufig. Die Standardinstallation von PHP bringt oft keine aktuelle Liste an vertrauenswürdigen Zertifikaten mit. Du versuchst, eine Verbindung zu einer externen Schnittstelle aufzubauen, und die Anwendung bricht ab. Ich habe das oft bei WordPress-Installationen auf lokalen Testservern gesehen. Die Lösung ist glücklicherweise recht simpel, erfordert aber einen manuellen Eingriff in die Systemkonfiguration.

Die CA-Bundle Datei herunterladen

Zuerst brauchst du eine aktuelle Liste der Root-Zertifikate. Die sicherste Quelle hierfür ist die offizielle Seite von cURL. Dort gibt es eine Datei namens cacert.pem, die regelmäßig aktualisiert wird. Hier findest du die aktuelle cacert.pem. Lade diese Datei herunter und speichere sie an einem Ort, an dem sie dauerhaft bleiben kann. Ein guter Platz ist zum Beispiel dein PHP-Installationsverzeichnis oder ein zentraler Ordner für Entwickler-Tools.

Die php.ini anpassen

Jetzt musst du PHP mitteilen, wo diese Datei liegt. Suche deine php.ini. Wenn du nicht weißt, wo sie ist, erstelle eine kleine Datei mit dem Inhalt <?php phpinfo(); ?> und rufe sie im Browser auf. Dort steht der Pfad zur geladenen Konfigurationsdatei. Öffne die php.ini mit einem Texteditor und suche nach der Zeile curl.cainfo. Wahrscheinlich ist sie mit einem Semikolon auskommentiert. Entferne das Semikolon und trage den absoluten Pfad zu deiner cacert.pem ein. Das sieht dann etwa so aus: curl.cainfo = "C:\php\extras\ssl\cacert.pem". Achte darauf, dass du keine relativen Pfade verwendest. Windows-Nutzer sollten Backslashes verwenden und den Pfad in Anführungszeichen setzen.

Den Webserver neu starten

Änderungen an der php.ini werden erst aktiv, wenn der Prozess neu gestartet wird. Wenn du Apache nutzt, starte den Dienst neu. Bei Nginx musst du PHP-FPM neu starten. Danach sollte die Kommunikation reibungslos funktionieren. Falls es immer noch hakt, prüfe, ob es eine zweite Einstellung namens openssl.cafile gibt. Auch hier solltest du den Pfad zur Zertifikatsdatei eintragen. Doppelt hält besser. Es gibt Fälle, in denen Erweiterungen unterschiedliche Mechanismen für den SSL-Handshake nutzen.

Probleme mit Git und anderen Tools lösen

Manchmal tritt das Problem nicht im Code auf, sondern wenn du versuchst, Code von GitHub oder GitLab zu klonen. Git nutzt eine eigene Instanz von cURL und hat oft seine eigenen Vorstellungen davon, wo die Zertifikate liegen sollten. Wenn dein Unternehmen einen Proxy mit SSL-Inspection einsetzt, wird es besonders kompliziert. Der Proxy bricht die Verschlüsselung auf und signiert den Traffic mit einem internen Firmenzertifikat um. Git kennt dieses interne Zertifikat natürlich nicht und verweigert den Zugriff.

Git die richtige Zertifikatsdatei zuweisen

Du kannst Git explizit sagen, welche Datei es nutzen soll. Das geht über die globale Konfiguration. Der Befehl lautet: git config --global http.sslcainfo "C:/Pfad/zu/deiner/cacert.pem". Wichtig ist hier, dass du in der Git-Bash normale Slashes / verwendest, auch unter Windows. Wenn du das Firmenzertifikat deines Arbeitgebers hast, kannst du es einfach am Ende deiner cacert.pem Datei mit einem Texteditor einfügen. Kopiere einfach den Block von -----BEGIN CERTIFICATE----- bis -----END CERTIFICATE----- hinein. Damit vertraut Git sowohl den öffentlichen CAs als auch deinem internen Proxy.

Python und das Certifi Paket

Python-Nutzer kennen das Problem ebenfalls, besonders wenn sie die requests Library verwenden. Python bringt oft sein eigenes Paket für Zertifikate mit, das sich certifi nennt. Manchmal greift Python aber auf den System-Store zu, der veraltet sein könnte. Du kannst prüfen, wo certifi seine Zertifikate sucht, indem du in der Python-Konsole import certifi; print(certifi.where()) eingibst. Wenn du eine Fehlermeldung erhältst, kann ein Update des Pakets helfen. Ein einfaches pip install --upgrade certifi bewirkt oft Wunder. Das Paket wird von den Maintainern sehr aktuell gehalten.

🔗 Weiterlesen: asus rog strix b650e-f

Besondere Fälle bei Linux Distributionen

Unter Linux ist das Management von Zertifikaten meist besser gelöst als unter Windows. Dennoch gibt es Situationen, in denen die Fehlermeldung auftaucht. Oft liegt es daran, dass das Paket ca-certificates nicht installiert oder veraltet ist. Auf Debian oder Ubuntu Systemen kannst du das mit sudo apt-get update && sudo apt-get install ca-certificates beheben. Danach solltest du den Befehl sudo update-ca-certificates ausführen. Dieser Befehl aktualisiert den zentralen Speicher unter /etc/ssl/certs und erstellt die notwendigen Symlinks für Anwendungen.

Zertifikate manuell hinzufügen unter Linux

Wenn du ein eigenes, selbstsigniertes Zertifikat hast, musst du es unter Linux an die richtige Stelle kopieren. Normalerweise ist das /usr/local/share/ca-certificates/. Achte darauf, dass die Datei die Endung .crt hat. Nach dem Kopieren führst du wieder sudo update-ca-certificates aus. Das System scannt den Ordner und fügt dein neues Zertifikat zur globalen Liste hinzu. Programme wie wget oder curl greifen dann automatisch darauf zu. Das ist der saubere Weg. Kopiere niemals Dateien direkt nach /etc/ssl/certs, da diese bei Updates überschrieben werden könnten.

Docker Container und SSL

Ein Klassiker: In deinem Docker-Container läuft die Anwendung nicht, obwohl sie auf deinem Rechner funktioniert. Das liegt daran, dass Docker-Images oft minimalistisch sind. Ein alpine Image hat standardmäßig kaum Zertifikate an Bord. Du musst im Dockerfile sicherstellen, dass die Zertifikate installiert werden. Ein kurzes RUN apk add --no-cache ca-certificates im Dockerfile spart dir Stunden der Fehlersuche. Wenn dein Container mit externen APIs kommuniziert, ist dieser Schritt obligatorisch. Viele Entwickler vergessen das und wundern sich über Verbindungsfehler in der Produktion.

Warum das Problem heute öfter auftritt als früher

Vielleicht hast du das Gefühl, dass diese Fehlermeldung früher seltener war. Das stimmt sogar. Die Sicherheitsstandards im Web sind massiv gestiegen. Früher war vieles noch über unverschlüsseltes HTTP erreichbar. Heute ist HTTPS der Standard. Organisationen wie Let's Encrypt haben dafür gesorgt, dass jeder kostenlos Zertifikate bekommt. Das ist super für die Sicherheit, aber es bedeutet auch mehr Arbeit für die Validierung. Die Zertifikate haben heute oft kürzere Laufzeiten. Das Root-Zertifikat von IdenTrust, das viele Jahre lang Let's Encrypt gestützt hat, ist vor einiger Zeit abgelaufen. Das hat weltweit zu Problemen auf älteren Geräten geführt.

Veraltete Betriebssysteme als Fehlerquelle

Wenn du noch Windows 7 oder ein sehr altes macOS nutzt, wirst du diesen Fehler immer häufiger sehen. Diese Systeme erhalten keine Updates mehr für ihren Zertifikatsspeicher. Die Root-Zertifikate darin laufen nacheinander ab. Dein Browser aktualisiert sich vielleicht noch selbst, aber das restliche System bleibt auf dem Stand von vor fünf Jahren. In solchen Fällen hilft oft nur ein manuelles Update des Speichers oder der Umstieg auf ein modernes Betriebssystem. Sicherheit ist ein bewegliches Ziel. Wer stehen bleibt, verliert den Anschluss.

Sicherheitssoftware als Störfaktor

Manchmal ist dein Antivirenprogramm schuld. Moderne Suiten scannen auch verschlüsselten Traffic. Dazu installieren sie ein lokales Root-Zertifikat und schalten sich als Proxy zwischen deinen Browser und das Internet. Wenn die Software nicht sauber konfiguriert ist oder dein Entwicklungstool diesen lokalen Proxy nicht erkennt, erscheint der Fehler. Teste kurzzeitig, ob das Problem verschwindet, wenn du den Webschutz deines Antivirenprogramms deaktivierst. Wenn ja, musst du das Zertifikat des Antivirenprogramms manuell in deine Programmierumgebung importieren.

Nicht verpassen: shimano steps sc e6010

Praktische Schritte zur Fehlerbehebung

Damit du nicht den Überblick verlierst, habe ich hier eine klare Liste der nächsten Schritte für dich. Gehe sie der Reihe nach durch. Meistens ist das Problem nach dem zweiten Punkt erledigt.

  1. Identifiziere die Umgebung: Tritt der Fehler in PHP, Python, Git oder direkt im Browser auf? Jedes Tool hat seinen eigenen Speicher.
  2. Lade eine aktuelle CA-Datei herunter: Besorge dir die cacert.pem von einer vertrauenswürdigen Quelle wie der cURL-Webseite.
  3. Pfade prüfen: Stelle sicher, dass dein Tool weiß, wo die Datei liegt. In PHP nutzt du die php.ini, in Git den Befehl git config.
  4. Zertifikatskette prüfen: Nutze Tools wie den SSL Server Test von Qualys SSL Labs, um zu sehen, ob der Server selbst seine Kette korrekt sendet. Manchmal fehlt dort das Intermediate-Zertifikat.
  5. System-Updates: Halte dein Betriebssystem und deine Pakete aktuell. Ein veraltetes ca-certificates Paket ist die häufigste Ursache unter Linux.
  6. Neustart: Vergiss nicht, Dienste wie Apache oder PHP-FPM neu zu starten, nachdem du Konfigurationsdateien geändert hast.

Es ist nervig, wenn die Technik streikt. Aber dieser spezielle Fehler zeigt eigentlich nur, dass die Sicherheitsmechanismen deines Systems funktionieren. Es weigert sich, einer Verbindung zu vertrauen, die nicht einwandfrei verifiziert werden kann. Wenn du die oben genannten Schritte befolgst, behebst du die Ursache an der Wurzel, anstatt nur das Symptom zu bekämpfen. Das macht deinen Code stabiler und deine Arbeit sicherer. Bleib dran, setze die Pfade korrekt und die Fehlermeldung wird der Vergangenheit angehören. Das ist kein Hexenwerk, sondern nur ein bisschen digitale Buchhaltung. Viel Erfolg beim Fixen deiner Umgebung.

PK

Philipp Krüger

Seit Jahren begleitet Philipp Krüger Themen aus Politik, Wirtschaft und Gesellschaft mit klarer Einordnung.