我正在编写一个程序,需要下载各种发行版的 GPG 密钥以进行无人值守的网络安装。为了安全且自动地执行此操作,我需要通过 HTTPS 下载密钥,这意味着“gpg --recv-keys”不是一种选择。其他发行版(例如 Fedora)通过 HTTPS 在其网站上提供密钥(例如https://fedoraproject.org/static/E8E40FDE.txt),但我在 ubuntu.com 上找不到 Ubuntu 密钥文件。有人知道我可以通过 HTTPS 在哪里获取它吗?
答案1
钥匙可在ubuntu-keyring
包裹。因此,与任何 Ubuntu 软件包一样,您可以从发射台,它确实提供了 HTTPS(选择合适的版本并根据需要下载 tarball 或 deb 文件)。
事实上,你可以让 GnuPG2 通过 HKPS(带 SSL 的 HKP)导入密钥,这样就可以--recv-keys
安全地进行导入,但这个过程有点烦人。要使用 HKPS,我们需要:
- 告诉
dirmngr
使用 HKPS 密钥服务器 - 告诉
dirmngr
CA 证书在哪里 gpg2
通过而不是获取密钥gpg
- 该apt-key
命令调用gpg
,并且gpg
似乎不支持 HKPS(无论如何,它尝试执行,/usr/lib/gnupg/gpgkeys_hkp
但因不支持的协议错误而失败)- 导出密钥并使用
sudo apt-key add
HKPS 和 dirmngr
理想情况下,我们应该使用gpgconf
来设置dirmngr
和的配置选项gpg2
。但是gpgconf
不理解我们使用的 的一个选项--hkp-cacert
。dirmngr
所以我们不妨手动完成所有操作。
首先,让我们创建一个符号链接,/etc/ssl/certs/ca-certificates.crt
因为dirmngr
需要 PEM 扩展:
ln -s /etc/ssl/certs/ca-certificates.crt ~/.ca-certs.pem
编辑~/.gnupg/dirmngr.conf
(如果需要,请创建)并添加以下两个选项:
keyserver hkps://keyserver.ubuntu.com
hkp-cacert ~/.ca-certs.pem
如果有必要的话,终止 dirmngr:
pkill dirmngr
使用 GnuPG2 导入密钥
设置 dirmngr 选项后,这很简单:
$ gpg2 --verbose --recv-keys 0xBA6932366A755776
gpg: no running Dirmngr - starting '/usr/bin/dirmngr'
gpg: waiting for the dirmngr to come up ... (5s)
gpg: connection to the dirmngr established
gpg: data source: https://cassava.canonical.com:443
gpg: armor header: Version: SKS 1.1.6
gpg: armor header: Comment: Hostname: keyserver.ubuntu.com
gpg: pub rsa4096/6A755776 2017-07-29 Launchpad PPA for deadsnakes
gpg: key 6A755776: "Launchpad PPA for deadsnakes" not changed
gpg: Total number processed: 1
gpg: unchanged: 1
耶!
将密钥添加到 apt
另一个简单的步骤:
$ gpg2 --export 0xBA6932366A755776 | sudo apt-key add
OK
或者,我们现在可以从用户密钥环中删除添加的密钥,因为不太可能再次需要它:
$ gpg2 --delete-keys 0xBA6932366A755776
gpg (GnuPG) 2.1.11; Copyright (C) 2016 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
pub rsa4096/6A755776 2017-07-29 Launchpad PPA for deadsnakes
Delete this key from the keyring? (y/N) y
这些步骤并不难实现自动化。
答案2
我建议你使用“gpg --recv-keys”,apt 将确认密钥
apt 如何使用 Release.gpg
安全 apt 在下载 Release 文件时始终会下载 Release.gpg 文件,如果无法下载 Release.gpg,或者签名不正确,它会发出警告,并指出 Release 文件指向的 Packages 文件以及其中列出的所有软件包均来自不受信任的来源。apt-get 更新期间的情况如下:
W:GPG 错误:http://ftp.us.debian.org测试版本:由于公钥不可用,无法验证以下签名:NO_PUBKEY 010908312D230C5F
看http://wiki.debian.org/SecureApt
和http://wiki.debian.org/SecureApt#How_to_tell_if_the_key_is_safe
答案3
是的:Ubuntu 的密钥可以在https://keys.openpgp.org
这是我编写的脚本,用于自动通过 HTTPS 导入密钥。它之所以有效,是因为 openpgp 的 HTTPS 路径是可预测的,并且仅因密钥指纹而异。
为了使脚本适应您自己的目的,只需设置变量PATHSCRIPTS
并将脚本内的 Here-Doc 中的 (3) 个样本键印替换为https://keys.openpgp.org
您希望导入的 Ubuntu 键(或在 上找到的任何键)的键印。
#!/bin/bash
PATHSCRIPTS='/home/REPLACEWITHYOURUSERNAME'
# Create text file using a Here-Doc containing Key Fingerprints of keys to import into keyring:
cat <<EOF> $PATHSCRIPTS/Key-fingerprints-list.txt
AEB042FFD73BAA7545EDA021343A2DF613C5E7F8
7AFAF20259E69236E43EEF521F45D0F6E89F27A6
704FCD2556C40AF8F2FBD8E2E5A1DE67F98FA66F
EOF
# Read the text file we created into an array
readarray arrayKeyFingerprints < $PATHSCRIPTS/Key-fingerprints-list.txt
# Loop through the array adding each key in turn by its fingerprint from keys.openpgp.org:
for i in ${arrayKeyFingerprints[@]}; do
curl https://keys.openpgp.org/vks/v1/by-fingerprint/$i | gpg --import
done
上述脚本的保存和执行结果如下test.sh
所示:
pi@pi4-ap1:~ $ ./test.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3212 100 3212 0 0 7629 0 --:--:-- --:--:-- --:--:-- 7629
gpg: /home/pi/.gnupg/trustdb.gpg: trustdb created
gpg: key 343A2DF613C5E7F8: public key "Terrence Houlahan (I'm the former NYPD cop living in the UK. This is my only *personal* key. Trust no others.) <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3220 100 3220 0 0 18720 0 --:--:-- --:--:-- --:--:-- 18612
gpg: key 1F45D0F6E89F27A6: public key "Terrence Houlahan (Terrence Houlahan Linux & Network Engineer) <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3252 100 3252 0 0 19473 0 --:--:-- --:--:-- --:--:-- 19473
gpg: key E5A1DE67F98FA66F: public key "Terrence Houlahan (Open-IPcamera Project Developer Key Terrence Houlahan) <[email protected]>" imported
gpg: Total number processed: 1
gpg: imported: 1