Vérification de clés GPG

Quand tout est (trop ?) bien organisé, il y a besoin d'une ouverture. Ici on parle de tout, mais pas de n'importe quoi et toujours dans le respect d'autrui, vous êtes prévenus.
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Vérification de clés GPG

Message par calimo »

Hello tout le monde !

J'ai déjà posté cette question sur les forums Ubuntu (en, fr) mais sans obtenir de réponse réellement satisfaisante (ou de réponse du tout sur le forum francophone, comme trop souvent). Donc je me permet de la reposer ici !

Mettons que j'ai un fichier SHA1SUM.txt et sa signature SHA1SUM.asc (p.ex http://download.opensuse.org/distribution/11.0/iso/dvd/). Je souhaite vérifier que cette signature et valide.

Solution 1 :

Code : Tout sélectionner

gpg --verify SHA1SUMS.asc SHA1SUMS.txt
La signature est valide. Mais c'est un peu pénible d'ouvrir une console, naviguer par cd jusqu'au bon endroit, faire un man pour se rappeler comment ça fonctionne, etc ! Donc je cherche un front-end pour le faire en quelques clics (sous Linux, Ubuntu pour être précis).

Solution 2 : Seahorse. Si je fais un clic droit dans Nautilus, j'ai une option "Déchiffrer le fichier" mais comme ce n'est pas un fichier chiffré mais une signature, ça ne me sert à rien. Si je lance Seahorse avec le nom du fichier comme argument, Seahorse s'ouvre "normalement" et je n'ai trouvé aucune option pour vérifier la signature.

Solution 3 : GPA (GNU Privacy Assistant). Je peux cliquer sur le bouton "Files" puis ouvrir mon fichier (ou lancer simplement gpa avec le nom du fichier asc comme argument), et là il y a un bouton "Vérifier". Mais il ne me demande pas quel fichier vérifier (?) et me dit que la signature est mauvaise. Si j'ouvre le fichier txt il me dit que le fichier ne contient pas de données GPG (ce qui est vrai).
Je sens que je ne suis pas loin, mais il manque quelque chose...

Suite à une réponse sur le forum anglais d'Ubuntu j'ai essayé KGPG mais sans plus de succès, je ne sais pas trop comment m'y prendre non plus et le manuel ne parle que de chiffrement/déchiffrement...

Bref, ma question est : comment faire pour valider des signatures ? Comment faites-vous ? ("gpg en ligne de commande" n'est pas une réponse :D)

Merci pour votre éclairage à ce sujet,
Xavier

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
yoko2
Salamandre
Messages : 40
Inscription : 11 oct. 2008, 10:40

Message par yoko2 »

sha1 est une somme de contrôle. Elle as des vertus cryptographiques mais ça reste une somme de contrôle toute bête.


Donc tu peut faire un nautilus action tout bête avec gtk-dialog pour faire beau

Code : Tout sélectionner

#!/bin/sh
nom=`echo $1 | awk -F. '{ print $1 }'`
gpg --verify $1.asc $1 > /dev/null 2> /dev/null

if [ $? -eg 0 ]; then
    $RES = "valide"
else
    $RES = "invlide"
fi

export MAIN_DIALOG="
<vbox>
    <text>
        <label>Fichier $1 $RES.</label>
    </text>
</vbox>"

gtkdialog --program=$MAIN_DIALOG
Voila tu copie ce script tu le rend exécutable et tu le met en nautilus action avec un nom de fichier en paramètre.

Pour faire simple au début on cherche le nom sans l'extension.
Puis on fait le test que tu connais.

On cherche à savoir quel est le résultat du test avec le if.

On initialise ensuite une variable qui va définir la fenêtre qui va s'afficher. Enfin on lance gtk-dialog pour faire afficher la fenêtre.

Note que si gpg plante il te diras quand même que le fichier n'es pas valide. J'ai écris ce script plus ou moins de tête sans le tester mais ça doit être à peut prêt ça.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
ex-yoko
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Bizarre qu'il faille passer par un script pour quelque chose d'aussi "bête" ? :shock: :!: :?:

Pour l'instant j'en suis à ça :

Code : Tout sélectionner

#!/bin/sh
nom=`echo $1 | awk -F. '{ print $1 }'`
gpg --verify $1.asc $1 > /dev/null 2> /dev/null

if [ $? -eq 0 ]; then
    RES="valide"
else
    RES="invalide"
fi

zenity --info --text="$1 $RES"
J'ai utilisé zenity que je connais et qui me paraît plus simple (il y avait une erreur du type

Code : Tout sélectionner

** ERROR **: GtkDialog: Could not find the dialog description in the environment variable ''.
aborting...
Aborted
avec GtkDialog

Malheureusement pour l'instant il me dit "MD5SUMS.asc invalide". Je vais investiguer ça...
En tous cas merci pour l'amorce. Je vous tiendrai au courant si j'arrive à quelque chose ;-)

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
yoko2
Salamandre
Messages : 40
Inscription : 11 oct. 2008, 10:40

