无法检查签名:找不到公钥

问题描述 投票:0回答:8

我尝试使用以下命令解密文件:

gpg --output file.txt --decrypt file.pgp

文件解密成功但出现错误:

“gpg:无法检查签名:找不到公钥”

知道为什么我会收到这个错误吗?

encryption cmd pgp gnupg
8个回答
65
投票

你得到那个错误是因为你没有签名消息的人的公钥。

gpg
应该给你一条消息,其中包含用于签名的密钥的 ID。从加密文件的人那里获取公钥并将其导入您的密钥环(
gpg2 --import key.asc
);之后你应该能够验证签名。

如果发件人将其公钥提交给密钥服务器(例如,https://pgp.mit.edu/),那么您可以直接从密钥服务器导入密钥:

gpg2 --keyserver https://pgp.mit.edu/ --search-keys <sender_name_or_address>

40
投票

您需要 gpg 密钥环中的公钥。要将公钥导入您的公钥环,请将公钥块放入扩展名为 .gpg 的文本文件中,然后发出以下命令:

gpg --import <your-file>.gpg

加密文件的实体应该为您提供这样的块。例如,ftp://ftp.gnu.org/gnu/gnu-keyring.gpg 有 gnu.org 的块。

有关更深入的解释,请参阅 在没有 .sig 或 .asc 文件的情况下使用 GPG 验证文件?


31
投票

还有一个类似的问题,是tomcat数字签名。

$ gpg --verify apache-tomcat-9.0.16-windows-x64.zip.asc apache-tomcat-9.0.16-windows- 
x64.zip
gpg: Signature made 2019年02月 5日  0:32:50
gpg:                using RSA key A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
gpg: Can't check signature: No public key

然后我用它提供的RSA密钥接收公钥来验证。

$ gpg --receive-keys A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
gpg: key 10C01C5A2F6059E7: 38 signatures not checked due to missing keys
gpg: key 10C01C5A2F6059E7: public key "Mark E D Thomas <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1

然后就成功了

$ gpg --verify apache-tomcat-9.0.16-windows-x64.zip.asc
gpg: assuming signed data in 'apache-tomcat-9.0.16-windows-x64.zip'
gpg: Signature made 2019年02月 5日  0:32:50
gpg:                using RSA key A9C5DF4D22E99998D9875A5110C01C5A2F6059E7
gpg: Good signature from "Mark E D Thomas <[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: A9C5 DF4D 22E9 9998 D987  5A51 10C0 1C5A 2F60 59E7

1
投票

我收到了相同的消息,但我的文件已按预期解密。如果您可以看到输出文件文件,请检查您的目标路径。


0
投票

如果知道自己的签名是对的,可以绕过

gpg
,手动测试:

这里我使用了

sha256sum
来验证我的debian live ISO:

$% sha256sum debian-live-11.2.0-amd64-standard.iso | grep dd0dbffdb9c53ee8a35f869e95111a50e231a1800977dfd1604b64a0525709c9
dd0dbffdb9c53ee8a35f869e95111a50e231a1800977dfd1604b64a0525709c9  debian-live-11.2.0-amd64-standard.iso

0
投票

如果您使用的是 Debian,请尝试:

sudo apt-get install debian-keyring debian-archive-keyring

sudo apt-key update

sudo apt-get update

然后,做你的事:

gpg --output file.txt --decrypt file.pgp

0
投票

您可能需要导入公钥才能进行验证。在这种情况下,我从开源下载了这两个文件。这里我的变量代表各自的文件名

.tar.gz
tar.tz.asc

# get the public key from asc file
rsa_key=$(gpg $driver_asc 2>&1 | grep RSA | awk '{print $5}')  

# import the public key
gpg --import $rsa

# verify valid signature
VERIFIED=$(gpg --verify $driver_asc $driver_filename 2>&1 | grep 'Good signature')

# handle results
if [[ $VERIFIED ]]; then
    echo "gpg key verified. Installing..."
    # do stuff with file, gunzip etc.
else
    echo "gpg key cannot be verified. Aborting installation"
    exit 1
fi  

-1
投票

我在 repo init 时遇到了这个问题, 我不得不更新我的 linux 机器中的路径变量并解决了它。

PATH=~/bin:$PATH

© www.soinside.com 2019 - 2024. All rights reserved.