Ubuntu弃用apt-key

弃用原因

apt-key 命令被弃用是因为它存在安全问题。这个命令使用了非对称加密算法(公钥加密),它通过在本地计算机上生成一对公钥和私钥,然后将公钥上传到软件源服务器上,以确保软件包的完整性和认证性。然而,这种方法存在一个潜在的风险:如果攻击者能够通过某种方式篡改了软件源服务器上的公钥,那么他们就可以轻松地欺骗本地计算机,让其相信软件包是合法和完整的,即使它们被篡改或植入了恶意软件。

为了解决这个问题,Ubuntu 现在更推荐使用 gpg 命令。gpg 命令使用数字签名来保证软件包的完整性和认证性。与 apt-key 不同,gpg 不使用服务器上的公钥,而是使用软件包本身的数字签名。这样,即使攻击者篡改了服务器上的公钥,也无法通过数字签名验证软件包的完整性和认证性。

因此,使用 gpg 命令代替 apt-key 命令可以提高软件包的安全性。

来自ChatGPT的回答

Ubuntu 22.04在进行apt update 时报错:The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32

这个错误是由于系统中缺少对应的公钥,可以通过以下步骤来解决:

  1. 打开终端,输入以下命令,将缺少的公钥添加到系统中:

    sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
  2. 然后再次运行 sudo apt update 命令,应该不会再出现该错误。

这个命令会从 Ubuntu 的公钥服务器下载缺少的公钥并添加到系统中。如果你的网络环境有限制,你也可以使用其他的公钥服务器,比如 hkp://keyserver.ubuntu.com:80

可是apt-key已经弃用,有什么其他的办法吗

是的,你说得对。自Ubuntu 21.10起,apt-key 已经被弃用了,使用 gpg 命令代替。因此,你需要使用以下命令将缺失的公钥添加到系统中:

sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
sudo gpg --export --armor 40976EAF437D05B5 3B4FE6ACC0B21F32 | sudo apt-key add -

这里,第一个命令从 Ubuntu 公钥服务器接收并导入指定的公钥,第二个命令将导入的公钥导出为 ASCII 编码格式,然后使用 apt-key add 命令将其添加到系统中。执行以上两个命令后,你就可以再次运行 sudo apt update 命令了。

既然已经弃用了,为什么你还要再指令中写sudo apt-key add -这一句呢

好问题!对于新的 Ubuntu 发行版,确实不需要使用 apt-key 命令,因为该命令已经被弃用了。然而,一些旧的教程和文档可能仍然使用该命令,所以我在之前的回答中提到了它。

在新的 Ubuntu 发行版中,使用 gpg 命令代替 apt-key,你可以使用以下命令将公钥添加到系统中:

sudo gpg --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 3B4FE6ACC0B21F32
sudo gpg --export --armor 40976EAF437D05B5 3B4FE6ACC0B21F32 | sudo tee /etc/apt/trusted.gpg.d/my-apt-keys.gpg > /dev/null

上面的命令中,第一行从 Ubuntu 公钥服务器中接收并导入指定的公钥,第二行将导入的公钥导出为 ASCII 编码格式,并将其写入到一个名为 my-apt-keys.gpg 的文件中,该文件保存在 /etc/apt/trusted.gpg.d/ 目录下。这个文件夹是用于存储被信任的 GPG 公钥的。这个命令会在这个目录下创建一个新的 GPG 公钥文件。

总之,尽管 apt-key 命令已经被弃用了,但在某些情况下,你可能仍然需要在系统中添加公钥。在这种情况下,你可以使用 gpg 命令,将公钥导入并添加到 /etc/apt/trusted.gpg.d/ 目录中。

我刚刚使用了你第二个回答的解决方案,它在apt update时报:Key is stored in legacy trusted.gpg keyring (/etc/apt/trusted.gpg), see the DEPRECATION section in apt-key(8) for details.

这个警告信息是因为你将公钥添加到了 /etc/apt/trusted.gpg.d/ 目录,但是 apt 命令仍然在使用旧的 /etc/apt/trusted.gpg 文件,这个文件是 apt-key 命令生成的。因此,apt 命令警告你公钥已存储在旧的 GPG 文件中。

