进一步阅读

进一步阅读

我发布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-preferencespersonal-cipher-preferencesin$HOME/.gnupg/gpg.conf以从 GPG 偏好中消除 SHA-1。这可以防止新密钥再次出现问题。
  • 调整偏好设置包含在当前存储库签名密钥中也从那里消除 SHA-1。为此,需要:
    • 跑步
      gpg --edit-key "${key_fingerprint}"
      替换适当的密钥指纹,然后使用 和pref命令编辑密钥首选项setpref,然后将密钥保存到密钥环。
    • 将更新密钥的公钥从密钥环导出到文件。
    • 使用修改后的签名密钥重新签署存储库。
    • 发布更新后的签名密钥的公钥文件。

请注意,无需生成新的签名密钥,并且删除 SHA-1 后的更新密钥将继续与旧版 Debian 8 APT 进行互操作。

进一步阅读

答案2

正如 JdeBP 已经指出的那样,从 Debian 9 开始,apt 不再支持 SHA-1,这意味着InRelease需要使用 SHA-256 创建文件(同样适用Release.pg)。

对我来说解决这个问题的方法是将其指定-digest-algo SHA256为 gpg 的参数,因此完整的序列将是:

  1. 创建包:

    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}
    
  2. 签字:

    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,如果您想将.debs 存储在单独的树中。

相关内容