





Si vous avez suivi les articles précédents, vous savez désormais créer un paquet Deb et créer un dépôt Apt. Nous allons maintenant décrire la signature des paquets et du dépôt à l’aide GnuPG.
On va commencer par l’installer :
1 2 |
$ sudo apt-get update && sudo apt-get upgrade -y $ sudo apt-get install gnupg |
Générer la clé GPG de signature
Note: Il peut être intéressant de créer la clé avec le compte root si c’est lui qui met à jour reprepro. Ce n’est pas obligatoire et si vous ne souhaitez pas le faire, vous pourrez modifier un peu le script /var/reprepro/update
pour manipuler les droits. Je vous laisse voir les modifications à y apporter dans ce cas.
Nous allons commencer par générer la clé. L’opération prend un certain temps, que je ne peux préciser puisque j’ai fini par baisser les bras et aller me coucher en laissant tourner GNU PG toute la nuit.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$ gpg --gen-key gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. gpg: répertoire « /home/dmeziere/.gnupg » créé gpg: nouveau fichier de configuration « /home/dmeziere/.gnupg/gpg.conf » créé gpg: Attention : les options de « /home/dmeziere/.gnupg/gpg.conf » ne sont pas encore actives cette fois gpg: le porte-clefs « /home/dmeziere/.gnupg/secring.gpg » a été créé gpg: le porte-clefs « /home/dmeziere/.gnupg/pubring.gpg » a été créé Sélectionnez le type de clef désiré : (1) RSA et RSA (par défaut) (2) DSA et Elgamal (3) DSA (signature seule) (4) RSA (signature seule) Quel est votre choix ? les clefs RSA peuvent faire une taille comprise entre 1024 et 4096 bits. Quelle taille de clef désirez-vous ? (2048) La taille demandée est 2048 bits Veuillez indiquer le temps pendant lequel cette clef devrait être valable. 0 = la clef n'expire pas <n> = la clef expire dans n jours <n>w = la clef expire dans n semaines <n>m = la clef expire dans n mois <n>y = la clef expire dans n ans Pendant combien de temps la clef est-elle valable ? (0) La clef n'expire pas du tout Est-ce correct ? (o/N) o |
Rien de compliqué, on laisse systématiquement les valeurs par défaut. Je reprends :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Une identité est nécessaire à la clef ; le programme la construit à partir du nom réel, d'un commentaire et d'une adresse électronique de cette façon : « Heinrich Heine (le poète) <heinrichh@duesseldorf.de> » Nom réel : David Mézière Adresse électronique : ********@****.** Commentaire : Vous utilisez le jeu de caractères « utf-8 ». Vous avez sélectionné cette identité : « David Mézière <********@****.**> » Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? o Une phrase secrète est nécessaire pour protéger votre clef secrète. |
Selon Debian, l’utilisation d’un commentaire, comme dans l’exemple « le poète », est déconseillée. On ne signe pas quelque chose en mettant ce type de commentaire, ce à quoi j’adhère.
C’est maintenant que l’on s’attaque à la partie extrêmement longue, la génération de la clé à proprement parler :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
De nombreux octets aléatoires doivent être générés. Vous devriez faire autre chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie. Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire autre chose pour que le système d'exploitation puisse rassembler plus d'entropie (300 octets supplémentaires sont nécessaires). .......+++++ ..+++++ De nombreux octets aléatoires doivent être générés. Vous devriez faire autre chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie. Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire autre chose pour que le système d'exploitation puisse rassembler plus d'entropie (92 octets supplémentaires sont nécessaires). .+++++ Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire autre chose pour que le système d'exploitation puisse rassembler plus d'entropie (128 octets supplémentaires sont nécessaires). ...........+++++ gpg: /home/dmeziere/.gnupg/trustdb.gpg : base de confiance créée gpg: clef ******** marquée de confiance ultime. les clefs publique et secrète ont été créées et signées. gpg: vérification de la base de confiance gpg: 3 marginale(s) nécessaire(s), 1 complète(s) nécessaire(s), modèle de confiance PGP gpg: profondeur : 0 valables : 1 signées : 0 confiance : *********************************** pub 2048R/357B968B 2016-02-17 |
La paire de clés privée / publique est comme toujours au format binaire. Contrairement à cette dernière, une représentation ASCII de la clé publique utilise un jeu réduit de symboles qui transite très facilement par tout moyen de communication. Nous allons maintenant générer cette représentation texte qui permettra à vos usagers de faire confiance à votre dépôt Apt comme à vos paquets Deb.
1 2 3 4 5 |
$ gpg --armor --export ********@****.** --output > ********@****.**.gpg.key -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 (...) -----END PGP PUBLIC KEY BLOCK----- |
Signer un paquet Deb
Si vous utilisez la procédure Debian pour créer vos paquets, dpkg-buildpackage
détectera automatiquement votre clé et l’utilisera pour les signer.
Avec la procédure simplifiée que nous avons vu ensemble, ce ne sera pas le cas. Nous allons utiliser dpkg-sig
.
1 |
$ sudo apt-get install dpkg-sig |
Entre le moment où vous avez créé votre paquet Deb et le moment ou vous l’avez ajouté à votre dépôt Apt, vous allez maintenant pouvoir le signer :
1 2 3 4 5 6 7 8 |
$ dpkg-sig --sign builder dme-sys-base_1.0-1.deb Processing dme-sys-base_1.0-1.deb... Une phrase secrète est nécessaire pour déverrouiller la clef secrète de l'utilisateur : « David Mézière <********@****.**> » clef RSA de 2048 bits, identifiant ********, créée le 2016-02-17 Signed deb dme-sys-base_1.0-1.deb |
Builder
étant le rôle du signataire. On n’a pas besoin ici de préciser la clé à utiliser, dpkg-sig
va prendre la clé binaire que nous venons de créer dans votre profil utilisateur.
Signer un dépôt Apt
Nous allons maintenant voir comment signer votre dépôt, ce qui épargnera à vos utilisateurs lors de l’installation avec apt-get
les avertissements du type :
1 2 3 |
ATTENTION : les paquets suivants n'ont pas été authentifiés. dme-sys-base dme-usr-dmeziere Faut-il installer ces paquets sans vérification ? [o/N] |
Si vous avez mis en place votre dépôt Apt comme nous l’avons vu dans l’article précédent, vous pouvez le réinitialiser en supprimant sa base de données et la partie frontale :
1 |
$ sudo rm -rf /var/reprepro/debian/db /var/www/html/debian/* |
Nous allons mettre à jour notre configuration de distribution et y intégrer la directive SignWith à chaque distribution que nous souhaitons signer :
1 2 3 4 5 6 7 8 9 |
Origin: David Mézière Label: Dépôt personnel Suite: stable Codename: jessie Version: 8 Architectures: i386 amd64 Components: main Description: Dépôt du réseau local SignWith: yes |
Lorsque SignWith vaut yes
, reprepro ira chercher la clé dans votre profile. Vous pouvez aussi au lieu de yes
indiquer l’ID de la clé. Vous pouvez retrouver cet id grâce à la commande :
1 2 3 4 5 6 |
$ gpg --list-keys /home/dmeziere/.gnupg/pubring.gpg --------------------------------- pub 2048R/357B968B 2016-02-17 uid David Mézière <dmeziere@free.fr> sub 2048R/F787300E 2016-02-17 |
Il s’agit ici de la partie F787300E
de la ligne qui commence par sub
.
Enfin, nous allons modifier les options de reprepro pour qu’il nous demande le mot de passe de la clé :
1 2 3 4 |
verbose ask-passphrase basedir /var/reprepro/debian outdir /var/www/html/debian |
Installer la signature du dépôt Apt
Pour pouvoir bénéficier de votre dépôt signé, vos utilisateurs vont devoir installer votre signature dans leur configuration Apt. Au premier chapitre de cet article, nous avons créé une version texte de votre clé publique, que nous avons enregistré dans le fichier [votre adresse email].gpg.key
à l’aide de la commande gpg --armor
.
Nous allons placer cette clé à la racine du serveur web afin qu’elle soit facilement téléchargeable. Dans notre configuration d’exemple, il s’agit du dossier /var/www/html/
.
Vos utilisateurs peuvent désormais l’ajouter en une seule ligne de commande :
1 2 3 4 5 6 7 8 9 10 11 12 |
$ wget -O- http://127.0.0.1/********@****.**.gpg.key | sudo apt-key add - --2016-02-18 23:53:42-- http://127.0.0.1/********@****.**.gpg.key Connexion à 127.0.0.1:80… connecté. requête HTTP transmise, en attente de la réponse… 200 OK Taille : 1702 (1,7K) [application/pgp-keys] Sauvegarde en : « STDOUT » - 100%[========================================================================================================================>] 1,66K --.-KB/s ds 0s 2016-02-18 23:53:42 (258 MB/s) — envoi vers sortie standard [1702/1702] OK |
Après un apt-get update
, vous constaterez que vos apt-get install
n’affichent plus d’avertissement à l’installation de vos paquets Deb.






Un commentaire