J'essaie de vérifier la signature d'un paquet sur le site Web du paquet FreeBSD
wget http://pkg.freebsd.org/FreeBSD:11:amd64/latest/digests.txz
tar xf digests.txz
Cela donne trois fichiers: digests
, digests.pub
digests.sig
je suppose que digests.sig
est une signature pour le fichier digests
avec digests.pub
comme clé publique. Mais j'ai essayé de confirmer que:
openssl dgst -verify digests.pub -signature digests.sig digests
et j'ai reçu le message
Verification Failure
Je suppose que j'ai quelque chose de mal - quelqu'un peut-il me dire ce qui me manque?
EDIT: Sur la base d'une recherche dans le code source, je pense que la fonction importante se trouve ici , appelée les rsa_verify_cert_cb
appels RSA_verify
de la bibliothèque openssl. Mais je n'ai pas compris ce qui est alimenté, ni s'il est possible d'appeler cette fonction à l'aide des openssl
outils de ligne de commande.
openssl rsautl -pubin -inkey digests.pub -verify -in digests.sig -asn1parse
ne semble pas correspondre non plus.sha256sum digests
Réponses:
Puisqu'il n'y a pas de "Comment faire" sur Internet pour la vérification manuelle des paquets FreeBSD, voici ce que j'ai découvert.
L'astuce est que la chaîne d'octets en
openssl rsautl
sortie est en fait le hachage de la chaîne qui est le hachage SHA256 d'un fichier.Par exemple, téléchargez la version actuelle
http://pkg.freebsd.org/FreeBSD:12:amd64/latest/digests.txz
, extrayez-la et procédez comme suit:Méthode 1 (un revêtement en utilisant
openssl dgst
)Il est important ici de
tr -d '\n'
supprimer une nouvelle ligne de l'entrée standard, elle n'est donc pas incluse dans l'entrée de chaîne pouropenssl dgst
.Cette commande devrait sortir
Verified OK
.Méthode 2 (comparaison visuelle de la chaîne d'octets du fichier .sig avec le hachage généré manuellement)
Utilisez l'utilitaire OpenSSL pour vider le contenu de digests.sig
Ici, vous pouvez voir que l'objet incorporé est un hachage SHA256 et sa valeur est
acc6acbecd5e61636282624bba77376e0bfaeaef6e1021016264062fd0f16022
.Maintenant, calculez SHA256 du fichier
digests
:echo
commande et comparer avec la valeur retournée paropenssl rsautl
:Remarquez comment la valeur de l'étape 3. correspond à la valeur de l'étape 1. Le fichier
digests
est donc valide.la source
Ce message indique que la clé publique ne correspond pas au fichier que vous avez téléchargé. Selon la page de manuel de dgst -verify filename, vérifiez la signature en utilisant la clé publique dans "filename". La sortie est "Vérification OK" ou "Échec de vérification". La cause la plus probable est que le fichier a été corrompu pendant le téléchargement. J'essaierais de le télécharger à nouveau et s'il continue d'échouer la vérification, c'est le signe d'un lien de téléchargement compromis (mais comme il provient du site Web freebsd, je soupçonne qu'il s'agit simplement d'une erreur de téléchargement. Même dans ce cas, je vérifierais le nouveau télécharger juste pour être du bon côté). Si votre connexion Internet est lente / peu fiable, il peut falloir quelques essais pour que le téléchargement soit correct. Si vous avez besoin de vérifier les informations sur les commandes, c'est '
la source