Under Construction

SSH Host KRL im binären OpenSSH Format

Soll das binäre OpenSSH Format für die KRL verwendet, muss diese mit dem Kommando ssh-keygen und der Option „-k“ angelegt werden. Der Name der Datei ist frei wählbar.

Möchte ein Benutzer seine eigene KRL verwenden, kann er diese z.B. in seinem Homeverzeichnis unter ~/.ssh/revoked_host_keys anlegen:

user01@client01 $ ssh-keygen -k -f ~/.ssh/revoked_host_keys
user01@client01 $

Den Pfad zu dieser Datei muss er dann in seiner SSH Konfiguration unter ~/.ssh/config hinterlegen:

user01@client01 $ vi ~/.ssh/config

RevokedHostKeys /home/user01/.ssh/revoked_host_keys

user01@client01 $

Damit nicht jeder Benutzer eine eigene KRL für Hosts pflegen muss, ist es einfacher und empfohlen dies dem Administrator des Client-Rechners zu überlassen. Der Administrator sollte an zentraler Stelle eine KRL mit beliebigem Namens anlegen. Wir verwenden /etc/ssh/revoked_host_keys:

root@client01 # ssh-keygen -k -f /etc/ssh/revoked_host_keys
root@client01 #

Die KRL sollte dann der globalen SSH Konfiguration hinzugefügt werden:

root@client01 # vi /etc/ssh/ssh_config

RevokedHostKeys /etc/ssh/revoked_host_keys

root@client01 #

Der Inhalt der KRL kann mit den Optionen „-Q“ und „-l“ in Kombination angezeigt werden:

root@client01 # ssh-keygen -Ql -f /etc/ssh/revoked_host_keys
# KRL version 0
# Generated at 20260119T142703

root@client01 #

Um einen oder mehrere Keys der KRL hinzuzufügen, benötigt man eine oder mehrere Dateien, welche die zu widerrufenden Keys enthalten. Die Zeilen bestehen aus einem Schlüsselwort, gefolgt von einem Doppelpunkt und Informationen spezifisch für das verwendete Schlüsselwort. Nachfolgend geben wir für jede der unterstützten Möglichkeiten ein kleines Beispiel.

Beispiel 1: Widerrufen eines Public Host-Keys.

Hierfür wird eine Zeile mit dem Schlüsselwort „key“ und dem zu widerrufenden Public Host-Key benötigt. Den Host-Key lassen wir uns wieder mit ssh-keyscan anzeigen:

user01@client01 $ ssh-keyscan server01
# server01:22 SSH-2.0-OpenSSH_9.9
server01 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwc
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
user01@client01 $

Den angezeigten Key tragen wir in eine neue Datei (/tmp/keys_to_revoke_1) ein:

root@client01 # vi /tmp/keys_to_revoke_1
key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwc
root@client01 #

Um nun die in dieser Datei aufgelisteten Keys zu widerrufen, wird ssh-keygen mit den Optionen „k“ und „-u“ (update) aufgerufen:

root@client01 # ssh-keygen -k -f /etc/ssh/revoked_host_keys -u /tmp/keys_to_revoke_1
Revoking from /tmp/keys_to_revoke_1
root@client01 #

Hinweis: Das funktioniert natürlich genauso als normaler Benutzer mit der privaten KRL.

Ein Login per SSH auf das den Server server01 ist damit nicht mehr erlaubt, zumindest so lange dieser den zurückgezogenen Host-Key verwendet:

user01@client01 $ ssh server01
Host key ED25519-CERT SHA256:kaIQuZjLc0sLh52GuBOJYHMycpmv/frARAyejq+koOA revoked by file /home/ize0h29/.ssh/revoked_host_keys
Host key verification failed.
user01@client01 $

Wir starten mit einer neuen und leeren KRL für das nächste Beispiel!

Beispiel 2: Widerrufen eines Host-Zertifikats.

Hierfür wird wieder eine Zeile mit dem Schlüsselwort „key“ benötigt. Anstelle des Public Host-Keys wird ganz einfach das Zertifikat angegeben. Das Host-Zertifikat lassen wir uns wieder mit ssh-keyscan anzeigen:

user01@client01 $ ssh-keyscan -c server01
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIEknUO+AEdJlyWCNYr1fDfrbhYu0kYH/C/66OsIXGvR1AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwcAAAAAAAAAAAAAAACAAAAGGZpdHNwZWFpeGUwMS5hZG1uZXQuZml0cwAAABAAAAAMZml0c3BlYWl4ZTAxAAAAAGluJagAAAAAa09ZawAAAAAAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAg/4wELv9Y3rTLkQCEiSxu+NsMF8ZoUapXO8zBRgLsC0gAAABTAAAAC3NzaC1lZDI1NTE5AAAAQL13lIidf7q/62oCsK4oBgY8F63BhlA9X0LlqtU8O8xYgUUBbz+DGS1qRJH3t0OGVeDVtuN/g5M5hPOLlMOlnQs=
# server01:22 SSH-2.0-OpenSSH_9.9
# server01:22 SSH-2.0-OpenSSH_9.9
user01@client01 $

Das angezeigte Host-Zertifikat tragen wir in eine neue Datei (/tmp/keys_to_revoke_2) ein:

root@client01 # vi /tmp/keys_to_revoke_2
key: ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIEknUO+AEdJlyWCNYr1fDfrbhYu0kYH/C/66OsIXGvR1AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwcAAAAAAAAAAAAAAACAAAAGGZpdHNwZWFpeGUwMS5hZG1uZXQuZml0cwAAABAAAAAMZml0c3BlYWl4ZTAxAAAAAGluJagAAAAAa09ZawAAAAAAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAg/4wELv9Y3rTLkQCEiSxu+NsMF8ZoUapXO8zBRgLsC0gAAABTAAAAC3NzaC1lZDI1NTE5AAAAQL13lIidf7q/62oCsK4oBgY8F63BhlA9X0LlqtU8O8xYgUUBbz+DGS1qRJH3t0OGVeDVtuN/g5M5hPOLlMOlnQs=
root@client01 #

Um die gelisteten Keys zu widerrufen, wird wieder  ssh-keygen aufgerufen:

root@client01 # ssh-keygen -k -f /etc/ssh/revoked_host_keys -u /tmp/keys_to_revoke_2
Revoking from /tmp/keys_to_revoke_2
root@client01 #

Das Kommando ssh-keygen liest die Zeile mit dem Zertifikat, ermittelt aus dem Zertifikat den Public Host-Key und trägt diesen in die KRL ein. Es wird damit wie im ersten Beispiel der Public Host-Key widerrufen. Da das Host-Zertifikat auf dem Host-Key basiert, ist das Zertifikat selbst damit auch nicht mehr verwendbar.

Ein Login per SSH auf den Server server01 ist wie in Beispiel 1 nicht mehr möglich, zumindest so lange dieser den zurückgezogenen Host-Key verwendet:

user01@client01 $ ssh server01
Host key ED25519-CERT SHA256:kaIQuZjLc0sLh52GuBOJYHMycpmv/frARAyejq+koOA revoked by file /home/ize0h29/.ssh/revoked_host_keys
Host key verification failed.
user01@client01 $

to be continued …