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

5ssjco0h  于 2023-03-17  发布在  Maven
关注(0)|答案(6)|浏览(567)

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

2guxujil

2guxujil1#

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

  • -Dmaven.wagon.http.ssl.insecure=true-允许对用户生成的证书使用宽松的SSL检查。
  • -Dmaven.wagon.http.ssl.allowall=true-启用服务器的X.509证书与主机名的匹配。如果禁用,将使用类似check的浏览器。
  • -Dmaven.wagon.http.ssl.ignore.validity.dates=true-忽略证书日期问题。
  • Dmaven.resolver.transport=wagon-在Maven 3.9.0和更新版本中,默认情况下,他们已经切换到使用Apache HttpClient 4。您需要使用此选项切换回wagon,以使上述标志生效。

正式文件:http://maven.apache.org/wagon/wagon-providers/wagon-http/
下面是一个简单的复制粘贴工具:

-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"
wfveoks0

wfveoks02#

另一个对我有效的方法是告诉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>

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

azpvetkf

azpvetkf3#

创建一个文件夹${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

希望这个有用。

5w9g7ksd

5w9g7ksd4#

我发现最新的jdk 16将失败的SSL证书,所以我不得不使用-Dmaven.wagon.http.ssl.ignore.validity.dates=true来解决;切换到jdk 11(LTS),然后所有问题都消失了。
也测试了jdk1.8,其也在没有任何参数的情况下工作;但是jdk1.8处于无更新模式,最好转到LTS jdk版本,而不是最新的jdk 16。

ar5n3qh5

ar5n3qh55#

您还可以将m2e配置为使用HTTP而不是HTTPS
force-m2e-to-use-http-instead-of-https

nue99wik

nue99wik6#

如果您想将所有相同的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>

相关问题