如何在没有公钥的情况下自动验证 gpg 签名文件(下载公钥),确认并启动下一步

如何在没有公钥的情况下自动验证 gpg 签名文件(下载公钥),确认并启动下一步

我想创建一个下载任务,验证一个没有公钥的文件,我将下载该文件,并得到答案是否适合下一步。

我用 linux-4.12.7.ta​​r.gz 和 linux-4.12.7.ta​​r.sign 完成了这个示例(https://www.kernel.org/signature.html)。

gpg 正常,我有:

~# xz -cd linux-4.12.7.tar.xz | gpg --verify linux-4.12.7.tar.sign -
gpg: assuming signed data in 'linux-4.12.7.tar'
gpg: Signature made Sun 13 Aug 2017 04:35:18 CEST
gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Can't check signature: public key not found

gpg 与 status-fd,我有:

~# xz -cd linux-4.12.7.tar.xz | gpg --status-fd 1 --verify linux-4.12.7.tar.sign -
gpg: assuming signed data in 'linux-4.12.7.tar'
[GNUPG:] NEWSIG
gpg: Signature made Sun 13 Aug 2017 04:35:18 CEST
gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
[GNUPG:] ERRSIG 38DBBDC86092693E 1 8 00 1502591718 9
[GNUPG:] NO_PUBKEY 38DBBDC86092693E
gpg: Can't check signature: public key not found

我被阻止了,如何自动下载公钥,并验证它是否适合下一步?如果下一步顺利,如果不行则发出警报停止。

手动的,但是怎么拿钥匙自动做呢?

~# gpg --keyserver hkp://keys.gnupg.net --recv-keys 38DBBDC86092693E
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman (Linux kernel stable release signing key) <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1

当它好的时候:

~# xz -cd linux-4.12.7.tar.xz | gpg --verify linux-4.12.7.tar.sign -
gpg: Signature made dim. 13 août 2017 04:35:18 CEST
gpg:                using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key) <[email protected]>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 647F 2865 4894 E3BD 4571  99BE 38DB BDC8 6092 693E

最后,如果效果好,就开始下一步。

提前致谢。

答案1

您可以输入keyserver-options auto-key-retrieve~/.gnupg/gpg.conf它会获取您没有但想要检查/加密的任何密钥。

但我真的不明白为什么在这种情况下需要它,因为如果您要信任下载的 blob 提供的任何密钥,那么它就违背了签名验证的目的。

相关内容