Skip to main content

Informationen zur Verifizierung einer Commit-Signatur

Mithilfe von GPG, SSH oder S/MIME können Sie Tags und Commits lokal signieren. Diese Tags oder Commits sind auf GitHub als verifiziert gekennzeichnet, sodass andere darauf vertrauen können, dass die Änderungen aus einer vertrauenswürdigen Quelle stammen.

Informationen zur Verifizierung einer Commit-Signatur

Du kannst Commits und Tags lokal signieren, um anderen Personen Sicherheit in Bezug auf den Ursprung einer vorgenommenen Änderung zu geben. Wenn ein Commit oder Tag über eine GPG-, SSH- oder S/MIME-Signatur verfügt, die kryptografisch überprüft werden kann, GitHub markiert den Commit oder das Tag Überprüft."

Screenshot eines Commits in der Commitliste für ein Repository. „Überprüft“ ist mit einem orangefarbenen Rand hervorgehoben.

Wenn ein Commit oder tag über eine Signatur verfügt, die nicht überprüft werden kann, GitHub wird der Commit oder das Tag "Nicht überprüft" markiert.

Für die meisten Einzelbenutzer ist GPG oder SSH die beste Wahl, um Commits zu signieren. S/MIME-Signaturen werden normalerweise im Kontext einer größeren Organisation benötigt. SSH-Signaturen sind am einfachsten zu generieren. Sie können sogar Ihren vorhandenen Authentifizierungsschlüssel hochladen, um GitHub auch als Signaturschlüssel zu verwenden. Das Generieren eines GPG Signaturschlüssels ist aufwändiger als das Generieren eines SSH-Schlüssels, aber GPG bietet Funktionen, die SSH nicht bereitstellt. Ein GPG-Schlüssel kann ablaufen oder widerrufen werden, wenn er nicht mehr verwendet wird. Die GPG-Signatur kann Informationen darüber enthalten, ob sie abgelaufen oder widerrufen wurde.

Verifizieren einer persistenten Commitsignatur

Unabhängig von der Signaturwahl – GPG, SSH oder S/MIME – bleibt eine Commitsignatur, sobald sie verifiziert wurde, im Netzwerk des Repositories weiterhin verifiziert. Weitere Informationen findest du unter Zusammenhänge zwischen Repositorys verstehen.

Wenn eine Commit-Signatur beim Pushen nach GitHub verifiziert wird, wird zusammen mit dem Commit ein Verifizierungsdatensatz gespeichert. Dieser Datensatz kann nicht bearbeitet werden und bleibt erhalten, sodass Signaturen überprüft bleiben, auch wenn Signaturschlüssel rotiert oder widerrufen werden oder wenn Mitwirkende die Organisation verlassen.

Im Überprüfungseintrag ist der Abschluss der Überprüfung mit einem Zeitstempel markiert. Dieser persistente Eintrag stellt einen konsistenten überprüften Zustand und einen durchgängigen Verlauf von Beiträgen innerhalb des Repositorys sicher. Sie können diesen Zeitstempel anzeigen, indem Sie den Mauszeiger über die Kennzeichnung „Überprüft“ auf GitHub bewegen oder indem Sie über die REST-API auf den Commit zugreifen, der das Feld verified_at enthält. Weitere Informationen findest du unter REST-API-Endpunkte für Commits.

Die dauerhafte Überprüfung von Commit-Signaturen gilt für neue Commits, die auf GitHub gepusht werden. Für alle Commits, die älter sind als diese Funktion, wird das nächste Mal, wenn die Signatur des Commits auf GitHub überprüft wird, ein dauerhafter Eintrag erstellt. Dies trägt dazu bei, dass die Verifizierungsstatus über den gesamten Verlauf des Repositorys hinweg stabil und zuverlässig bleiben.

Informationen zum Deaktivieren der Überprüfung der dauerhaften Commitsignatur findest du unter Deaktivierung der persistenten Commit-Überprüfung.

Einträge bleiben auch nach Widerruf und Ablauf erhalten.

Die Verifizierung persistenter Commitsignaturen spiegelt den verifizierten Zustand eines Commits zum Zeitpunkt der Verifizierung wider. Dies bedeutet, dass zuvor überprüfte Commits ihren überprüften Status beibehalten, der auf einem bei der ersten Überprüfung erstellten Eintrag basieren, auch wenn ein Signaturschlüssel später widerrufen wird, abläuft oder anderweitig geändert wird. GitHub wird zuvor signierte Commits nicht erneut verifizieren und ihren Verifizierungsstatus nicht rückwirkend aufgrund von Änderungen am Status des Schlüssels anpassen. Organisationen müssen Schlüsselstatus möglicherweise direkt verwalten, um sie an ihre Sicherheitsrichtlinien anzupassen – insbesondere dann, wenn häufige Schlüsselrotation oder häufiger Schlüsselwiderruf geplant sind.

Der Überprüfungseintrag ist auf sein Repository-Netzwerk beschränkt.

Der Überprüfungseintrag ist im Repositorynetzwerk persistent, d. h., wenn derselbe Commit erneut an dasselbe Repository oder an einen seiner Forks gepusht wird, wird der vorhandene Überprüfungseintrag wiederverwendet. Dies ermöglicht GitHub es, einen konsistenten überprüften Status in verwandten Repositorys beizubehalten, ohne den Commit jedes Mal erneut zu überprüfen, wenn es im Netzwerk angezeigt wird. Diese Persistenz verstärkt eine einheitliche und zuverlässige Sicht auf die Commitauthentizität in allen Instanzen des Commits innerhalb des Repositorynetzwerks.

Signaturüberprüfung für das Ausführen von Rebases und Mergevorgängen

