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?

Anfänger
quelle

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"
rec
quelle
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.

Richard Steele
quelle
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.

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