我没有签署我的 RPM,但无论如何他们都有签名。 “标头 V4 RSA/SHA1 签名:错误”
Posted
技术标签:
【中文标题】我没有签署我的 RPM,但无论如何他们都有签名。 “标头 V4 RSA/SHA1 签名:错误”【英文标题】:I'm not signing my RPMs, but they have signatures anyway. "Header V4 RSA/SHA1 signature: BAD" 【发布时间】:2015-09-17 22:45:08 【问题描述】:我正在我的 Mac 上构建一个 RPM using sbt-native-packager,它无法安装在 RHEL 5 机器上,因为它具有 V4 签名。 rpm -v --checksig
在我的 Mac 上的结果:
Header V4 RSA/SHA1 signature: OK, key ID f769fd38
Header SHA1 digest: OK (2ee9b411052b2aeadcb0efa5401f246af8ca6e68)
MD5 digest: OK (b78e1256caba2959428b1e5544d562a6)
以及rpm -v --checksig
在 RHEL 5 机器上的结果:
Header V4 RSA/SHA1 signature: BAD, key ID f769fd38
Header SHA1 digest: OK (2ee9b411052b2aeadcb0efa5401f246af8ca6e68)
MD5 digest: OK (b78e1256caba2959428b1e5544d562a6)
我看到this answer 暗示它与 GPG 签名有关,但这并没有加起来。
sbt-native-packager RPM 插件不会根据其开发人员进行签名,这可以通过它发出的 rpmbuild
命令来证明:
rpmbuild -bb --target noarch-PayPal-Linux --buildroot /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot --define _topdir /Users/2rs2ts/src/my-app/my-app/target/rpm --define _tmppath /var/folders/gp/l9gt6r791p1bdcgtf2b2dppw392tbp/T/sbt_8f0f0597 myapp.spec
另外,我的 Mac 上没有安装 gpg
,因此链接答案中的修复似乎并不真正适用于我。我意识到rpm
通常带有gpg
的安装,所以也许它正在使用它来制作签名,但我不知道它正在使用什么密钥或如何使它强制 V3 签名或完全停止签名。我不确定最后一句话是否明智,因为我与rpm
合作的经验非常有限。
尽管如此,我确实尝试至少按照该指南的建议修改~/.rpmmacros
,但无济于事。我没有线索。如果我没有签名,为什么我的 RPM 会有签名,如何防止这些签名成为 V4?
编辑每个请求,这里是 sbt 的输出(我相信“错误”行只是一个实现怪癖而不是实际错误):
[debug] Executing rpmbuild with: rpmbuild -bb --target noarch-PayPal-Linux --buildroot /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot --define _topdir /Users/2rs2ts/src/my-app/my-app/target/rpm --define _tmppath /var/folders/gp/l9gt6r791p1bdcgtf2b2dppw392tbp/T/sbt_8f0f0597 myapp.spec
[info] Building target platforms: noarch-PayPal-Linux
[info] Executing(%install): /bin/sh -e /var/folders/gp/l9gt6r791p1bdcgtf2b2dppw392tbp/T/sbt_8f0f0597/rpm-tmp.67386
[error] + umask 022
[error] + cd /Users/2rs2ts/src/my-app/my-app/target/rpm/BUILD
[error] + /bin/rm -rf /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot
[error] + /bin/mkdir -p /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot
[error] + '[' -e /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot ']'
[error] + mv /Users/2rs2ts/src/my-app/my-app/target/rpm/tmp-buildroot/etc /Users/2rs2ts/src/my-app/my-app/target/rpm/tmp-buildroot/var /Users/2rs2ts/src/my-app/my-app/target/rpm/tmp-buildroot/x /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot
[error] + exit 0
[info] Processing files: myapp-VersionNotSet-ReleaseNotSet.noarch
[info] Provides: config(myapp) = 0:VersionNotSet-ReleaseNotSet
[info] Requires(interp): /bin/sh /bin/sh /bin/sh /bin/sh
[info] Requires(pre): /bin/sh
[info] Requires(post): /bin/sh
[info] Requires(preun): /bin/sh
[info] Requires(postun): /bin/sh
[info] Checking for unpackaged file(s): /usr/local/Cellar/rpm/5.4.15/lib/rpm/check-files /Users/2rs2ts/src/my-app/my-app/target/rpm/buildroot
[info] Wrote: /Users/2rs2ts/src/my-app/my-app/target/rpm/RPMS/noarch/myapp-VersionNotSet-ReleaseNotSet.noarch.rpm
【问题讨论】:
该 rpm 实际上并没有在标头中签名任何内容。这些行都是无符号数据。签名行看起来像V4 RSA/SHA1 signature: XXX, key ID xxxxxxx
或 V3 DSA signature: NOKEY, key ID xxxxx
或类似的。所以我对那里实际做了什么感到有点困惑。您能否从构建过程中获得完整的输出,以及它在构建后如何处理 rpm?在构建和您正在查看它的位置之间是否有其他任何涉及 rpm 的内容?
@EtanReisner 我只能向您展示 sbt 日志(其中包含所有调试信息,并且我已将其添加到我的问题中。)您是否正在寻找特别的东西?我可以尝试在源代码中找到有关它的内容。不幸的是,我对这个插件的架构比对 rpms 了解更多;)
我不知道这是否会告诉我们任何事情,但您可以在有问题的 rpm 上运行 this python script 并将输出粘贴在要点的评论中或将其粘贴到其他地方吗? (我想说把它放在问题中,但我不知道它最终会对问题产生影响。)
@EtanReisner 我很想,但是我在哪里可以获得rpm
模块?在 PyPI 上找不到。
你已经拥有了。它随 CentOS/etc 一起提供。只需运行脚本,它应该可以工作。
【参考方案1】:
我可以大胆猜测:问题是 RSA 在 RHEL5 rpm 中以多种方式被破坏。最简单的解决方法是尝试使用 DSA 而不是 RSA 进行签名。
DSA 在 MAC 和 RHEL5 上都“工作”吗?
【讨论】:
我在工作时在 CentOS 5 上使用 RSA 签名,它们似乎工作得很好(假设您避免使用子密钥等)。还有其他问题吗?顺便说一句,您是否知道 OP 可能有一个带有标头签名但没有有效负载/数据签名的 rpm(假设我已经正确解释了该输出)? 我听说这个问题与 2048 位密钥有关,但我对这个问题并不精通,这正是我看到其他关于坏标题的问题所讨论的......但是那是明确签署 RPM 的时候。 V4 RSA 指纹是 pubkey 参数的散列,rpm 甚至没有接近正确(V3 RSA 指纹不同)。另一个问题是位计数与字节计数:对于始终设置 msbit 的 DSA,这些是相同的,但对于 RSA 则不同,RSA 有 256 分之一的机会,签名的 msbyte 的所有 8 位都为零(并且 rpm 长度错误)。 您可以使用 ~/.gnupg/gpg.conf 为 RSA 强制使用 V3 签名(并且 --force-v3-sigs 可能等效)。与此同时,V3 -> V4 签名格式的变化在整个世纪都在进行。在 RHEL5 rpm 中修复 RSA 指纹也不是不可能的:只是 RHAT 永远不会发布修复程序。因此,使用 DSA 是您最不痛苦的解决方案。 具体答案:NOKEY 只是意味着您应该使用 rpm --import 来导入 pubkey。执行“rpm -q gpg-pubkey | grep 98d3b138”以验证 pubkey 是否已导入。以上是关于我没有签署我的 RPM,但无论如何他们都有签名。 “标头 V4 RSA/SHA1 签名:错误”的主要内容,如果未能解决你的问题,请参考以下文章