如何告诉Maven忽视SSL错误(并信任所有证书)?

Nov*_*ser 93 ssl-certificate maven

我经常需要运行"mvn"命令:

mvn -f pom.xml clean install -Dmaven.test.skip=false --settings /Users/myhome/settings.xml -X -Djavax.net.ssl.trustStore=/Users/myhome/truststore.jks -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=dummy -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -U
Run Code Online (Sandbox Code Playgroud)

由于我需要与其他各种域集成,因此每次我必须将其证书添加到truststore.jks以防止SSL握手错误.

有什么办法可以配置mvn来忽略SSL错误.

rec*_*rec 201

您可以通过添加以下一个或多个命令行参数来禁用SSL证书检查:

  • -Dmaven.wagon.http.ssl.insecure=true - 允许对用户生成的证书使用轻松的SSL检查.
  • -Dmaven.wagon.http.ssl.allowall=true - 启用服务器的X.509证书与主机名的匹配.如果禁用,将使用类似于检查的浏览器.
  • -Dmaven.wagon.http.ssl.ignore.validity.dates=true - 忽略证书日期的问题.

官方文件:http://maven.apache.org/wagon/wagon-providers/wagon-http/

这是一个易于复制和粘贴的oneliner:

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
Run Code Online (Sandbox Code Playgroud)

Ajay Gautam建议您也可以将上述内容添加到~/.mavenrc文件中,因为不必每次都在命令行中指定它:

$ cat ~/.mavenrc 
MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true"
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用的是 Maven 3.9.0,你还需要添加:`-Dmaven.resolver.transport=wagon` (13认同)
  • 这在maven 3.5.0中不起作用 (12认同)
  • 答案对我不起作用.我正在使用maven 3.5.0,我收到的例外是`PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径.Wagon是否适用于MAven 3.5.0? (10认同)
  • 请注意,“maven.wagon.http.ssl.ignore.validity.dates=true”仅在您设置“maven.wagon.http.ssl.insecure=true”后才有效。 (3认同)
  • 我有 spring boot /maven 项目,我正在使用 maven-jaxb2-plugin 来生成 Web 服务的源。但证书已过期。所以我尝试在 Eclipse 中使用上述参数运行 Maven 生成源。但我仍然收到错误“时间戳检查失败”,不知道如何在 eclipse/maven 环境中解决它。 (2认同)
  • 通过安装Java密码术扩展(JCE)无限强度([JDK7](http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html)|为[JDK8] (http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html))在maven 3.5.0上修复了我的问题 (2认同)

Ric*_*ele 46

另一个对我有用的方法是告诉Maven使用http:而不是https:当使用Maven Central时,将以下内容添加到settings.xml:

<settings>
   .
   .
   .
  <mirrors>
    <mirror>
        <id>central-no-ssl</id>
        <name>Central without ssl</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
   .
   .
   .
</settings>
Run Code Online (Sandbox Code Playgroud)

您的里程可能会有所不同.

  • 自 2020 年 1 月起这不起作用,因为 Maven 存储库禁用了 http 连接 (4认同)
  • 谢谢,这很有效!请注意一旦SSL工作,还原,因为这可能会导致用户添加非标准存储库,可以托管谁知道什么 (2认同)
  • 自 2020 年 1 月起将收到此错误: ReasonPhrase:HTTPS required" ,因为 Maven 存储库禁用了 Http 连接 (2认同)
  • 这是行不通的,因为截至 2020 年 1 月,不安全的 http 连接已被 501 阻止。它影响的不仅仅是中部地区。JCenter、Spring 和 Gradle 存储库也需要 https。了解更多:2020 年 1 月,https://www.alphabot.com/security/blog/2020/java/Your-Java-builds-might-break-starting-January-13th.html (2认同)

Nic*_*Ben 23

创建一个文件夹${USER_HOME}/.mvnmaven.config在其中放置一个名为的文件。

内容应该是:

-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true
-Dmaven.wagon.http.ssl.ignore.validity.dates=true
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。

  • 我在命令行上直接使用这些参数成功了,但将它们添加到文件中时仍然失败 (3认同)
  • 这实际上应该在项目级别进行配置。http://maven.apache.org/configure.html#mvn-folder (2认同)