Obtenez les identifiants clés et les empreintes digitales d'apt dans un format lisible par machine

11

J'essaie de corriger un problème dans puppetlabs-apt pour permettre l'utilisation d'empreintes digitales clés comme identificateurs pour garantir qu'une certaine clé est présente par son empreinte digitale à 40 chiffres.

J'ai du mal à vérifier que la clé est présente et j'ai besoin d'une commande qui produira ce qui suit:

  • L'identifiant à 8 chiffres de la clé.
  • ID à 16 chiffres de la clé.
  • L'identifiant à 40 chiffres de la clé.

Existe-t-il une apt-keycommande que je peux utiliser pour sortir ces valeurs, une par ligne, afin que je puisse analyser la sortie et vérifier si la clé est présente?

Naftuli Kay
la source

Réponses:

21

apt-key adv vous permettra de passer directement les options à GnuPG.

Vous pouvez donc faire quelque chose comme ça pour obtenir une sortie analysable:

# apt-key adv --list-public-keys --with-fingerprint --with-colons 
⋮
fpr:::::::::126C0D24BD8A2942CC7DF8AC7638D0442B90D010:
pub:-:4096:1:9D6D8F6BC857C906:2014-11-21:2022-11-19::-:Debian Security Archive Automatic Signing Key (8/jessie) <[email protected]>::scSC:
fpr:::::::::D21169141CECD440F2EB8DDA9D6D8F6BC857C906:
⋮

Étant donné que vous ne vous intéressez qu'à l'empreinte digitale (les identifiants à 8 et 16 chiffres ne sont que la fin de l'empreinte digitale), | grep ^fpril semble vous donner les lignes qui vous intéressent.

derobert
la source
Donc, prendre fingerprint[-8:](Python) me donnerait l'ID à 8 chiffres et fingerpint[-16:]me donnerait l'ID à 16 chiffres? Je suis
stupide
2
@NaftuliTzviKay L'empreinte digitale est un hachage dérivé de manière cryptographique. Il n'y a aucun avantage en termes de sécurité à le hacher à nouveau par rapport à le tronquer. De plus, les 8 chiffres et probablement les 16 chiffres sont trop courts pour être sécurisés; vous pouvez générer une clé en double par force brute. Seul le hachage complet est raisonnablement sécurisé. Je ne peux pas commenter si votre code python fait comme prévu, car je ne connais pas python ... Mais je suppose que oui. Ce ne sont que les 8 ou 16 derniers chiffres hexadécimaux.
derobert