maven default http blocker问题

maven default http blocker问题

最近在maven打包的时候遇到一个问题:

1
Could not transfer artifact io.airlift:airbase:pom:128 from/to maven-default-http-blocker 

使用的maven版本是 3.8.4. 原因是maven自3.8.1升级后需要https协议的仓库地址。

我们从 Jonathan Leitchuh 收到了一份关于依赖 POM 中自定义存储库漏洞的报告。我们将其分为三个独立的问题:

由于使用 HTTP 的自定义存储库可能导致中间人攻击现在越来越多的存储库使用 HTTPS,但情况并非总是如此。这意味着 Maven Central 包含带有自定义存储库的 POM,这些存储库通过 HTTP 引用 URL。这使得通过此类存储库下载的内容成为 MITM 攻击的目标。同时,开发人员可能没有意识到某些下载使用了不安全的 URL。由于上传到 Maven Central 的 POM 是不可变的,因此需要对 Maven 进行更改。为了解决这个问题,我们使用参数扩展了镜像配置,并添加了一个新的external:http:镜像选择器(如 existing external:),意思是“使用 HTTP 的任何外部 URL”。决定默认阻止此类外部 HTTP 存储库:这是通过在conf/settings.xml阻止不安全 HTTP 外部 URL 中提供镜像来完成的。

由于使用废弃域的自定义存储库可能导致域劫持,Sonatype 分析了哪些域已被废弃并已声明这些域。

通过重定向到自定义存储库可能劫持下载。这是最难分析和解释的。简短的故事是:您很安全,依赖项仅从其上下文中的存储库下载。所以有两个主要问题:上下文是什么,顺序是什么?该订单在Repository Order 中描述页。第一组存储库在 settings.xml 中定义(用户和全局)。第二组存储库基于继承,最终超级 POM 包含指向 Maven Central 的 URL。第三组是最复杂的一组,但对于理解术语上下文很重要:从依赖路径到工件的有效 POM 的存储库。因此,如果一个依赖项是由另一个依赖项或 Maven 项目定义的,它也将包含它们的存储库。归根结底,这不是错误,而是设计功能。

原文见 Release Notes – Maven 3.8.1

有两种解决方案:

  1. 修改maven远程仓库地址为支持https的地址。比如:添加ali的maven仓库地址。
  2. 替换为3.8.1之前的maven版本。