我发布Debian 存储库。它使用 4096 位 GPG 密钥进行签名,并且已经在 Debian 7 和 Debian 8 系统中愉快地使用了一段时间。最近,我的一位用户报告说 Debian 9 有问题。具体来说,apt-get update
产生:
正在阅读包裹清单...完成 W:GPG错误:http://Debian-repository.JdeBP.info。 stable InRelease:以下签名无效:A71733F3CEBD655CB25A0DDCE1E3A497555CE68F W:存储库 'http://Debian-repository.JdeBP.info。 stable InRelease' 未签名。
请注意,与“Repo APT secure - apt-get update GPG 签名无效“ 和 ”对 aptly 和 GPG 的签约感到沮丧“ 我是不是使用aptly
。很明显我没有遭受aptly
任何类型的错误。 (-:
那么问题出在哪里呢?
答案1
问题的原因是 Debian wiki 或其他类似的 doco 没有更新,而且几乎只有几个主要的更新乌班图-非 Debian 上的相关公告个人的WWW 站点显示,从 Debian 9 开始,APT 中已经关闭了对 SHA-1 加密偏好的密钥的支持。(具体来说,在 APT 版本 1.4~beta1 中关闭了,Debian 9 版本为 1.4.7。)
因此,存储库发布者需要做两件事:
- 调整
personal-digest-preferences
和personal-cipher-preferences
in$HOME/.gnupg/gpg.conf
以从 GPG 偏好中消除 SHA-1。这可以防止新密钥再次出现问题。 - 调整偏好设置包含在当前存储库签名密钥中也从那里消除 SHA-1。为此,需要:
- 跑步
gpg --edit-key "${key_fingerprint}"
替换适当的密钥指纹,然后使用 和pref
命令编辑密钥首选项setpref
,然后将密钥保存到密钥环。 - 将更新密钥的公钥从密钥环导出到文件。
- 使用修改后的签名密钥重新签署存储库。
- 发布更新后的签名密钥的公钥文件。
- 跑步
请注意,无需生成新的签名密钥,并且删除 SHA-1 后的更新密钥将继续与旧版 Debian 8 APT 进行互操作。
进一步阅读
- 朱利安·安德烈斯·克洛德 (2016-03-14)。在 APT 中放弃 SHA-1 支持。 jak-linux.org。
- 朱利安·安德烈斯·克洛德 (2016-03-15)。关于 APT + SHA1 的澄清和更新。 jak-linux.org。
答案2
正如 JdeBP 已经指出的那样,从 Debian 9 开始,apt 不再支持 SHA-1,这意味着InRelease
需要使用 SHA-256 创建文件(同样适用Release.pg
)。
对我来说解决这个问题的方法是将其指定-digest-algo SHA256
为 gpg 的参数,因此完整的序列将是:
创建包:
dpkg-deb --build ${PACKAGE_NAME}-1.0/ sudo rm ${SOME_TEMP_PATH}/* mv ${PACKAGE_NAME_name}-1.0.deb ${SOME_TEMP_PATH}/ dpkg-scanpackages ${SOME_TEMP_PATH} /dev/null | gzip -9c > ${SOME_TEMP_PATH}/Packages.gz sudo rm ${PATH_TO_REPO_IN_WWW_SERVER}/* sudo cp ${SOME_TEMP_PATH}/* ${PATH_TO_REPO_IN_WWW_SERVER} cd ${PATH_TO_REPO_IN_WWW_SERVER}
签字:
apt-ftparchive --md5 --sha256 release . > Release gpg --digest-algo SHA256 --armor --output Release.gpg --detach-sign Release gpg --digest-algo SHA256 --clearsign --output InRelease Release
也可以从临时文件夹中完成签名,然后将完整的内容复制到 Web 服务器文件夹,或者您可能想要使用路径,即.
调用时使用的“” apt-ftparchive
,如果您想将.deb
s 存储在单独的树中。