Julian Erbeling

SSH Host Key Rollover

Mit steigender Rechenleistung können kryptographische Schlüssel in immer kürzerer Zeit gebrochen werden. Um dem entgegenzuwirken, müssen immer längere Schlüssel verwendet werden. Der Austausch persönlicher SSH Keys ist dabei vergleichsweise einfach. Dagegen bringt der Austausch von SSH Host Keys ein paar Hürden mit sich. Mit wenigen Tricks lässt sich aber auch dieser Wechsel reibungslos umsetzen.

Hürden

Das simple Ersetzen vorhandener Host Keys erzeugt clientseitig eine Warnung, dass sich die Keys geändert haben und daher ein Man-in-the-Middle-Angriff vorliegen könnte. Diese Warnung möchte man sich bei legitimen Änderungen gern sparen.

Voraussetzungen

Voraussetzung für die folgenden Schritte ist OpenSSH Version 6.8 auf Client- und Serverseite.

Prüfung clientseitig:

ssh -V

Der SSH Server hat keinen Parameter zur Versionsprüfung, daher wird der folgende Befehl eine Warnung “unknown option” erzeugen. Trotzdem wird die Version angezeigt:

sshd -V

Vorbereitung

Damit die SSH Clients neue Host Keys auch akzeptieren, muss zunächst die clientseitige Konfiguration angepasst werden. Das kann global oder hostspezifisch erfolgen. Außerdem entweder systemweit über die /etc/ssh/ssh_config oder individuell über die userspezifische ~/.ssh/config. Relevante Option ist UpdateHostKeys. Beispiel für eine globale Anpassung:

Host *
    UpdateHostKeys yes

Diese Änderung sorgt nun dafür, dass der SSH Client neue Host Keys ebenfalls in die Liste der gültigen Keys für diesen Host unter ~/.ssh/known_host aufgenommen werden. Dabei erfolgt diese Aufnahme nur, wenn der Host bereits erfolgreich authentifiziert wurde - also die alten Keys noch präsentiert.

Rollover

Um Keys austauschen zu können, müssen zunächst einmal neue Keys erzeugt werden. Für unser Beispiel generieren wir auf dem Zielsystem einen Ed25519- und einen 4096bit-RSA-Key. Um die neuen Keys von den bisherigen unterscheiden zu können, fügen wir die aktuelle Jahreszahl an den Dateinamen an.

ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key_2024
ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa4096_key_2024

Sobald die neuen Keys erzeugt sind, müssen sie dem SSH Server bekannt gemacht werden. Dazu wird die Datei /etc/ssh/sshd_config um die folgenden beiden Zeilen ergänzt:

HostKey /etc/ssh/ssh_host_ed25519_key_2024
HostKey /etc/ssh/ssh_host_rsa4096_key_2024

Ein anschließender Neustart des SSH Servers sorgt dafür, dass die geänderte Konfiguration auch eingelesen wird und greift.

systemctl restart sshd.service

Der SSH Server liefert ab diesem Zeitpunkt sowohl die alten als auch die neuen Host Keys aus.

Nun gilt es, einige Zeit abzuwarten. Die Änderung muss auf allen Clients vorgenommen werden. Alle Clients müssen sich erfolgreich zum Host verbinden und die neuen Keys laden. Je nach Umgebung kann eine angemessene Wartezeit im Bereich von Tagen, Wochen oder Monaten liegen.

Nacharbeiten

Nach ausreichender Wartezeit sollte eine Bereinigung des SSH Servers stattfinden. Dazu werden die alten HostKey Einträge aus der /etc/sshd_config entfernt.

Ein anschließender Neustart des SSH Serves sorgt dann dafür, dass die alten Keys nicht mehr verwendet werden.

systemctl restart sshd.service

Der SSH Host Key Rollover ist damit abgeschlossen, ohne eine Warnung zu geänderten Host Keys erzeugt zu haben. Die einmalige Vorbereitung des Clients sorgt nun außderem dafür, dass weitere Rollover rein auf dem Server erfolgen können, ganz ohne erneutes Anfassen der Clients.

Tags: #Ssh #Security