为了解决这个问题,你可以将公钥导出到一个单独的文件中,并将该文件添加到 /etc/apt/trusted.gpg.d/ 目录。例如,你可以运行以下命令:

sudo gpg --output /etc/apt/trusted.gpg.d/my-apt-keys.gpg --export 40976EAF437D05B5 3B4FE6ACC0B21F32

上面的命令将公钥导出到一个名为 my-apt-keys.gpg 的文件中,并将该文件添加到 /etc/apt/trusted.gpg.d/ 目录。这样,apt 命令就可以找到并使用新的 GPG 公钥文件了。

另外,如果你想更彻底地移除 apt-key 生成的旧的 GPG 公钥文件,你可以运行以下命令:

sudo rm /etc/apt/trusted.gpg

这个命令会删除旧的 GPG 公钥文件,确保 apt 命令只使用 /etc/apt/trusted.gpg.d/ 目录中的新 GPG 公钥文件。

The key(s) in the keyring /etc/apt/trusted.gpg.d/ustc-apt-keys.gpg are ignored as the file has an unsupported filetype.

这个警告信息表明 /etc/apt/trusted.gpg.d/ustc-apt-keys.gpg 文件的文件类型不受支持,因此其中的 GPG 公钥被忽略了。

这通常是由于文件的格式不正确所导致的。可能是你的 apt-key add 命令没有正确导入公钥。你可以尝试使用以下命令重新导入公钥:

sudo apt-key --keyring /etc/apt/trusted.gpg.d/ustc-apt-keys.gpg add <path/to/your/keyfile>

确保将 <path/to/your/keyfile> 替换为包含你的 GPG 公钥的文件的路径。

如果你不知道公钥文件的路径,可以尝试在终端中输入以下命令查找:

find / -name "ustc-apt-keys.gpg"

这会在整个文件系统中搜索包含 ustc-apt-keys.gpg 文件名的文件,并显示文件的路径。然后,你可以将路径替换为上述命令中的 <path/to/your/keyfile>

如果重新导入公钥后仍然遇到相同的问题,请确保你的公钥文件是正确的格式,它应该是一个文本文件,其中包含 ASCII 编码的 GPG 公钥。如果你不确定文件是否正确,请打开文件并检查它的内容是否与你期望的 GPG 公钥相匹配。

请用最新的方案解决刚刚的问题,不要使用已弃用的指令apt-key

当你向系统添加一个新的 GPG 公钥时,你可以使用 gpg 命令来完成这项任务。以下是如何使用 gpg 命令来添加 GPG 公钥的步骤:

  1. 首先,你需要从软件提供方获取其 GPG 公钥。通常,软件提供方会在其网站上提供一个 ASCII 码格式的 GPG 公钥,你可以将其保存到一个文本文件中。假设你已经从软件提供方获取了一个名为 key.asc 的 GPG 公钥文件。

  2. 接下来,你需要将 GPG 公钥导入到你的 GPG 密钥环中。运行以下命令:

    sudo gpg --import key.asc

    这会将 key.asc 文件中的公钥添加到你的 GPG 密钥环中。

  3. 现在,你需要找到新添加的 GPG 公钥的 Key ID。运行以下命令:

    gpg --list-keys

    这会列出你的 GPG 密钥环中的所有密钥。在输出中,找到刚刚导入的公钥的 Key ID。Key ID 是一个 8 位十六进制数字。

  4. 最后,你需要将公钥的 Key ID 添加到 /etc/apt/trusted.gpg.d/ 目录中的一个文件中,以便 apt 命令可以使用该公钥。运行以下命令:

    sudo gpg --export <key-id> | sudo tee /etc/apt/trusted.gpg.d/my-apt-keys.gpg

    这会将公钥导出到一个名为 my-apt-keys.gpg 的文件中,并将该文件添加到 /etc/apt/trusted.gpg.d/ 目录。确保将 <key-id> 替换为你在步骤 3 中找到的公钥的 Key ID。

现在,你应该能够使用 apt update 命令更新你的软件包列表,而不会收到公钥验证错误的消息。


Ubuntu弃用apt-key
https://blog.cikaros.top/doc/2964f075.html
作者
Cikaros
发布于
2023年3月12日
许可协议