Maven验证下载的pom / jar文件的签名

时间:2011-07-03 19:33:14

标签: maven ssl signature

我试图找到是否有启用SSL的中央存储库,但可能没有。我注意到maven中央存储库中的每个jar和pom文件都有签名。所以至少我想查看所有maven下载文件(pom / jar)的签名。

来自http://repo1.maven.org/maven2/org/apache/ant/ant/1.8.2/的示例:

ant-1.8.2.jar
ant-1.8.2.jar.asc
ant-1.8.2.jar.asc.md5
ant-1.8.2.jar.asc.sha1
ant-1.8.2.jar.md5
ant-1.8.2.jar.sha1
ant-1.8.2.pom
ant-1.8.2.pom.asc
ant-1.8.2.pom.asc.md5
ant-1.8.2.pom.asc.sha1
ant-1.8.2.pom.md5
ant-1.8.2.pom.sha1

我意识到我必须为每个存储库导入公钥,我很好。我猜maven central的公钥是https://svn.apache.org/repos/asf/maven/project/KEYS

网上有很多关于如何使用maven签名的教程。但是我没有找到任何关于如何强制maven(2或3)来验证下载的jar / pom文件的签名的信息。有可能吗?

(Nexus Professional不可选)

感谢您的帮助。

4 个答案:

答案 0 :(得分:7)

现在,人们似乎意识到这是一个真正的安全问题(如this blog-post中所描述的(博客似乎已经失效,这里是博客的archived version),有一个{{ 3}}。您可以使用以下命令验证项目的所有依赖项的签名:

mvn com.github.s4u.plugins:pgpverify-maven-plugin:check

当然,要100%确定插件本身并不是恶意的,您必须从maven中心下载并验证plugin for verifying PGP signatures,使用maven构建它,然后执行它。 (这也应该通过递归方式完成构建所需的所有依赖项和插件。)

或者您使用Maven 3.2.3或更高版本(带有干净的存储库),它使用TLS下载所有文物。因此,中间人攻击是不可能的,你至少得到了人工制品,因为它们位于maven中心。

另见:

答案 1 :(得分:1)

假设您只想下载具有有效校验和的工件,一个选项是运行Nexus的OSS版本并将其配置为具有中心代理。然后将settings.xml配置为仅从repo加载(settings.xml中的镜像标记)。然后,您可以将nexus配置为仅允许具有有效校验和的工件。

答案 2 :(得分:1)

现在,可以使用对中心的SSL访问进行代币付款。来自https://blog.sonatype.com/people/2012/10/now-available-ssl-connectivity-to-central/

  

我们正在向任何下载开源组件的人提供与Central的SSL连接,无论存储库管理器如何。

     

...

     

为了确保依靠SSL的用户获得最高级别的性能,我们使用令牌保护服务。您只需提供10美元捐款即可为您的组织获取代币,该捐赠将捐赠给开源原因。

答案 3 :(得分:0)

你能用GnuPG编写一个bash shell脚本来验证每个sig吗?

像: for x in *.jar; do gpg --verify "${x}".asc; done

显然在开始之前你需要所有sig的公钥。