Informationen zu SSH-Zertifizierungsstellen
Ein SSH-Zertifikat ist ein Mechanismus, mit dem ein SSH-Schlüssel einen anderen SSH-Schlüssel signieren kann. Wenn du eine SSH-Zertifizierungsstelle (CA) verwendest, um den Mitgliedern deiner Organisation signierte SSH-Zertifikate bereitzustellen, kannst du die Zertifizierungsstelle zu deinem Enterprise-Konto oder deiner Organisation hinzufügen, damit die Organisationsmitglieder mit ihren Zertifikaten auf die Ressourcen der Organisation zugreifen können.
Wenn du eine SSH-Zertifizierungsstelle zu deiner Organisation oder deinem Enterprise-Konto hinzugefügt hast, kannst du mit der Zertifizierungsstelle Client-SSH-Zertifikate für Organisationsmitglieder signieren. Organisationsmitglieder können mit den signierten Zertifikaten mit Git auf die Repositorys deiner Organisation (und nur auf diese) zugreifen. Optional kannst du festlegen, dass Mitglieder SSH-Zertifikate verwenden müssen, um auf Organisationsressourcen zuzugreifen. Weitere Informationen findest du unter SSH-Zertifizierungsstellen Deiner Organisation verwalten und unter Erzwingen von Richtlinien für Sicherheitseinstellungen in deinem Unternehmen.
Du kannst beispielsweise ein internes System einrichten, das jeden Morgen ein neues Zertifikat für deine Entwickler herausgibt. Die Entwickler*innen können mit ihrem aktuellen Zertifikat in den Repositorys deiner Organisation auf GitHub Enterprise Server arbeiten. Am Ende des Tages läuft das Zertifikat automatisch ab. So werden deine Repositorys geschützt, falls das Zertifikat zu einem späteren Zeitpunkt kompromittiert wird.
Mitglieder können ihre Zertifikate nicht verwenden, um auf Forks deiner Repositorys zuzugreifen, die sich im Besitz ihrer persönlichen Konten befinden.
Informationen zu SSH-URLs mit SSH-Zertifikaten
Falls deine Organisation SSH-Zertifikate verlangt, sollten Organisationsmitglieder eine spezielle URL mit der Organisations-ID verwenden, wenn sie Git-Vorgänge über SSH ausführen. So können Authentifizierungsfehler vermieden werden. Mit dieser speziellen URL können der Client und der Server einfacher aushandeln, welche Schlüssel auf dem Computer des Mitglieds für die Authentifizierung verwendet werden sollen. Wenn ein Mitglied die normale URL verwendet, die mit git@github.com
anfängt, bietet der SSH-Client möglicherweise den falschen Schlüssel an, wodurch der Vorgang fehlschlägt.
Jeder mit Lesezugriff auf das Repository kann diese URL finden, indem er das Dropdownmenü Code auf der Hauptseite des Repositorys auswählt und dann auf SSH verwenden klickt.
Wenn deine Organisation keine SSH-Zertifikate verlangt, können Mitglieder weiterhin eigene SSH-Schlüssel oder andere Authentifizierungsmethoden verwenden. In diesem Fall funktioniert entweder die spezielle URL oder die normale URL, die mit git@github.com
beginnt.
Ausgabe von Zertifikaten
Beim Herausgeben der einzelnen Zertifikate musst du eine Erweiterung hinzufügen, die festlegt, für welchen GitHub Enterprise Server-Benutzer das Zertifikat gedacht ist. Du kannst z. B. den OpenSSH-Befehl ssh-keygen
verwenden und dabei KEY-IDENTITY durch deine Schlüsselidentität und USERNAME durch einen GitHub Enterprise Server-Benutzernamen ersetzen. Das von dir generierte Zertifikat ist berechtigt, im Auftrag dieses Benutzers bzw. dieser Benutzerin für alle Ressourcen deiner Organisation zu handeln. Stelle sicher, dass du die Identität des Benutzers überprüfst, bevor du das Zertifikat ausstellst.
Hinweis: Du musst ein Update auf OpenSSH 7.6 oder höher durchführen, um diese Befehle verwenden zu können.
ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@HOSTNAME=USERNAME ./user-key.pub
Warnung: Nachdem ein Zertifikat signiert und ausgestellt wurde, kann das Zertifikat nicht gesperrt werden. Stelle sicher, dass du das Flag -V
verwendest, um eine Lebensdauer für das Zertifikat zu konfigurieren. Andernfalls kann das Zertifikat unbegrenzt verwendet werden.
Um ein Zertifikat für eine Person auszustellen, die SSH verwendet, um auf mehrere GitHub-Produkte zuzugreifen, kannst du zwei Anmeldeerweiterungen einschließen, um den Benutzernamen für jedes Produkt anzugeben. Zum Beispiel würde der folgende Befehl ein Zertifikat für USERNAME-1 für das Benutzerkonto für GitHub Enterprise Cloud und USERNAME-2 für das Benutzerkonto auf GitHub Enterprise Server auf HOSTNAME ausstellen.
ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@github.com=USERNAME-1 extension:login@HOSTNAME=USERNAME-2 ./user-key.pub
Mit der Erweiterung source-address
schränkst du die IP-Adressen ein, von denen aus ein Organisationsmitglied auf die Ressourcen deiner Organisation zugreifen kann. Als Erweiterung ist eine bestimmte IP-Adresse oder ein IP-Adressbereich mit CIDR-Notation zulässig. Sollen mehrere Adressen oder Bereiche angegeben werden, trenne sie durch Komma voneinander ab. Weitere Informationen findest du unter Klassenloses Routing zwischen Domänen auf Wikipedia.
ssh-keygen -s ./ca-key -V '+1d' -I KEY-IDENTITY -O extension:login@HOSTNAME=USERNAME -O source-address=COMMA-SEPARATED-LIST-OF-IP-ADDRESSES-OR-RANGES ./user-key.pub