如果任何人都可以创建和上传密钥,那么Maven的OpenPGP签名有什么意义?

12

Sonatype要求(非SNAPSHOT版本的)构件必须经过GPG签名;公共OpenPGP密钥应上传到(MIT)密钥服务器。

但是任何人都可以创建任何名称和电子邮件的OpenPGP密钥,并将它们上传到密钥服务器。据我所知(或者我错了吗?),目前没有自动机制将特定的软件项目/库与特定的公共密钥关联起来。当然,如果有人想要检查构件的真实性,可以随时向软件作者请求公钥,或者密钥可能已经在某个地方发布(以一种将其与特定软件项目相关联的方式);但由于无法进行自动化处理,因此几乎没有人这样做。

因此,整个OpenPGP签名过程似乎更多地是为了灌输一种虚假的安全感,而不是为普通用户提供实际的安全保障,而且这个过程也相当技术性和耗时。

那么,难道不能有一种自动/简化的方式将软件项目与OpenPGP密钥关联起来,从而使整个过程实际上更加安全吗?


1
签署构件只是第一步。缺少的是Maven依赖项定义还包括有关如何验证依赖项构件的信息。可以使用哈希或预期的OpenPGP密钥来签署构件。请参见https://dev59.com/fHA75IYBdhLWcg3wboUz#34795359和[MNG-6026](https://issues.apache.org/jira/browse/MNG-6026)。 - Flow
1个回答

5
应用OpenPGP签名可以通过信任网络验证作者身份。由于这确实是一种相当复杂的方法,具有相当陡峭的学习曲线,因此默认情况下不强制执行该方法。
Sander Mak在 Maven中关于OpenPGP签名验证的优秀介绍中写道。不幸的是,他没有展示更好的自动验证方法,只能使用商业软件作为Maven Central代理:
自动验证?
现在,你一定在想:“仅仅为了验证一个依赖项就需要做很多工作。” 你是对的。应用通常使用许多依赖项,并且手动检查它们很快变得乏味。在我看来,基于Maven的构建工具支持自动PGP签名验证是一个巨大的机会。不过,在这种情况下,你也可以使用Sonatype的Nexus存储库管理器作为Maven Central的代理。它可以自动检查代理的工件的PGP签名,并在签名检查失败时拒绝提供服务。不幸的是,这只有在使用商业版本Nexus Pro时才可能,而不能使用开源版本。
我最近发现了一个相当新的项目,验证 PGP 签名插件GitHub 上的代码),它是一个 Maven 工件,用于验证其他工件的 OpenPGP 签名,并使您能够将允许签署给定工件的密钥列入白名单。请保留 HTML 标签。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接