为什么 Maven Central 需要两者 PGP 签名和 MD5/SHA-1/等。哈希值? PGP 签名还不够吗?
在 Maven 中央存储库上,每个工件都有一个:
.asc
文件 - 包含工件的 PGP 签名。.md5
文件 - 包含工件的 MD5 摘要。.sha1
文件 - 包含工件的 SHA-1 摘要。.sha256
文件 - 包含工件的 SHA-256 摘要。.sha512
文件 - 包含工件的 SHA-512 摘要。.asc.md5
文件。.asc.sha1
文件。.asc.sha256
文件.asc.sha512
文件。例如,您可以查看此出版物:https://repo1.maven.org/maven2/org/gradle/gradlebuild/configuration-cache-report/1.0/
我不太确定
.asc.md5
、.asc.sha1
等文件代表什么。这些摘要是用签名的私钥加密的吗?
我的推理如下:
我了解 MD5、SHA1、SHA256 和 SHA512 摘要的价值。它允许您检查您下载的工件是否未损坏。您可以通过自己计算(下载的工件)摘要并将其与相应的公共摘要进行比较来完成此操作。
我也很欣赏这并不能保证文物的真实性。因为“中间人”可能会为您提供恶意工件和相应的虚假
.md5
、.sha1
、.sha256
和 .sha512
文件。我还了解到,使用 https
连接到 Maven Central 并不能解决这个问题。 (例如,可以通过机器上安装了自定义证书的代理访问该网站,有人可能在未经开发人员许可的情况下上传了恶意工件等)
我的理解是PGP签名通过以下机制解决了上述问题
神器的创造者
PGP(原始工件,私钥)=
.asc
文件.asc
文件是签名。这基本上是工件的摘要,然后使用私钥进行加密,并添加一些元信息,即哈希算法。
Maven客户端
PGP(下载的工件,公钥,.asc
文件)
.asc
文件)。
,那么我们就验证了工件的真实性,但是我们也验证了它没有被损坏。不然摘要会不一样,对吗?
.md5
和
.sha1
文件?作为奖励问题。为什么公钥不需要也存储在 Maven 上?这不是让事情变得更清楚了吗?就目前情况而言,您没有验证真实性所需的所有文件/数据。您必须从 PGP 服务器获取公钥。
所以,总而言之,我有以下3个问题:为什么 Maven Central 需要工件的 PGP 签名和 md5/sha1 哈希值?为什么 PGP 签名不够?
.asc.md5
.asc.sha1
等文件代表什么?为什么公钥不与其他所有内容一起存储?为了提高中央存储库的质量,我们要求您为所有工件(所有文件
除了校验和都必须)提供 PGP 签名。
据我了解,任何工件(例如 JAR、ZIP、TAR 等)
进行签名。 md5 或 sha1 等校验和不需要签名。 (2) 它们是签名的校验和。特别是对于 Gradle,
Signing 插件 对 all 输出进行签名。例如,MavenPublication
通常输出 POM 和 JAR 工件。当指示签名插件对发布进行签名时,它会生成校验和文件并为每个工件签名。 请注意,您可以禁用某些校验和:https://docs.gradle.org/6.0.1/release-notes.html#publication-of-sha256-and-sha512-checksums
(3) 将公钥发布到 Maven 存储库是不常见的。虽然我不相信有什么能阻止你。尽管由于它会被视为任何工件,所以您需要对其进行签名...这没有意义。