无法验证内核签名“gpg:无法检查签名:未找到公钥”

GAD*_*D3R 5 gpg

为了在我的 Debian jessie 上编译新内核,我尝试按照官方网站上的说明验证 GPG 密钥。

我已经下载了linux-3.18.35.tar.signlinux-3.18.35.tar.xz版本并使用unzx.

.tar使用以下命令验证存档:

gpg --verify linux-3.18.35.tar.sign
Run Code Online (Sandbox Code Playgroud)

我得到:

gpg: assuming signed data in `linux-3.18.35.tar'
gpg: Signature made Wed 08 Jun 2016 01:19:29 AM CET using RSA key ID 6092693E
gpg: Can't check signature: public key not found
Run Code Online (Sandbox Code Playgroud)

从 PGP 密钥服务器获取公钥:

#gpg --keyserver hkp://keys.gnupg.net --recv-keys 6092693E

gpg: requesting key 6092693E from hkp server keys.gnupg.net
?: keys.gnupg.net: Host not found
gpgkeys: HTTP fetch error 7: couldn't connect: Connection refused
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Run Code Online (Sandbox Code Playgroud)

我的4.4.13版本也有类似的问题。

我已经尝试了以下答案

# gpg --keyserver subkeys.pgp.net --recv-keys 6092693E && gpg --export --armor 6092693E | sudo apt-key add -

gpg: requesting key 6092693E from hkp server subkeys.pgp.net
gpg: keyserver timed out
gpg: keyserver receive failed: keyserver error
Run Code Online (Sandbox Code Playgroud)

和:

# gpg --keyserver subkeys.pgp.net:80 --recv-keys 6092693E

gpg: requesting key 6092693E from subkeys.pgp.net:80
gpgkeys: no keyserver host provided
gpg: keyserver internal error
gpg: keyserver receive failed: keyserver error
Run Code Online (Sandbox Code Playgroud)

如何正确验证内核签名?

Ste*_*itt 7

你只需要在你的钥匙圈里有公钥:

gpg --keyserver subkeys.pgp.net --recv-keys 0x38DBBDC86092693E
Run Code Online (Sandbox Code Playgroud)

使用长标识符!)。如果超时,请重试 - 有多个服务器,其中一些目前似乎有问题。apt-key等根本不参与其中。

一旦你把钥匙放在钥匙圈里,

gpg --verify linux-3.18.35.tar.sign
Run Code Online (Sandbox Code Playgroud)

应该管用。

您还可以配置一个密钥服务器池(无论如何这是一个好主意):

  1. 安装gnupg-curlapt-get install gnupg-curl在 Debian 上);
  2. 下载 SKS CA

    cd ~/.gnupg; wget https://sks-keyservers.net/sks-keyservers.netCA.pem
    
    Run Code Online (Sandbox Code Playgroud)
  3. 验证一下

  4. 将以下行添加到您的~/.gnupg/gpg.conf,或者如果它已经存在则更改它:

    keyserver hkps://hkps.pool.sks-keyservers.net
    
    Run Code Online (Sandbox Code Playgroud)

    并通过添加或设置证书

    keyserver-options ca-cert-file=/home/.../.gnupg/sks-keyservers.netCA.pem
    
    Run Code Online (Sandbox Code Playgroud)

    ~/.gnupg/gpg.conf(对于 GnuPG 1)或

    keyserver hkps://hkps.pool.sks-keyservers.net
    hkp-cacert /home/.../.gnupg/sks-keyservers.netCA.pem
    
    Run Code Online (Sandbox Code Playgroud)

    ~/.gnupg/dirmngr.conf(对于 GnuPG 2),...在这两种情况下将路径中的替换为您的主目录的适当值。

一旦你这样做了,

gpg --recv-keys 0x38DBBDC86092693E
Run Code Online (Sandbox Code Playgroud)

应该可靠地检索密钥。

如果一切都失败了,您可以手动下载并导入密钥:

curl 'http://pgp.surfnet.nl:11371/pks/lookup?op=get&search=0x38DBBDC86092693E' > gregkh.key
gpg --import gregkh.key
Run Code Online (Sandbox Code Playgroud)

  • @GAD3R 我也不知道为什么这会解决这个问题...您从 `gpg` 收到的消息现在意味着签名有效,但您与 Greg KH 的密钥没有任何个人联系。如果您在强组中没有 GPG 密钥,那是完全正常的。这意味着您下载的存档确实是由密钥 0x38DBBDC86092693E 签名的,但是您没有任何方法可以验证该密钥实际上属于 Greg KH(通过最终连接到您的 GPG 密钥的密钥签名)。 (2认同)
  • @x-yuri 是的,请参阅[sks-keyservers 消失了。用什么代替?](https://unix.stackexchange.com/q/656205/86440)我想我应该更新所有涉及 SKS 的答案... (2认同)