当我安装[email protected]
并[email protected]
在我的 Debian Jessie docker 镜像中使用
apt-get install -y software-properties-common && \
add-apt-repository 'deb http://archive.ubuntu.com/ubuntu trusty universe' && \
apt-get install -y mysql-server-5.6 mysql-client-5.6
我看到以下警告
W:GPG错误:http://archive.ubuntu.com可信版本:由于公钥不可用,无法验证以下签名:NO_PUBKEY 40976EAF437D05B5 NO_PUBKEY 3B4FE6ACC0B21F32
不确定是否手动添加密钥
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 40976EAF437D05B5 && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3B4FE6ACC0B21F32
是一个稳定的解决方案。我在某处读到,当存储库更新时,GPG 密钥可能会更改(如果我错了,请纠正我)。还可以从包存储库 URL 安装 GPG 密钥,如下所示:
curl -sL http://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
所以我有以下子问题:
- 所有需要密钥的软件包存储库是否都有提供公共 GPG 密钥的 URL?
- 这样的 URL 有什么格式吗?
答案1
您正尝试在 debian 上从 ubuntu 存储库安装软件包,但 Debian 没有 ubuntu 密钥。添加新存储库需要受信任的 gpg 密钥,以便对包进行身份验证。
只有第三部分存储库需要新的 gpg 密钥,或者在更换密钥的情况下。
add-apt-repository
将添加一个新的存储库并添加 gpg 密钥。
man add-apt-repository
:
In the second form, ppa:<user>/<ppa-name> will be expanded to the full deb line of the PPA and added into a new file in the /etc/apt/sources.list.d/ directory. The GPG public key of the newly added PPA will also be downloaded and added to apt's keyring.
在 debian jessie 上,您不需要添加 Ubuntu 存储库,它可以通过安全存储库获得。
删除可信存储库,然后将以下行添加到您的/etc/apt/sources.list
:
deb http://security.debian.org/debian-security jessie/updates main
然后运行:
sudo apt update
sudo apt install mysql-server-5.5
答案2
在这种情况下,你确实有一个稳定的答案。它在“官方”文档中引用(https://help.ubuntu.com/community/VerifyIsoHowto#Get_the_key)
在您的情况下,您正在引用(由您)“信任”的密钥服务器 ( keyserver.ubuntu.com
) 并通过特定 ID ( 40976EAF437D05B5
& 3B4FE6ACC0B21F32
) 请求密钥。通过这种方式检索密钥,Ubuntu 基础设施的管理员可以在无需您干预的情况下处理更新。使用密钥 ID 实际上是引用密钥本身的加密哈希。
唯一的可能的我要做的改进是使用“完整”密钥 ID,它允许更精确的检索,并且需要更坚定的攻击者。
应该注意的是,上面文档中命令的 gpg 版本用于将相同的密钥添加到你的 用户密钥环,以便您可以使用密钥进行验证。该apt-key
命令将密钥添加到易于钥匙圈,以便系统可以使用密钥进行验证。
关于子问题:
所有需要密钥的软件包存储库是否都有提供公共 GPG 密钥的 URL?和这样的 URL 有什么格式吗?
不是。并非所有存储库(deb/apt、rpm/yum/dnf)都通过特定的“众所周知”URL 发布其密钥。由于许多密钥检索机制都内置于相应的包管理系统中,因此由该工具决定。需要注意的是,在基于 RPM 的系统中,Yum 和 DNF 在存储库定义中指定了元数据,以便于管理员使用,但这不是使用要求,URI 路径也不是标准化的。
顺便说一句,这样做的过程可能会在未来得到批准,因为RFC 5785和RFC 8615现在是“一件事”,但将是未来的改进。