Outils d'utilisateurs

Outils du Site


yubikey_4_chiffrer_signer_ssh_github_tuto

Différences

Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.

Lien vers cette vue

yubikey_4_chiffrer_signer_ssh_github_tuto [2019/10/24 13:56]
M0N5T3R
yubikey_4_chiffrer_signer_ssh_github_tuto [2019/10/29 13:37] (Version actuelle)
M0N5T3R
Ligne 3: Ligne 3:
 Je me suis décidé à configurer ma Yubikey 4 qui prenait la poussière depuis quelques temps. Bon, je suis pas sur que le temps passé dessus en valait la chandelle mais c'est fait, du coup je vous fais un tuto pour utiliser une Yubikey 4 en tant que smartcard OpenPGP.  Je me suis décidé à configurer ma Yubikey 4 qui prenait la poussière depuis quelques temps. Bon, je suis pas sur que le temps passé dessus en valait la chandelle mais c'est fait, du coup je vous fais un tuto pour utiliser une Yubikey 4 en tant que smartcard OpenPGP. 
  
- +{{ https://raw.githubusercontent.com/harfangeek/harfangeek.github.io/master/public/images/YubiKey4-250.png?nolink&200 }}
-{{https://raw.githubusercontent.com/harfangeek/harfangeek.github.io/master/public/images/YubiKey4-250.png?200}}+
  
  
Ligne 72: Ligne 71:
 Pour rappel, export des clés publiques: Pour rappel, export des clés publiques:
  
-'' gpg --export --armor <keyid> > <keyid>.pub.asc''+<code> gpg --export --armor <keyid> > <keyid>.pub.asc</code>
  
 Astuce: pour la plupart des commandes gpg vous pouvez utiliser tout ou partie du nom ou de l'adresse mail associée à votre clé master. Astuce: pour la plupart des commandes gpg vous pouvez utiliser tout ou partie du nom ou de l'adresse mail associée à votre clé master.
-'' gpg --export --armor harfang > harfang.pub.asc'' +<code> gpg --export --armor harfang > harfang.pub.asc</code> 
  
 Le fichier .asc contiendra toutes les clés publiques (master + 3 sous clés) ainsi que les signature des 3 sous clés par la master. Pour tout le reste de la manip' il suffira toujours soit de donner ce fichier .asc, soit de donner l'ID de la clé master. Il n'est pas nécessaire de donner l'ID des sous clés, la bonne sous clé est utilisée en fonction de l'opération effectuée. Le fichier .asc contiendra toutes les clés publiques (master + 3 sous clés) ainsi que les signature des 3 sous clés par la master. Pour tout le reste de la manip' il suffira toujours soit de donner ce fichier .asc, soit de donner l'ID de la clé master. Il n'est pas nécessaire de donner l'ID des sous clés, la bonne sous clé est utilisée en fonction de l'opération effectuée.
Ligne 81: Ligne 80:
 Je vous conseille aussi de sortir les infos suivantes qui seront nécéssaires plus tard. Les clés publiques au format SSH: Je vous conseille aussi de sortir les infos suivantes qui seront nécéssaires plus tard. Les clés publiques au format SSH:
  
-'' gpg --export-ssh-key <keyid> > <keyid>.pub.ssh''+<code> gpg --export-ssh-key <keyid> > <keyid>.pub.ssh</code>
  
 Le keygrip de la clé master, qui est un autre format d'ID dont on aura besoin: Le keygrip de la clé master, qui est un autre format d'ID dont on aura besoin:
  
-'' gpg -k --with-keygrip''+<code> gpg -k --with-keygrip</code>
 Prenez l'ID qui se trouve après "**keygrip = **" sous l'ID classique de la clé master. Notez le quelque part. Prenez l'ID qui se trouve après "**keygrip = **" sous l'ID classique de la clé master. Notez le quelque part.
  
Ligne 126: Ligne 125:
 Importez vos clés publiques dans votre keyring: Importez vos clés publiques dans votre keyring:
  
-'' gpg --import <keyid>.pub.asc''+<code> gpg --import <keyid>.pub.asc</code>
  
 Sous Windows vous pouvez aussi l'importer via Kleopatra. Sous Windows vous pouvez aussi l'importer via Kleopatra.
Ligne 149: Ligne 148:
 Relancez l'agent GPG: Relancez l'agent GPG:
  
-''gpgconf --kill gpg-agent''+<code>gpgconf --kill gpg-agent</code>
  
-''gpgconf --launch gpg-agent''+<code>gpgconf --launch gpg-agent</code>
  
  
 Testez si la Yubikey est bien reconnue: Testez si la Yubikey est bien reconnue:
  
-'' gpg --card-status''+<code> gpg --card-status</code>
  
 Vous pouvez normalement effectuer des opérations cryptographiques. Essayez de signer un fichier: Vous pouvez normalement effectuer des opérations cryptographiques. Essayez de signer un fichier:
  
-'' gpg --clearsign file.txt''+<code> gpg --clearsign file.txt</code>
  
 Si tout se passe bien un prompt devrait apparaitre vous demandant le code pin de la Yubikey. Après avoir validé le code pin si vous avez activé le bouton tactile il faudra le toucher (la Yubikey clignote pour vous prévenir, vous avez 15 secondes). Le code pin est mis en cache et si vous répétez l'opération il ne vous sera pas demandé. Cela nous pose un problème car on va vouloir tester que SSH nous prompt bien pour le code pin quand c'est nécéssaire. Si tout se passe bien un prompt devrait apparaitre vous demandant le code pin de la Yubikey. Après avoir validé le code pin si vous avez activé le bouton tactile il faudra le toucher (la Yubikey clignote pour vous prévenir, vous avez 15 secondes). Le code pin est mis en cache et si vous répétez l'opération il ne vous sera pas demandé. Cela nous pose un problème car on va vouloir tester que SSH nous prompt bien pour le code pin quand c'est nécéssaire.
Ligne 166: Ligne 165:
 Videz le cache du code pin en relançant l'agent gpg.  Videz le cache du code pin en relançant l'agent gpg. 
  
-''gpgconf --kill gpg-agent''+<code>gpgconf --kill gpg-agent</code>
  
-''gpgconf --launch gpg-agent''+<code>gpgconf --launch gpg-agent</code>
  
  
Ligne 175: Ligne 174:
 Pour finir, il sera nécessaire de lancer l'agent gpg à l'ouverture de la sessions. C'est le cas par défaut sur ma Debian, pour Windows j'ai ajouté un .bat exécuté à l'ouverture de session qui contient: Pour finir, il sera nécessaire de lancer l'agent gpg à l'ouverture de la sessions. C'est le cas par défaut sur ma Debian, pour Windows j'ai ajouté un .bat exécuté à l'ouverture de session qui contient:
  
-'' gpgconf --launch gpg-agent''+<code> gpgconf --launch gpg-agent</code>
  
  
Ligne 184: Ligne 183:
 Si SSH vous demande directement le mot de passe du compte c'est qu'il n'a même pas tenté l'authentification par clé. Vérifiez que l'agent SSH a bien pris en compte votre clé (celle que vous avez ajouté à "**~/.gnupg/sshcontrol**") : Si SSH vous demande directement le mot de passe du compte c'est qu'il n'a même pas tenté l'authentification par clé. Vérifiez que l'agent SSH a bien pris en compte votre clé (celle que vous avez ajouté à "**~/.gnupg/sshcontrol**") :
  
-'' ssh-add -l''+<code> ssh-add -l</code>
  
 Votre clé publique devrait être retournée, sinon vérifiez le fichier "**~/.gnupg/sshcontrol**", relancez l'agent gpg, retestez. Votre clé publique devrait être retournée, sinon vérifiez le fichier "**~/.gnupg/sshcontrol**", relancez l'agent gpg, retestez.
Ligne 190: Ligne 189:
 Si il y a une erreur type "erreur de connexion" lors du "**ssh-add -l**" c'est que l'agent gpg n'a pas été bien configuré en tant qu'agent SSH. Vérifiez la valeur de **$SSH_AUTH_SOCK** qui devrait pointer sur la socket ssh de gpg-agent au lieu de l'agent ssh par défaut (ssh-agent): Si il y a une erreur type "erreur de connexion" lors du "**ssh-add -l**" c'est que l'agent gpg n'a pas été bien configuré en tant qu'agent SSH. Vérifiez la valeur de **$SSH_AUTH_SOCK** qui devrait pointer sur la socket ssh de gpg-agent au lieu de l'agent ssh par défaut (ssh-agent):
  
-''harfang@debian:~$ echo $SSH_AUTH_SOCK ''+<code>harfang@debian:~$ echo $SSH_AUTH_SOCK </code>
  
-''/run/user/1000/gnupg/S.gpg-agent.ssh''+<code>/run/user/1000/gnupg/S.gpg-agent.ssh</code>
  
  
Ligne 200: Ligne 199:
 Sinon vous pouvez aussi essayer de setter la variable $GPG_TTY: Sinon vous pouvez aussi essayer de setter la variable $GPG_TTY:
  
-''GPG_TTY=$(tty)''+<code>GPG_TTY=$(tty)</code>
  
-''export GPG_TTY''+<code>export GPG_TTY</code>
  
 Si rien n'y fait, regardez si vous voyez des erreurs parlantes avec journalctl. Relancez gpg-agent, voir killez tous les process associés (gpg-agent, scdaemon, gpg-connect-agent, ssh-agent) entre vos essaies afin de vider les caches. Je me suis fait avoir par exemple quand pendant un moment la connexion SSH marchait alors que c'était en fait uniquement du au fait que le code pin avait été mis en cache par une commande gpg. Si rien n'y fait, regardez si vous voyez des erreurs parlantes avec journalctl. Relancez gpg-agent, voir killez tous les process associés (gpg-agent, scdaemon, gpg-connect-agent, ssh-agent) entre vos essaies afin de vider les caches. Je me suis fait avoir par exemple quand pendant un moment la connexion SSH marchait alors que c'était en fait uniquement du au fait que le code pin avait été mis en cache par une commande gpg.
Ligne 222: Ligne 221:
 Il reste à lancer ssh-pagent, qui fera le lien avec l'agent gpg. Ouvrez un shell (que ce soit Git Bash ou Cygwin): Il reste à lancer ssh-pagent, qui fera le lien avec l'agent gpg. Ouvrez un shell (que ce soit Git Bash ou Cygwin):
  
-''eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")''+<code>eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")</code>
  
 Cette commande lance ssh-pagent si il n'est pas déjà en cours d’exécution et configure la variable d'environnement **SSH_AUTH_SOCK** qui pointera sur la socket de ssh-pagent. Cette variable d’environnement est indispensable, il est donc nécessaire d'ajouter la commande précédente à son **.bashrc**. Celui ci se trouve dans: Cette commande lance ssh-pagent si il n'est pas déjà en cours d’exécution et configure la variable d'environnement **SSH_AUTH_SOCK** qui pointera sur la socket de ssh-pagent. Cette variable d’environnement est indispensable, il est donc nécessaire d'ajouter la commande précédente à son **.bashrc**. Celui ci se trouve dans:
Ligne 245: Ligne 244:
 Pour signer les commits, il faut préciser la clé à utiliser dans la configuration de Git. Récupérer l'ID de votre clé master au format LONG (8octets): Pour signer les commits, il faut préciser la clé à utiliser dans la configuration de Git. Récupérer l'ID de votre clé master au format LONG (8octets):
  
-''gpg --list-secret-keys --keyid-format LONG''+<code>gpg --list-secret-keys --keyid-format LONG</code>
  
 Et ajouter cette id à votre config git: Et ajouter cette id à votre config git:
  
-'' git config --global user.signingkey 3AA5C34371567BD2''+<code> git config --global user.signingkey 3AA5C34371567BD2</code>
  
 https://help.github.com/en/articles/telling-git-about-your-signing-key https://help.github.com/en/articles/telling-git-about-your-signing-key
Ligne 256: Ligne 255:
 Il reste plus qu'à créer un commit signé: Il reste plus qu'à créer un commit signé:
  
-'' git commit -S -m "un commit signé"''+<code> git commit -S -m "un commit signé"</code>
  
 Pour signer par défaut tous les commit (plus besoin de l'option -S): Pour signer par défaut tous les commit (plus besoin de l'option -S):
  
-'' git config --global commit.gpgsign true''+<code> git config --global commit.gpgsign true</code>
  
  
Ligne 301: Ligne 300:
 ----------------------------------------------------------- -----------------------------------------------------------
   * Petite information supplémentaire pour les utilisateurs de gnome pour ne pas avoir à redéfinir SSH_AUTH_SOCK à chaque ouverture d'un terminal   * Petite information supplémentaire pour les utilisateurs de gnome pour ne pas avoir à redéfinir SSH_AUTH_SOCK à chaque ouverture d'un terminal
-''$ cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/gnome-keyring-ssh.desktop +<code>$ cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/gnome-keyring-ssh.desktop 
-$ echo "X-GNOME-Autostart-enabled=false" >> ~/.config/autostart/gnome-keyring-ssh.desktop''+$ echo "X-GNOME-Autostart-enabled=false" >> ~/.config/autostart/gnome-keyring-ssh.desktop</code>
 ----------------------------------------------------------- -----------------------------------------------------------
   * Vulnérabilité les clés directement sur les Yubikey 4, de mémoire elles sont vulnérables à ROCA. , ils en parlent ici, bien qu'a priori très peu d'utilisateurs ont été impacté, et une update firmware semble corriger le problème. https://www.yubico.com/keycheck/   * Vulnérabilité les clés directement sur les Yubikey 4, de mémoire elles sont vulnérables à ROCA. , ils en parlent ici, bien qu'a priori très peu d'utilisateurs ont été impacté, et une update firmware semble corriger le problème. https://www.yubico.com/keycheck/
Ligne 311: Ligne 310:
   * Si certains souhaitent administrer à tout hasard la Yubikey sur une VM pour une quelconque raison, sous VMWare vous devez activer le passthrough pour éviter d'avoir la surcouche de VMWare qui transforme la Yubikey en SmartCard générique. Pour ce faire, il faut ouvrir le .vmx, puis ajouter:   * Si certains souhaitent administrer à tout hasard la Yubikey sur une VM pour une quelconque raison, sous VMWare vous devez activer le passthrough pour éviter d'avoir la surcouche de VMWare qui transforme la Yubikey en SmartCard générique. Pour ce faire, il faut ouvrir le .vmx, puis ajouter:
  
- '' usb.generic.allowHID = "TRUE" ''+ <code> usb.generic.allowHID = "TRUE" </code>
  
  
- '' usb.generic.allowLastHID = "TRUE" ''+ <code> usb.generic.allowLastHID = "TRUE" </code>
  
  
- '' Yubikey 4: ''+ <code> /Yubikey 4: </code>
  
  
- '' usb.quirks.device0 = "0x1050:0x0407 allow" ''+ <code> usb.quirks.device0 = "0x1050:0x0407 allow" </code>
  
  
- '' Yubikey 5 NFC: ''+ <code> /Yubikey 5 NFC: </code>
  
  
- '' usb.quirks.device0 = "0x1050:0x0405 allow"''+ <code> usb.quirks.device0 = "0x1050:0x0405 allow"</code>
  
  
Ligne 337: Ligne 336:
 ----------------------------------------------------------- -----------------------------------------------------------
   * pour signer vos commit git. vous êtes obligé d'avoir une clé GPG correspondante à l'adresse e-mail utilisée pour vos commits.   * pour signer vos commit git. vous êtes obligé d'avoir une clé GPG correspondante à l'adresse e-mail utilisée pour vos commits.
-Si vous ne voulez pas divulguer publiquement une adresse email, vous pouvez utiliser les « adresses » fournies par github: <user>@users.noreply.github.com+Si vous ne voulez pas divulguer publiquement une adresse email, vous pouvez utiliser les « adresses » fournies par github :  <code><user>@users.noreply.github.com </code>
  
 plus d'infos : https://help.github.com/en/articles/associating-an-email-with-your-gpg-key plus d'infos : https://help.github.com/en/articles/associating-an-email-with-your-gpg-key
yubikey_4_chiffrer_signer_ssh_github_tuto.1571918186.txt.gz · Dernière modification: 2019/10/24 13:56 par M0N5T3R