Utiliser GPG dans WSL2

Photo by Pixabay on Pexels.com

Pourquoi utiliser GPG ? Par exemple pour signer les commits GIT. Maintenant comment faire quand on est sous Windows 10 et qu’on souhaite utiliser le sous système Linux (WSL2)?

Sous GNU/Linux, l’installation et l’utilisation avec git est très simple. Avec WSL2,… il faut un peu d’huile de coude 🙂

Je vais tâcher de décrire dans cet article les différentes manipulations nécessaires pour:

  • Importer une clé GPG existante
  • Utiliser GPG pour signer mes commits dans WSL2

Importer une clé GPG existante

Export de la clé GPG

Identifier l’ ID de la clé

Lancez la commande suivante:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

Import

gpg --import public.key
gpg --import private.key

Vérification

Pour vérifier que la clé est bien configurée, vous pouvez lancer la commande suivante:

gpg --list-secret-keys --keyid-format LONG   alexandre@....
sec   rsa4096/CLE_ID 2019-12-20 [SC]
      ********************
uid                [  ultime ] Alexandre <alexandre@....>
ssb   rsa4096/SUB 2019-12-20 [E]

Si la clé n’est pas reconnue comme ultime ou comme de confiance, il faudra l’éditer:

gpg --edit-key CLE_ID
Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)
  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu
Your decision? 

Si vous ne voulez pas trop vous compliquer, je vous conseille de répondre 5.

Configuration GPG pour WSL2

Avant de configurer l’agent GPG, vous pouvez vous référer à cet article pour configurer GIT et GPG. La configuration est équivalente.

Ensuite, créez le fichier ~/.gnupg/gpg.conf avec le contenu suivant:

# Uncomment within config (or add this line)
# This tells gpg to use the gpg-agent
use-agent
# Set the default key
default-key CLE_ID

Puis créez le fichier ~/.gnupg/gpg-agent.conf avec le contenu ci-dessous:

default-cache-ttl 34560000
max-cache-ttl 34560000
pinentry-program /usr/bin/pinentry-curses

Le cache ici est défini en secondes. Il est mis ici à 400 jours.

Ce dernier fichier fait référence au programme pinentry. Vous pouvez vérifier sa présence grâce à la commande:

ls /usr/bin/pinentry-curses 

Si vous ne l’avez pas, vous pouvez l’installer grâce à la commande suivante:

sudo apt install pinentry-curses

Maintenant, on peut configurer l’environnement BASH en modifiant le fichier ~/.bashrc

# enable GPG signing
export GPG_TTY=$(tty)
if [ ! -f ~/.gnupg/S.gpg-agent ]; then
    eval $( gpg-agent --daemon --options ~/.gnupg/gpg-agent.conf )
fi
export GPG_AGENT_INFO=${HOME}/.gnupg/S.gpg-agent:0:1

Redémarrez ensuite WSL2 pour que ça soit pris en compte.

