我尝试使用以下命令解密文件:
gpg --output file.txt --decrypt file.pgp
文件解密成功但出现错误:
“gpg:无法检查签名:找不到公钥”
知道为什么我会收到这个错误吗?
你得到那个错误是因为你没有签名消息的人的公钥。
gpg
应该给你一条消息,其中包含用于签名的密钥的 ID。从加密文件的人那里获取公钥并将其导入您的密钥环(gpg2 --import key.asc
);之后你应该能够验证签名。
如果发件人将其公钥提交给密钥服务器(例如,https://pgp.mit.edu/),那么您可以直接从密钥服务器导入密钥:
gpg2 --keyserver https://pgp.mit.edu/ --search-keys <sender_name_or_address>
您需要 gpg 密钥环中的公钥。要将公钥导入您的公钥环,请将公钥块放入扩展名为 .gpg 的文本文件中,然后发出以下命令:
gpg --import <your-file>.gpg
加密文件的实体应该为您提供这样的块。例如,ftp://ftp.gnu.org/gnu/gnu-keyring.gpg 有 gnu.org 的块。
有关更深入的解释,请参阅 在没有 .sig 或 .asc 文件的情况下使用 GPG 验证文件?
还有一个类似的问题,是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
我收到了相同的消息,但我的文件已按预期解密。如果您可以看到输出文件文件,请检查您的目标路径。
如果知道自己的签名是对的,可以绕过
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
如果您使用的是 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
您可能需要导入公钥才能进行验证。在这种情况下,我从开源下载了这两个文件。这里我的变量代表各自的文件名
.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
我在 repo init 时遇到了这个问题, 我不得不更新我的 linux 机器中的路径变量并解决了它。
PATH=~/bin:$PATH