Under Construction

SSH Host KRL als Textdatei

Wird eine Textdatei für die KRL verwendet, kann diese einfach mittels touch oder einem Editor angelegt werden. Der Name der Datei ist frei wählbar.

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

user01@client01 $ touch ~/.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 Textdatei beliebigen Namens für die KRL anlegen. Wir empfehlen /etc/ssh und den Namen revoked_host_keys für die KRL:

root@client01 # touch /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 #

Um einen Key oder ein Zertifikat zu widerrufen, wird einfach der Public-Key oder das Zertifikat in die KRL eingetragen. Möchte man beispielsweise alle aktuellen Host-Zertifikate des Rechners server01 widerrufen, kann man sich diese mit „ssh-keyscan -c“ zunächst auflisten lassen und dann in die KRL Textdatei eintragen:

user01@client01 $ ssh-keycan -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 $ vi ~/.ssh/revoked_host_keys

ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIEknUO+AEdJlyWCNYr1fDfrbhYu0kYH/C/66OsIXGvR1AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwcAAAAAAAAAAAAAAACAAAAGGZpdHNwZWFpeGUwMS5hZG1uZXQuZml0cwAAABAAAAAMZml0c3BlYWl4ZTAxAAAAAGluJagAAAAAa09ZawAAAAAAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAg/4wELv9Y3rTLkQCEiSxu+NsMF8ZoUapXO8zBRgLsC0gAAABTAAAAC3NzaC1lZDI1NTE5AAAAQL13lIidf7q/62oCsK4oBgY8F63BhlA9X0LlqtU8O8xYgUUBbz+DGS1qRJH3t0OGVeDVtuN/g5M5hPOLlMOlnQs=

user01@client01 $

Noch einfacher geht es mit einer Umleitung:

user01@client01 $ ssh-keyscan -c server01 >>~/.ssh/revoked_host_keys
# 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
# server01:22 SSH-2.0-OpenSSH_9.9
user01@client01 $

Hinweis: Die Kommentarzeilen werden über den Fehlerkanal ausgegeben, die Keys über die Stanardausgabe.

Der Versuch sich am System server01 anzumelden, schlägt mit einer sehr eindeutigen Fehlermeldung fehl:

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

Anstelle das Zertifikat zu widerrufen, kann auch der Public-Key des Ziel-Hosts server01 widerrufen werden. Wir entfernen zunächst das Zertifikat aus der KRL und fügen stattdessen den Public-Key hinzu:

user01@client01 $ ssh-keyscan server01                         
# server01:22 SSH-2.0-OpenSSH_9.9
# 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
user01@client01 $

Da der Rechnername zusätzlich zum Key in jeder Zeile angezeigt wird, funktioniert leider die Umleitung der Standardausgabe nicht. Die Zeilen in der KRL müssen mit dem Key-Typ beginnen:

user01@client01 $ vi ~/.ssh/revoked_host_keys

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeyDqvUZJWASC+nwaAjZ3WzzMqr9aSAvanVlmtyHqwc

user01@client01 $

Der Versuch sich anzumelden scheitert erneut:

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

Das Widerrufen von Host-Keys funktioniert völlig unabhängig von der Verwendung von Zertifikaten.

Der Nachteil bei der Verwendung des Text-Formats für die KRL besteht zum Einen in der Größe der resultierenden Datei und zum Anderen in der Notwendigkeit den kompletten Public-Key eintragen zu müssen. Diesen muss man jeweils erst einmal besorgen.

Die Verwendung des binären OpenSSH Formats beseitigt diese Nachteile.