如何让 gpg 生成 GPG 密钥公共环而不是密钥箱?

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

我正在尝试获取公钥并将其添加到

/etc/apt/trusted.gpg.d/
,但我遇到了不兼容问题。

我跑步:

gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/example.gpg --import file.asc

这有效。

但是当我使用

apt-key list
时,它说密钥不兼容。

查看文件类型,我的

example.gpg
属于
GPG keybox database version 1
类型,而其他 apt 键属于
GPG key public ring
类型。

如何让

gpg
生成
GPG key public ring
而不是
keybox

gnupg apt
2个回答
10
投票

我最近也偶然发现了这个问题,在深入研究源代码后,我找到了几乎完美的解决方案。

您可以仅使用前缀指定密钥环格式,例如

gnupg-ring:
gnupg-kbx:
。在你的情况下,命令是:

gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/example.gpg --import file.asc

要使此方法起作用,请禁用 keyboxd 守护进程(自 GnuPG 2.4.1 起在新的 GnuPG 主目录上默认启用);否则,所有公钥都会无条件存储在一个 SQLite 数据库 (

~/.gnupg/public-keys.d/pubring.db
) 中,并且
--no-default-keyring
--keyring
参数将被默默忽略:

comment-out `use_keyboxd` in `~/.gnupg/common.conf` if file exists

7
投票

我知道这已经很旧了,但是由于我花了一些时间寻找解决方案,所以我将分享它。

在自动化方面,GnuPG 一直是一个难题,而且似乎没有办法让它使用旧的密钥环 v4 格式。 但是,可以通过重新导出密钥来完成。这里是一个丑陋的单行,以 MariaDB 存储库为例:

# cd /etc/apt/trusted.gpg.d/ && wget -q -O - https://mariadb.org/mariadb_release_signing_key.asc | \
  gpg --no-default-keyring --keyring=$(pwd)/mariadb.gpg --batch --import - && \
  gpg --no-default-keyring --keyring=$(pwd)/mariadb.gpg --batch --output $(pwd)/mariadb.gpg~ --export --yes && \
  mv $(pwd)/mariadb.gpg~ $(pwd)/mariadb.gpg; chmod 644 $(pwd)/mariadb.gpg

使用

apt-key
及其
--keyring
选项可以更轻松地完成此操作(在 Debian Buster 10.7 上测试)。

$ wget -q -O - https://mariadb.org/mariadb_release_signing_key.asc | \
  sudo apt-key --keyring /etc/apt/trusted.gpg.d/mariadb.gpg add -

如果您查看

apt-key
脚本,您会发现类似于上面一行的内容(但可能更强大)。 请注意,如果您对受信任文件使用后缀
apt-key
而不是
.asc
,则
.gpg
将会抱怨并失败。这似乎是一个错误,可以通过文件上的先前
touch
来避免。

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