Mit FIDO2 SSH und GIT sicher nutzen

Mit FIDO2 SSH und GIT sicher nutzen

Mit OpenSSL 8.2 und neuer ist die Verwendung von FIDO2 Authentifzierungsmechanismen mit SSH möglich. Hier ein paar Tipps zur Einrichtung unter Windows.

Rahmenbedinungen

Problem: OpenSSH für Windows unterstützt in der Version 8.6 noch kein FIDO. Daher richten wir alles im Windows Subsystem for Linux ein und nutzen das dann von Windows aus.

Debian WSL

Installation der Windows-Fido-Bridge sowie erstellen von Schlüsselmaterial:

sudo apt install apt-transport-https ca-certificates gpg

sudo apt-key adv --keyserver keys.openpgp.org --recv-keys 59E68EAC9C749457
echo 'deb https://apt.mgbowen.dev/debian/ bullseye main' \
    | sudo tee /etc/apt/sources.list.d/mgbowen.list > /dev/null
sudo apt update
sudo apt install windows-fido-bridge

SSH_SK_PROVIDER=libwindowsfidobridge.so ssh-keygen -t ecdsa-sk

echo "SecurityKeyProvider=libwindowsfidobridge.so" >> ~/.ssh/config

ssh user@server

Anmerkung: Es wird aktuell nur ecdsa-sk und nicht ed25519-sk unterstützt. Ebenso funktionieren Resident-Keys noch nicht.

Windows

Ich habe zwei verschiedene Lösungsansätze verfolgt:

Lösung: Git/SSH in WSL nutzen

  • Git for Windows deinstallieren
  • SSH deinstallieren dism /online /Remove-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0
  • Für die Nutzung auf der Kommandozeile
    • Verzeichnis bin im Home anlegen und in Pfad aufnehmen.
    • Datei ssh.bat dort anlegen mit Inhalt @wsl ssh %*
    • Datei git.bat dort anlegen mit Inhalt @wsl git %*
  • Für VSCode und Fork: Git Wrapper wslgit installieren
    • choco install wslgit
    • ggf. Default-Distribution setzen wsl -s Debian
    • In VSCode: "git.path": "C:\\ProgramData\\chocolatey\\bin\\wslgit.exe" ergänzen in settings.json

Bei diesem Ansatz ist jedoch die Performance spürbar gering, grade wenn viele git Aufrufe getätigt werden (zum Beispiel aus VSCode heraus).

Lösung: SSH in WSL nutzen, Git unter Windows nutzen

  • Git für Windows installieren choco install git git-lfs
  • SSH deinstallieren dism /online /Remove-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0
  • Für die Nutzung auf der Kommandozeile
    • Verzeichnis bin im Home anlegen und in Pfad aufnehmen.
    • Datei ssh.bat dort anlegen mit Inhalt @wsl ssh %*
  • Windows Git auf Linux SSH verweisen
    • GIT_SSH=C:\User\jwilke\bin\ssh.bat

Fazit

Beide Ansätze funktionieren, in VSCode oder Fork sind jedoch bei einem Push mehrere FIDO2-Bestätigungen notwendig, da mehrere git Kommandos ausgeführt weren. Das ist von der Useability noch nicht optimal. Der Yubikey kennt zwar eine “Cached” Policy, die 15 Sekunden lang keine weitere Bestätigung mehr erfordert, die gilt jedoch scheintbar nur für den PIV und GPG Betrieb.

Offene Punkte

  • Nutzung von Putty/Kitty möglich?