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

时间:2014-01-21 08:28:21

标签: maven ssl-certificate

我经常需要运行“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

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

我有什么方法可以配置mvn来忽略SSL错误。

6 个答案:

答案 0 :(得分:180)

您可以通过添加以下一个或多个命令行参数来禁用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

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"

答案 1 :(得分:32)

对我有用的替代方法是告诉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>

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

答案 2 :(得分:1)

您还可以将m2e配置为使用HTTP而不是HTTPS

force-m2e-to-use-http-instead-of-https

答案 3 :(得分:1)

创建文件夹${USER_HOME}/.mvn 并在其中放入一个名为maven.config的文件。

内容应为:

-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true
-Dmaven.wagon.http.ssl.ignore.validity.dates=true

希望这有帮助。

答案 4 :(得分:0)

我发现最新的 jdk16 将无法通过 SSL 证书,所以我必须使用 -Dmaven.wagon.http.ssl.ignore.validity.dates=true 解决;切换到 jdk11(LTS) 然后所有问题都消失了。

jdk1.8 也测试过了,没有任何参数也能正常工作;但是 jdk1.8 处于无更新模式,最好转到 LTS jdk 版本,而不是最新的 jdk16。

答案 5 :(得分:0)

如果您想将所有相同的 maven.wagon.http.ssl. 设置放入 ~/.m2/settings.xml 而不是 ~/.mavenrc,这就是您需要放入文件的内容:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 https://maven.apache.org/xsd/settings-1.0.0.xsd">
  <profiles>
    <profile>
      <id>definedInM2SettingsXML</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <maven.wagon.http.ssl.insecure>true</maven.wagon.http.ssl.insecure>
        <maven.wagon.http.ssl.allowall>true</maven.wagon.http.ssl.allowall>
        <maven.wagon.http.ssl.ignore.validity.dates>true</maven.wagon.http.ssl.ignore.validity.dates>
      </properties>
    </profile>
  </profiles>
</settings>