Wie kann man Maven anweisen, SSL-Fehler zu ignorieren (und allen Zertifikaten zu vertrauen)?


106

Ich muss häufig den Befehl "mvn" ausführen:

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

Da ich mich in verschiedene andere Domänen integrieren muss, muss ich derzeit jedes Mal ihr Zertifikat zu meiner truststore.jks hinzufügen, um SSL-Handshake-Fehler zu vermeiden.

Gibt es eine Möglichkeit, mvn so zu konfigurieren, dass SSL-Fehler ignoriert werden?

Antworten:


235

Sie können die Überprüfung von SSL-Zertifikaten deaktivieren, indem Sie einen oder mehrere dieser Befehlszeilenparameter hinzufügen:

  • -Dmaven.wagon.http.ssl.insecure=true - Aktivieren Sie die Verwendung einer entspannten SSL-Prüfung für benutzergenerierte Zertifikate.
  • -Dmaven.wagon.http.ssl.allowall=true- Aktivieren Sie die Übereinstimmung des X.509-Zertifikats des Servers mit dem Hostnamen. Wenn deaktiviert, wird ein Browser wie check verwendet.
  • -Dmaven.wagon.http.ssl.ignore.validity.dates=true - Probleme mit Zertifikatdaten ignorieren.

Offizielle Dokumentation: http://maven.apache.org/wagon/wagon-providers/wagon-http/

Hier ist der Oneliner zum einfachen Kopieren und Einfügen:

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

Ajay Gautam schlug vor, dass Sie der ~/.mavenrcDatei auch Folgendes hinzufügen könnten , um es nicht jedes Mal in der Befehlszeile angeben zu müssen:

$ 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
Ich habe ein Spring Boot / Maven-Projekt und verwende das Maven-Jaxb2-Plugin, um Quellen für einen Webservice zu generieren. aber das Zertifikat ist abgelaufen. Also habe ich versucht, die Maven-Generierungsquellen mit den oben genannten Elementen in Eclipse auszuführen. Aber ich bekomme immer noch den Fehler "Zeitstempelprüfung fehlgeschlagen", keine Idee, wie man es in einer Eclipse / Maven-Umgebung löst.
Mukun

14
Die Antwort funktioniert bei mir nicht. Ich benutze Maven 3.5.0 und die Ausnahmen, die ich erhalten habe, waren PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. Funktioniert der Wagen mit MAven 3.5.0?
thlim

Stattdessen habe ich einen Truststore-JKS erstellt und Maven auf diese JKS-Datei verwiesen.
thlim

3
Durch die Installation der Java Cryptography Extension (JCE) Unlimited Strength (für JDK7 | für JDK8 ) wurde das Problem für mich auf Maven 3.5.0
Skadya

1
Verwenden von NetBeans 6.8 Ich habe die Optionen zu den NetBeans-Maven-Optionen unter "Globale Ausführungsoptionen" über die Benutzeroberfläche hinzugefügt und konnte sie über https aus Repositorys herunterladen.
Dan675

46

Eine Alternative, die für mich funktioniert hat, besteht darin, Maven anzuweisen, http: anstelle von https: zu verwenden, wenn Maven Central verwendet wird, indem Folgendes zu settings.xml hinzugefügt wird :

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

Ihr Kilometerstand kann natürlich variieren.


2
Danke, das hat funktioniert! Und bitte einen Hinweis zum Zurücksetzen, sobald SSL funktioniert, da dies dazu führen kann, dass Benutzer nicht standardmäßige Repositorys hinzufügen, die hosten können, wer weiß was
wie

3
Dies funktioniert seit Januar 2020 nicht mehr, da Maven Repo die http-Verbindung deaktiviert hat
Justin

1
Wird diesen Fehler seit Januar 2020 erhalten: ReasonPhrase: HTTPS Erforderlich ", da Maven Repo die
Justin

8

Erstellen Sie einen Ordner ${USER_HOME}/.mvn und legen Sie eine aufgerufene Datei maven.configdarin ab.

Der Inhalt sollte sein:

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

Hoffe das hilft.


Es gelingt mir, diese Parameter direkt in der Befehlszeile zu verwenden, aber es ist mir immer noch fehlgeschlagen, sie in die Datei
Justin,

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.