Message par yoko2 »

calimo a écrit :Bizarre qu'il faille passer par un script pour quelque chose d'aussi "bête" ? :shock: :!: :?:
C'est justement parce que c'est bête que c'est facilement scriptable.

Vire le $ devant la variable à l'appel de gtk-dialog.

zenity je connais pas.

étudis le comportement de gpg pour voir la valeur de retour qu'il donne quand il trouve que c'est valide ou non (echo $?). Si elle ne change pas (ce qui me surprendrais de la par de gpg), tu parse la sortie comme ça par exemple :

Code : Tout sélectionner

gpg --verify $1.asc $1 | grep "invalide" > /dev/null 2> /dev/null

if [ $? -eq 0 ]; then
    RES="invalide"
else
    RES="valide"
fi
note que j'inverse la condition parce que grep va trouver ce qu'il cherche si la vérification échoue.

Dernière chose je viens de voir que gpg a une option -q elle peut peut être remplacé mes redirections de flux vers /dev/null.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3
ex-yoko
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

yoko2 a écrit :C'est justement parce que c'est bête que c'est facilement scriptable.
Je voulais dire : c'est tellement bête que quelqu'un a bien déjà du faire tout ça !

Bon, j'ai essayé l'option -q sans trop de changement visible. Plutôt que de vérifier si c'est valide ou invalide je préfère encore afficher toute la sortie, c'est plus sûr !

Je suis arrivé à ça :

Code : Tout sélectionner

#!/bin/sh

FILE=`zenity --file-selection --title="Choisissez un fichier de données pour vérifier la signature $1" --window-icon=/usr/share/icons/Human/16x16/status/stock_open.png`
case $? in
  0)
    gpg --verify $1 $FILE 2> /tmp/gpg.output
    zenity --text-info --title=$FILE --filename=/tmp/gpg.output --window-icon=/usr/share/pixmaps/seahorse.png --width=600 --height=170;;
  ?)
    zenity --error --text="Aucun fichier sélectionné.";;
esac
Le passage par un fichier temporaire n'est pas des plus élégant, mais ça marche... reste à voir dans une action nautilus (pas gagné, problème de répertoires de travail ou qqch du genre).

PS : zenity me semble beaucoup plus simple à utiliser que GtkDialog, et suffisamment complet pour ce que je veux faire...

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
calimo
Animal mythique
Messages : 14118
Inscription : 26 déc. 2003, 11:51

Message par calimo »

Je suis passé en bash (#!/bin/bash) et j'ai mis un %d comme 2è argument dans l'action nautilus ce qui me permet de faire un cd $2 et de résoudre le problème.

Code : Tout sélectionner

#!/bin/bash
cd $2
FILE=`zenity --file-selection --title="Choisissez un fichier de données pour vérifier la signature $1" --window-icon=/usr/share/icons/Human/16x16/status/stock_open.png`
case $? in
  0)
    gpg --verify $1 $FILE 2> /tmp/gpg.output
    zenity --text-info --title=$FILE --filename=/tmp/gpg.output --window-icon=/usr/share/pixmaps/seahorse.png --width=600 --height=170;;
  ?)
    zenity --error --text="Aucun fichier sélectionné.";;
esac
Reste à voir ce qui va se passer lorsqu'il faudra importer une nouvelle clé !

Message envoyé avec : Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.9.0.3) Gecko/2008092510 Ubuntu/8.04 (hardy) Firefox/3.0.3
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Semrush [Bot] et 15 invités