Wenn du die Option Rebase und Merge für einen Pull Request verwendest, ist es wichtig zu wissen, dass die Commits im Headbranch ohne Überprüfung der Commitsignatur dem Basisbranch hinzugefügt werden. Wenn du diese Option verwendest, erstellt GitHub einen geänderten Commit unter Verwendung der Daten und des Inhalts des ursprünglichen Commits. Das bedeutet, dass GitHub diesen Commit nicht wirklich erstellt hat und ihn daher nicht als generischer Systembenutzer signieren kann. GitHub hat keinen Zugriff auf die privaten Signaturschlüssel des Committers und kann daher den Commit nicht im Auftrag des Benutzers signieren.

Ein Workaround dafür ist, dass du lokal einen Rebase- und Mergevorgang durchführst und die Änderungen dann in den Basisbranch des Pull Requests pushst.

Weitere Informationen finden Sie unter Informationen zu Zusammenführungsmethoden auf GitHub.

Repository-Administratoren können die obligatorische Commit-Signatur auf einem Branch erzwingen, um alle Commits zu blockieren, die nicht signiert und verifiziert sind. Weitere Informationen finden Sie unter Informationen zu geschützten Branches.

Du kannst den Verifizierungsstatus deiner signierten Commits oder Tags auf GitHub überprüfen und einsehen, warum deine Commitsignaturen möglicherweise nicht verifiziert sind. Weitere Informationen finden Sie unter Überprüfung des Verifizierungsstatus Ihrer Commit- und Tag-Signaturen.

Wenn ein Website-Administrator das Signieren von Web-Commits aktiviert hat, verwendet GitHub automatisch GPG, um Commits zu signieren, die Sie über die Weboberfläche erstellen. Von GitHub signierte Commits erhalten den Status „Verifiziert“. Du kannst die Signatur mithilfe des öffentlichen Schlüssels, der unter https://HOSTNAME/web-flow.gpg verfügbar ist, lokal überprüfen. Weitere Informationen finden Sie unter Konfiguration der Web-Commit-Signatur.

GPG-Verifizierung einer Commit-Signatur

Du kannst GPG verwenden, um Commits mit einem GPG-Schlüssel zu signieren, den du selbst generierst.

GitHub verwendet OpenPGP-Bibliotheken, um zu bestätigen, dass Ihre lokal signierten Commits und Tags kryptografisch auf einen öffentlichen Schlüssel überprüft werden können, den Sie Ihrem Konto Ihre GitHub Enterprise Server-Instancehinzugefügt haben.

Führen Sie die folgenden Schritte aus, um Commits mit GPG zu signieren und diese Commits auf GitHub verifizieren zu lassen:

  1. Nach vorhandenen GPG-Schlüsseln suchen
  2. Einen neuen GPG-Schlüssel generieren
  3. Fügen Sie einen GPG-Schlüssel zu Ihrem GitHub-Konto hinzu
  4. Git über den Signaturschlüssel informieren
  5. Commits signieren
  6. Tags markieren

Verifizierung der Commit-Signatur mit SSH

Du kannst SSH verwenden, um Commits mit einem SSH-Schlüssel zu signieren, den du selbst generierst. Weitere Informationen findest du in der Git-Referenzdokumentation zu user.Signingkey. Wenn Sie bereits einen SSH-Schlüssel verwenden, um sich bei GitHub zu authentifizieren, können Sie denselben Schlüssel auch erneut hochladen, um ihn als Signaturschlüssel zu verwenden. Es gibt keine Begrenzung für die Anzahl von Signaturschlüsseln, die du zu deinem Konto hinzufügen kannst.

GitHub verwendet ssh_data, eine Open Source Ruby-Bibliothek, um zu bestätigen, dass Ihre lokal signierten Commits und Tags kryptografisch anhand eines öffentlichen Schlüssels überprüft werden können, den Sie Ihrem Konto auf Ihre GitHub Enterprise Server-Instance hinzugefügt haben.

Hinweis

Die SSH-Signaturüberprüfung ist in Git 2.34 oder höher verfügbar. Informationen zum Aktualisieren deiner Version von Git findest du auf der Git-Website.

Führen Sie die folgenden Schritte aus, um Commits mit SSH zu signieren und diese auf GitHub verifizieren zu lassen:

  1. Suche nach vorhandenen SSH-Schlüsseln
  2. Generieren eines neuen SSH-Schlüssels
  3. Fügen Sie einen SSH-Signierschlüssel zu Ihrem GitHub-Konto hinzu
  4. Git über den Signaturschlüssel informieren
  5. Commits signieren
  6. Tags markieren

S/MIME-Verifizierung einer Commit-Signatur

Du kannst S/MIME verwenden, um Commits mit einem von deiner Organisation ausgegebenen X.509-Schlüssel zu signieren.

GitHub verwendet das Debian ca-certificates-Paket, den gleichen Vertrauensspeicher, der von Mozilla-Browsern verwendet wird, um zu bestätigen, dass Ihre lokal signierten Commits und Tags kryptografisch auf einen öffentlichen Schlüssel in einem vertrauenswürdigen Stammzertifikat überprüft werden können.

Hinweis

Die S/MIME-Signaturüberprüfung ist in Git 2.19 oder höher verfügbar. Informationen zum Aktualisieren deiner Version von Git findest du auf der Git-Website.

Um Commits mit S/MIME zu signieren und sie auf GitHub verifizieren zu lassen, führen Sie die folgenden Schritte aus:

  1. Git über den Signaturschlüssel informieren
  2. Commits signieren
  3. Tags markieren

Sie müssen Ihren öffentlichen Schlüssel nicht bei GitHub hochladen.

Weiterführende Lektüre