25
10月
2023
执行 apt-get update 时,如何消除“W: 密钥存储在旧版 trusted.gpg 密钥环中”的警告?
16:15

执行 apt-get update 时,如何消除“W: 密钥存储在旧版 trusted.gpg 密钥环中”的警告?

25 10月 2023 16:15

如果第三方存储库连接到 Linux 操作系统,则在更新软件包时,您可能会收到错误消息“密钥存储在旧版 trust.gpg 密钥环中”。

此警告的原因

在 Ubuntu 和 Linux Mint 的几个最新版本中,将存储库密钥添加到单个存储库的 apt-key 程序的使用已被放弃。这是过时的(legacy),虽然它没有失去兼容性,但不建议使用它。而不是“旧”密钥库 /etc/apt/trusted.gpg, следует использовать новые хранилища ключей GPG для каждого из репозиториев, в папке: /etc/apt/trusted.gpg.d

解决问题

  1. 我们知道存储库的名称(写在 apt-get update 时的错误消息中)。 在本例中是 dl.winehq.org

  2. 使用 sudo apt-key list 命令,我们找到存储库签名的十六进制代码

    sudo apt-key list

你必须用你的眼睛通过名字来搜索。 以下几行是可见的:
<代码>------------------------------------------------
发布 rsa3072 2018-12-10 [SC]
D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F
uid [未知] WineHQ 包 wine-devel@winehq.org

  1. 我找到了签名代码 - 完整 GPG 密钥代码的最后 8 个字符。

从代码 D43F 6401 4536 9C51 D786 DDEA 76F1 A20F F987 672F 中,我取出最后 8 个字符并删除空格。
结果是F987672F。

  1. 我使用一行命令将新存储库导入 GPG 文件:

    sudo apt-key export F987672F | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/wine-hq.gpg

我仅使用 apt-key 导出带有指纹 F987672F 的密钥

对于其他程序,必须相应地更正示例命令。 您只需替换导出密钥代码和目标文件名即可。

例如,对于 Yandex 浏览器,签名将存储在 /etc/apt/trusted.gpg.d/ 文件夹中的 yandex-browser.gpg 文件中:

sudo apt-key 导出 083A7A9A | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/yandex-browser.gpg

如何避免添加第三方仓库时再次出现错误

应避免使用该命令 sudo apt-key,例如:
sudo apt-key import файл_ключа.key
wget -qO- <URL> | sudo apt-key add -
*curl -sS <URL>.gpg | sudo apt-key add -

*sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 00000000

正如 man 中所述,adv 键已被弃用。
团队 sudo apt-key add 过时的。

使用 WineHQ 存储库示例添加存储库密钥的正确(新)方法:

如果密钥在服务器上:

wget  -qO- https://dl.winehq.org/wine-builds/winehq.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/winehq.gpg  > /dev/null

如果 公钥 位于服务器上的加密密钥数据库中 密钥服务器.ubuntu.com:

第一队 将密钥导入本地数据库:

gpg --keyserver keyserver.ubuntu.com --recv E084DAB9

第二队 导出密钥并将其添加到私有 some.gpg 存储中:

gpg --export E084DAB9  | sudo tee /etc/apt/trusted.gpg.d/some.gpg  > /dev/null

其中 E084DAB9 是公钥指纹,some.gpg 是用户生成的 GPG 密钥库文件名。

检查 gpg 是否生成了正确的文件:

file /etc/apt/trusted.gpg.d/some.gpg

输出应显示我们有一个 OpenPGP 二进制证书格式的文件:

/etc/apt/trusted.gpg.d/some.gpg:OpenPGP 公钥版本 4,于 2018 年 12 月 10 日星期一 16:56:24 创建,RSA(加密或签名,3072 位);用户身份;签名; OpenPGP 证书



导入密钥后,可以照常运行命令 apt-add-repository 并安装程序,例如:
sudo apt-add-repository 'https://dl.winehq.org/wine-builds/ubuntu/ main'
sudo apt update
sudo apt install wine

解决问题2的正确方法(摘自OpenVPN安装说明)

从网站下载 repo-public.gpg 密钥并将其添加到密钥环 /usr/share/keyrings/openvpn-public.gpg

curl -fsSL https://swupdate.openvpn.net/repos/repo-public.gpg | sudo gpg --dearmor -o /usr/share/keyrings/openvpn-public.gpg

在该方法中,使用curl代替wget,使用-o参数代替tee,使用/usr/share/keyrings/代替/etc/apt/trusted.gpg.d/文件夹。

在第三方软件存储库 Ubuntu Linux 22“Jammy”的数据源描述文件中,我们指出了用于签署存储库的导入的 GPG 密钥

sudo echo "deb [arch=amd64 signed-by=/usr/share/keyrings/openvpn-public.gpg] https://build.openvpn.net/debian/openvpn/stable jammy main" > /etc/apt/sources.list.d/openvpn-repo.list

在sources.list.d 的文件中添加了对密钥的提及 [arch=amd64 signed-by=/usr/share/keyrings/openvpn-public.gpg] 来自 gpg 钥匙串。

哪个文件夹最适合存储 gpg 密钥?

(2023 年 11 月 24 日的附录)

存储密钥的正确位置在哪里 - /etc/apt/trusted.gpg.d/ 文件夹中还是 /usr/share/keyrings 中?

man resources.list 指令这样回答这个问题:

“对于程序包管理的密钥环,建议存储密钥的位置为 /usr/share/keyrings;对于系统管理员管理的密钥环,建议存储密钥的位置为 /etc/apt/keyrings。如果未指定密钥环文件,则默认为 Trusted.gpg 密钥环以及 Trusted.gpg.d/ 目录中的所有密钥环 (...)”

因此,没有关于如何正确存储 gpg 密钥的直接指导。 存储库的逻辑键 适合 放在文件夹中 /etc/apt/trusted.gpg.d/, тогда как наборы ключей для других целей можно помещать в /usr/share/keyrings. Если стоит цель - сохранить ключи при переустановке системы, то следует использовать папку ~/.local/share/keyrings,其中可以存储用户的私钥。


资料来源:



相关出版物