Fehlermeldung
fatal: unable to access 'https://git.example.com/team/app.git/': server verification failed: certificate signer not trusted. (CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none)
Auch ausgegeben als
- server verification failed: certificate signer not trusted. (CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none)
- server certificate verification failed. CAfile: none CRLfile: none
Die URL ist dein Remote. Ältere Releases von Debian und Ubuntu (libcurl 7.x) geben die kürzere Form „server certificate verification failed. CAfile: none CRLfile: none“ aus; „CAfile: none“ bedeutet dabei nur, dass keine CA-Datei explizit konfiguriert und das System-Bundle verwendet wurde.
Was der Fehler bedeutet
Der HTTPS-Transport von git (unter Debian und Ubuntu libcurl, gegen GnuTLS gebaut) konnte das Zertifikat des Git-Servers nicht prüfen: Kein Zertifikat in der Kette führt zu einer CA in dem Bundle, das er liest. Mit „certificate signer not trusted“ meldet GnuTLS, dass der Aussteller unbekannt ist; deine Zugangsdaten oder das Repository wurden noch gar nicht geprüft.
Warum der Fehler auftritt
Selbst gehostetes GitLab, Gitea oder Bitbucket mit Firmenzertifikat
häufigSelbst gehostete Git-Server erhalten ihre Zertifikate oft von einer internen CA. Entwickler-Laptops haben dieses Root-Zertifikat über die Geräteverwaltung; Linux-Container, CI-Runner und WSL-Distributionen meist nicht.
Der Git-Server sendet sein Zwischenzertifikat nicht
häufigGitLab, Gitea und vorgeschaltete Reverse Proxys sind häufig nur mit dem Leaf-Zertifikat konfiguriert. Browser schließen die Lücke, GnuTLS nicht.
Zwischen dir und dem Git-Host sitzt ein Proxy mit TLS-Inspektion
gelegentlichClones von github.com oder gitlab.com, die nur im Firmennetz scheitern, werden von einem Proxy neu signiert, dessen Root-Zertifikat im Bundle des Rechners fehlt.
Das Image hat kein CA-Bundle
gelegentlichEin schlankes Image mit installiertem git, aber ohne ca-certificates scheitert bei jedem HTTPS-Remote.
So behebst du den Fehler
- 1.
Nachsehen, welche Zertifikate der Git-Server sendet
Erscheint nur das Leaf-Zertifikat, korrigiere den Server. Endet die Kette bei einem Root-Zertifikat des Unternehmens oder des Proxys, installiere dieses Root-Zertifikat auf dem Client.
bash openssl s_client -connect git.example.com:443 -servername git.example.com -showcerts </dev/null 2>/dev/null \ | grep -E '^ *[0-9]+ s:|^ *i:' - 2.
Einer CA für einen einzelnen Git-Server vertrauen
http.<url>.sslCAInfo beschränkt die eigene CA auf einen Host, sodass öffentliche Remotes weiter das System-Bundle verwenden. GIT_SSL_CAINFO leistet dasselbe für einen einzelnen Befehl oder CI-Job.
bash # Trust the company CA for this server only; other remotes keep the system bundle git config --global http."https://git.example.com/".sslCAInfo /etc/ssl/private-ca/corp-root-ca.pem git ls-remote https://git.example.com/team/app.git - 3.
Root-Zertifikat zum System-Bundle hinzufügen
Ein über update-ca-certificates installiertes Root-Zertifikat behebt das Problem für git, curl, wget und Paketmanager in einem Schritt. In Docker-Images erledigst du das im Dockerfile, in der CI im Runner-Image.
bash sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt sudo update-ca-certificates # git, curl and wget read /etc/ssl/certs/ca-certificates.crt - 4.
Eigener Server: vollständige Kette konfigurieren
Die Zertifikatsdatei, die das Web-Frontend des Git-Servers verwendet, muss das Leaf-Zertifikat und danach jedes Zwischenzertifikat enthalten.
text # GitLab Omnibus (/etc/gitlab/gitlab.rb): the .crt file must contain leaf + intermediates nginx['ssl_certificate'] = "/etc/gitlab/ssl/git.example.com.crt" # then: sudo gitlab-ctl reconfigure - 5.
Vorübergehende Diagnose: Prüfung für einen einzelnen Befehl überspringen
-c http.sslVerify=false für einen einzelnen Befehl bestätigt, dass ausschließlich das Vertrauen das Problem ist. Setzt du es global, gehen deine Zugangsdaten und dein Code an jeden, der die Verbindung abfangen kann.
bash # Diagnostic only, for one command: never set http.sslVerify=false globally git -c http.sslVerify=false ls-remote https://git.example.com/team/app.git
Verwandte Fehler
fatal: unable to access 'https://git.example.com/team/app.git/': SSL certificat…git over HTTPS with libcurl + OpenSSL (Git for Windows default, macOS Homebrew, Alpine, RHEL)fatal: unable to access 'https://git.example.com/team/app.git/': SSL certificat…git over HTTPS with libcurl + OpenSSL (Git for Windows default, macOS Homebrew, Alpine, RHEL)curl: (60) SSL certificate problem: unable to get local issuer certificatecurl (OpenSSL backend)ERROR: The certificate of 'api.example.com' is not trusted.GNU Wget built with GnuTLS (Debian, Ubuntu before 22.04 used it too)