web-dev-qa-db-fra.com

Problème de signature avec son propre référentiel apt

Je veux créer un propre référentiel pour notre application. J'ai créé une clé principale avec la signature de la sous-clé avec pgp avant et je signe le paquet deb avec:

dpkg-sig --sign builder sample.deb

Ensuite, je crée le repo avec reprepro:

reprepro --ask-passphrase -b base includedeb all sample.deb

Reprepro crée les fichiers signés nécessaires:

./conf:
distributions  options

./db:
checksums.db  contents.cache.db  packages.db  references.db  release.caches.db  version

./dists:
all

./dists/all:
InRelease  main  Release  Release.gpg

./dists/all/main:
binary-AMD64  binary-i386

./dists/all/main/binary-AMD64:
Packages  Packages.gz  Release

./dists/all/main/binary-i386:
Packages  Packages.gz  Release

./pool:
main

./pool/main:
s

./pool/main/s:
sample

./pool/main/s/sample:
sample_2.2.48.9015_all.deb

J'installe la clé publique sur l'ordinateur client, mais après l'installation du package, je reçois le message suivant:

WARNING: The following packages cannot be authenticated!
  sample
Install these packages without verification? [y/N]

Pourquoi?

2
crazyman

La signature GPG est compliquée. Pour les référentiels APT, il existe deux couches de signatures GPG:

  1. Signatures sur les paquets eux-mêmes, avec dpkg-sig ou ou debsign.
  2. Signatures sur les métadonnées du référentiel.

Vous voyez ce message car APT ne voit aucune signature sur les métadonnées de votre référentiel. Vous pouvez y arriver en ajoutant SignWith à votre configuration reprepro. Vous pouvez en lire plus dans un article de blog complet que j'ai écrit, ici .

Vous pouvez vérifier que SignWith a fonctionné en recherchant un fichier nommé Release.gpg ou InRelease. Si vous trouvez un fichier nommé InRelease, affichez-en le contenu et assurez-vous qu'une signature GPG se trouve en bas. Si tel est le cas, reprepro a généré la signature correctement. N'oubliez pas que les référentiels signés par GPG sont toujours vulnérables à un grand nombre d'attaques d'interception, à moins qu'ils ne soient gérés via HTTPS.

Je vous recommande également de vérifier que la clé publique GPG a été correctement importée sur le système client en exécutant apt-key list. Si vous ne voyez pas la clé dans la liste, vous devez l'ajouter avec apt-key add filename.

Il est important de noter qu'Ubuntu et Debian ne vérifient pas les signatures GPG des paquets - elles sont désactivées par défaut et terriblement, terriblement difficiles à obtenir. Je conseillerais d’éviter que GPG signe vos colis.

Notez également que vous devez distribuer votre référentiel sur HTTPS afin d'éviter une multitude de bugs de sécurité (même avec les signatures GPG).

2
Joe Damato