Apt 在 Ubuntu 18.04 上拒绝`/etc/apt/trusted.gpg.d` 中的密钥环

Ste*_*fan 5 ubuntu apt gnupg ubuntu-18.04

我在使用 apt 的 Ubuntu 18.04(仿生海狸)以及它处理可信密钥以验证存储库的方式上遇到了问题。

在 Ubuntu 14.04 上,我们曾经安装用于将我们的软件版本的存储库签名为/etc/apt/trusted.gpg.d. 通过这个 apt 知道密钥是可信的。

但是,这在 Ubuntu 18.04 上似乎不再适用。如果我在那里做同样的事情,我会在更新过程中收到错误:

# apt-get update
Hit:1 http://company.com/ubuntu-snapshot bionic InRelease                     
Reading package lists... Done                                                     
W: http://company.com/ubuntu-snapshot/dists/bionic/InRelease: The key(s) in the keyring /etc/apt/trusted.gpg.d/company-keys.gpg are ignored as the file is not readable by user '_apt' executing apt-key.
Run Code Online (Sandbox Code Playgroud)

明显的尝试修复它

# sudo chown -v _apt /etc/apt/trusted.gpg.d/company-keys.gpg
changed ownership of '/etc/apt/trusted.gpg.d/company-keys.gpg' from root to _apt
Run Code Online (Sandbox Code Playgroud)

不起作用,因为apt-get update然后产生:

# apt-get update
Hit:1 http://company.com/ubuntu-snapshot bionic     InRelease                    
Reading package lists... Done                                                     
W: http://company.com/ubuntu-snapshot/dists/bionic/InRelease: The key(s) in the keyring /etc/apt/trusted.gpg.d/company-keys.gpg are ignored as the file has an unsupported filetype.
Run Code Online (Sandbox Code Playgroud)

密钥本身是有效的,如果我使用以下行添加它,一切都会按预期进行:

 wget -O - http://company.com/key.gpg | sudo apt-key add -
Run Code Online (Sandbox Code Playgroud)

不幸的是,后者不是我们的选择,因为我们想要部署我们自己的密钥并且还能够更改/撤销它们。

我既无法弄清楚为什么 apt 拒绝 中的密钥环/etc/apt/trusted.gpg.d,也找不到描述 apt 对新 Ubuntu 版本的不同期望的更改日志。如果您指出一些资源来解决这个问题,我会很高兴。

Mar*_*ner 6

听起来您的密钥文件 ( /etc/apt/trusted.gpg.d/company-keys.gpg) 的格式不受支持。手册apt-key页解释了支持的内容:

apt-key 仅支持扩展名为“gpg”的文件中的二进制 OpenPGP 格式(也称为“GPG 密钥公共环”),而不支持较新的 gpg(1) 版本中引入的作为密钥环文件默认值的密钥箱数据库格式。因此,要与任何 apt 版本一起使用的二进制密钥环文件应始终使用 gpg --export 创建。

或者,如果所有应使用创建的密钥环的系统至少安装了 apt 版本 >= 1.4,则您可以使用带有“asc”扩展名的 ASCII 装甲格式,而不是使用 gpg --armor --export 创建。

要检查文件格式,请运行file /etc/apt/trusted.gpg.d/company-keys.gpg如果它显示“GPG 密钥公共环”,那么我希望它能够工作,但我无法解释您所看到的问题。

如果显示“GPG 密钥箱数据库”,则问题出在文件格式上。您可以使用此命令对其进行转换(感谢@Wildcard 将其包含在他的答案中):

gpg --no-default-keyring --keyring /etc/apt/trusted.gpg.d/company-keys.gpg --export > /etc/apt/trusted.gpg.d/company-keys.fixed.gpg
Run Code Online (Sandbox Code Playgroud)

如果您反复看到此问题,那么您可能需要检查如何将密钥安装到/etc/apt/trusted.gpg.d/. 我遇到了一个问题,尝试通过运行列出密钥环的内容gpg --keyring /etc/apt/trusted.gpg.d/mine.gpg会导致文件被创建为不受支持的密钥箱文件。随后将密钥添加到该密钥环不允许使用该密钥。

还值得注意的是,显然没有理由使用apt-key add. 从手册页:

应将密钥环直接放置在 /etc/apt/trusted.gpg.d/ 目录中,并使用描述性名称和“gpg”或“asc”作为文件扩展名,而不是使用此命令。

因此,如果您正在使用,apt-key add可以考虑直接复制文件。


Flo*_*low 6

您可以使用 gpg 的--dearmor选项将 ASCII 装甲密钥(被aptin拒绝的密钥)转换trusted.gpg.d为二进制格式,这正是所apt期望的。

gpg --dearmor keyfile
Run Code Online (Sandbox Code Playgroud)