A la première utilisation de GPG ( par ex. lors d’un commit, vous aurez une interface Ncurses qui apparaîtra dans votre prompt WSL2. Vous aurez à renseigner le mot de passe de votre clé.

Vérifier les commit GIT avec GPG

Juste pour un pense bête, voici comment paramétrer GIT et GITHUB/GITLAB pour signer les commits avec GPG.

Configuration GPG

Exécutez la commande suivante :

gpg --full-generate-key

Sélectionnez une clé RSA (question 1) de 4096 bits (question 2).

Une fois cette commande effectuée, vous pouvez récupérer votre clé GPG avec cette commande:

gpg –list-secret-keys –keyid-format LONG

gpg --list-secret-keys --keyid-format LONG alexandre@....
/home/alexandre/.gnupg/pubring.kbx
----------------------------------
sec rsa4096/XXXXXXXXXX 2019-08-09 [SC]
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid [ ultime ] Alexandre Touret <mon.mail.github.ou.gitlab@monprovider.fr>
ssb rsa4096/XXXXXXXXXX 2019-08-09 [E]

Ensuite, il faut exécuter cette commande

gpg --armor --export XXXXXXXXXX

Configuration GIT

Indiquez la clé GPG à GIT

 git config --local user.signingkey 6F9D7D5FCE959337

Et indiquez que vous voulez signer tous vos commits

git config --local commit.gpgsign true

Si vous ne faites pas cette dernière commande, vous devrez ajouter l’option -S à chaque exécution de la commande git commit.

Exemple:

 git -a -S -m "Ajout javadoc"

Configuration GITHUB

Sur Github ( il y a la même chose sur gitlab), vous pouvez dans vos paramètres ajouter cette clé . De cette manière, vos prochains commits envoyés seront vérifiés.

 En espérant que ça serve à d’autres 🙂

Gérer plusieurs clés et plusieurs repo GIT

En attendant d’avoir plus d’imagination, voici un rapide tuto pour gérer plusieurs référentiels GIT avec des clés SSH différentes.

Imaginons que vous deviez vous connecter sur différents serveurs GIT (ex. github et gitlab) avec des emails différents et donc des clés RSA différentes ( oui je sais ce cas n’arrive pas souvent ). Le tout sous Windows et GNU/LINUX. Sous GNU/LINUX ont peut le gérer différemment via la commande ssh-add.

Pour pouvoir gérer ceci de manière simple, j’ai fait la manipulation suivante :

Dans le répertoire ~/.ssh. J’ai crée les différentes clés avec la doc fournie par GITHUB. Puis, j’ai crée le fichier ~/.ssh/config avec le contenu suivant:

 

Host monhost1.fr
HostName monhost1.fr
User git
IdentityFile ~/.ssh/id_rsa

Host monhost2.fr
HostName monhost2.fr
User git
IdentityFile ~/.ssh/nouvellecle_rsa

 

Et voila !

Après avoir fait les différentes configurations coté serveur ( c.-a-d. ajout des clés publiques ), je peux interagir avec les différents serveurs ( pull, push ).

En espérant que ça puisse servir à d’autres

 

Ma configuration CYGWIN

Dans la série, j’essaye de sauvegarder toutes mes configurations, voici ce que j’ai fait pour configurer correctement cygwin.

Pour ceux qui ne connaissent pas ou qui n’ont pas la chance d’utiliser windows au travail, cygwin est un shell avec tous les outils GNU.

En attendant d’avoir windows 10 ( au travail ) et un BASH intégré, il n’y a pas mieux. Du moins à mon humble avis.2000px-Cygwin_logo.svg.png

GIT

Complétion

On a besoin des fichiers suivants

Je les ai téléchargé et placé dans le répertoire $HOME.

Activation de la configuration et affichage de la branche en cours dans le prompt

J’ai activé la configuration git en exécutant les scripts précédemment téléchargés.

Voici la personnalisation que j’ai paramétré dans la variable d’environnement PS1

source ~/.git-completion.bash
source ~/.git-prompt.sh
# Customization pour GIT
export PS1="\[\e[1;32m\]\u\[\e[0;39m\]@\[\e[1;36m\]\h\[\e[0;39m\]:\[\e[1;33m\]\w\[\e[0;39m\]\[\e[1; 35m\]\$(__git_ps1 )\[\e[0;39m\] \[\e[1;37m\]\n$ "

view raw
.bashrc
hosted with ❤ by GitHub

J’ai également activé des propriétés qui étaient en commentaire dans ce fichier. Je ne les ai pas listée pour ne pas trop surcharger l’article 🙂

Configuration Nom et sécurité

git config –global user.name "Alexandre Touret"
git config –global user.email "john@doe.com"
git config –global credential.helper store

view raw
bash
hosted with ❤ by GitHub

VIM

Que serait un prompt sans vim ?

J’ai installé une suite de plugin : The ultimate vimrc. Il faut cloner le repo GIT et lancer un script

git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh