Authentification SSH avec une Yubikey FIDO2 et Microsoft Windows WSL

Sommaire

L'objectif de cet article est de s'authentifier en SSH via une Yubikey (compatible FIDO2) et un client SSH installé sur une distribution Linux dans WSL (Debian dans cet exemple).

1. Introduction

La version 8.2 d'OpenSSH apporte le support des matériels FIDO/U2F avec les nouveaux types de clés et certificats « ecdsa-sk » et « ed25519-sk », ainsi que le support des clefs "FIDO2 resident keys".

ssh-keygen doit être utilisé pour générer ces nouveaux types de clefs.

A noter que cette procédure peut être suivie sur un système GNU Linux ou type UNIX, disposant d'une version OpenSSH supérieure à 8.2. Il vous suffira de sauter le paragraphe 3 et d'indiquer le bon emplacement du binaire "ssh-sk-helper" dans le paragrage 4.

2. Prérequis

3. Installation d'OpenSSH

Dans un premier temps, il nous faut installer une version OpenSSH supérieure à la version 8.2 sur le système Microsoft Windows. Pour cela, via un prompt Powershell lancé en tant qu'administrateur, exécuter la commande suivante :

1winget install "openssh beta"

4. Génération des clefs SSH

Ouvrir un terminal WSL (Bash sur Debian dans notre exemple) et configurer la variable d'environnement SSH_SK_HELPER avec le chemin du binaire "ssh-sk-helper.exe" :

1export SSH_SK_HELPER="/mnt/c/Program Files/OpenSSH/ssh-sk-helper.exe"

Connecter la clef Yubikey sur votre poste de travail. Puis créer votre clef SSH au format (ed25519-sk) qui sera stockée dans la clef Yubikey via la commande suivante. La génération d'une clef nécessite que la Yubikey soit connectée à l'ordinateur et il faudra appuyer dessus pour confirmer l'opération (elle clignotera) :

1ssh-keygen -t ed25519-sk -O resident -O verify-required

Si votre matériel n'est pas compatible "ed25519", il est aussi possible de créer une clef au format "ecdsa-sk" :

1ssh-keygen -t ecdsa-sk -O resident -O verify-required

Vous pouvez différencier les clefs sur la Yubikey via la commande suivante (remplacer "YourApp" par le nom de l'application que vous souhaitez utiliser pour la clef SSH et "YourName" par le nom de l'utilisateur souhaité):

1ssh-keygen -t ed25519-sk -O resident -O verify-required -O application=ssh:YourApp -O user=YourName

Vous trouverez la clef publique dans le répertoire "~/ssh" (id_ed25519_sk.pub ou id_ecdsa_sk.pub en fonction de l'algorithme sélectionné), qu'il vous faudra inscrire dans les clefs autorisées de vos serveurs SSH.

La liste des options de ssh-keygen en lien avec FIDO, est disponible dans le manuel d'OpenSSH : https://man.openbsd.org/ssh-keygen.1#FIDO_AUTHENTICATOR

Exemples des options de "ssh-keygen" valables pour les clés FIDO :

  • application : Remplacer le texte par défaut, indiquant l'application ou l'origine de la clef. Cela peut être utile lors de la génération de clés résidentes spécifiques à un hôte ou à un domaine. Le texte spécifié doit commencer par « ssh : ».

  • no-touch-required : Indiquez que la clé privée générée ne doit pas nécessiter de toucher la clef (présence de l'utilisateur) lors de la signature. Notez que sshd(8) refusera de telles signatures par défaut, à moins qu'elles ne soient annulées via une option de "authorized_keys".

  • resident : Indiquez que la clef doit être stockée sur l’authentificateur FIDO lui-même. Cela facilite l'utilisation de l'authentificateur sur plusieurs ordinateurs. Les clés résidentes peuvent être prises en charge sur les authentificateurs FIDO2 et nécessitent généralement qu'un code PIN soit défini sur l'authentificateur avant la génération. Les clés résidentes peuvent être chargées depuis l'authentificateur en utilisant ssh-add(1). A noter que le stockage des deux parties d'une clé sur un authentificateur FIDO augmente la probabilité qu'un attaquant puisse utiliser un appareil d'authentification volé.

  • user : Un nom d'utilisateur à associer à une clé résidente, remplaçant le nom d'utilisateur vide par défaut. La spécification d'un nom d'utilisateur peut être utile lors de la génération de plusieurs clés résidentes pour le même nom d'application.

  • verify-required : Indiquez que cette clé privée doit nécessiter une vérification de l'utilisateur pour chaque signature. Tous les authentificateurs FIDO ne prennent pas en charge cette option. Actuellement, l'authentification par code PIN est la seule méthode de vérification prise en charge, mais d'autres méthodes pourraient être prises en charge à l'avenir.

5. Lister les clefs SSH

Afin de lister les clefs "résidentes" stockées sur votre Yubikey, vous pouvez utiliser "Yubikey Manager" en ligne de commande.

Dans un premier temps, installer "Yubikey Manager" sur votre système : https://www.yubico.com/support/download/yubikey-manager/.

Ensuite, via un prompt Powershell lancé en tant qu'administrateur, exécuter la commande suivante :

1cd "C:\Program Files\Yubico\YubiKey Manager"
2.\ykman.exe fido credentials list

4. Annexes