Fehlermeldung
fatal: unable to access 'https://git.example.com/team/app.git/': SSL: certificate subject name (www.example.com) does not match target hostname 'git.example.com'
Auch ausgegeben als
- SSL: certificate subject name (www.example.com) does not match target host name 'git.example.com'
Die Namen in Klammern und Anführungszeichen stammen aus deinem Zertifikat und deiner Remote-URL. libcurl 7.x gab „target host name“ aus, libcurl 8.x gibt „target hostname“ aus. OpenSSL-Builds von git (Git for Windows, Alpine) geben „SSL: no alternative certificate subject name matches target hostname '…'“ aus.
Was der Fehler bedeutet
Dem Zertifikat des Git-Servers wird vertraut, aber es ist für einen anderen Namen ausgestellt als den Host in der Remote-URL. libcurl-gnutls nennt den Subject-Namen des Zertifikats in Klammern und am Ende den Host, mit dem sich git verbunden hat. Zugangsdaten wurden nicht gesendet: Die Verbindung bricht vor jeder HTTP-Anfrage ab.
Warum der Fehler auftritt
Das Zertifikat führt den Namen des Git-Hosts nicht auf
häufigEin Git-Server ist auf einen neuen Namen umgezogen (git.example.com statt gitlab.example.com) oder hat einen zweiten Namen erhalten, ohne dass das Zertifikat neu ausgestellt wurde.
Die Remote-URL verwendet einen Alias oder eine IP-Adresse
häufigClones, die über einen internen Alias, eine IP-Adresse oder einen alten Hostnamen angelegt wurden, behalten diese URL in .git/config, lange nachdem das Zertifikat für den kanonischen Namen ausgestellt wurde.
Der Proxy vor dem Git-Server sendet sein Standardzertifikat
gelegentlichEin Reverse Proxy oder Ingress ohne Regel für den angefragten Namen präsentiert das Zertifikat eines anderen virtuellen Hosts.
So behebst du den Fehler
- 1.
Remote-URL mit dem Zertifikat vergleichen
Gib die Remote-URL sowie Subject und SAN-Liste des Zertifikats aus; die Abweichung ist meist offensichtlich.
bash git remote get-url origin echo | openssl s_client -connect git.example.com:443 -servername git.example.com 2>/dev/null \ | openssl x509 -noout -subject -ext subjectAltName - 2.
Remote auf einen Namen umstellen, den das Zertifikat abdeckt
git remote set-url ändert die in der Konfiguration des Repositorys gespeicherte URL, ohne dass du neu klonen musst.
bash # Use the name the certificate was issued for git remote set-url origin https://gitlab.example.com/team/app.git - 3.
Eigener Server: Zertifikat für den angezeigten Namen ausstellen
Sorge dafür, dass die SAN-Liste des Zertifikats zur URL passt, die der Git-Server für Clones anzeigt (external_url bei GitLab, ROOT_URL bei Gitea), damit kopierte URLs die Zertifikatsprüfung bestehen.
text # GitLab Omnibus: the external URL decides the certificate name and the clone URLs external_url "https://git.example.com" # then: sudo gitlab-ctl reconfigure
Verwandte Fehler
curl: (60) SSL: no alternative certificate subject name matches target hostname…curl (OpenSSL backend)fatal: unable to access 'https://git.example.com/team/app.git/': server verific…git over HTTPS with libcurl-gnutls (Debian, Ubuntu)The certificate's owner does not match hostname 'api.example.com'GNU Wget (GnuTLS build); the alias is the OpenSSL build's wording