Probleme bei der Verwendung von Maven und SSL hinter dem Proxy


133

Ich habe gerade Maven heruntergeladen und versucht, den einfachen Befehl auf der Seite "Maven in fünf Minuten" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ) auszuführen . Dies ist der Befehl:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Wenn ich es ausführe, erhalte ich eine Fehlermeldung mit dem SSL-Zertifikat und kann es nicht aus dem zentralen Maven-Repository unter https://repo.maven.apache.org/maven2 herunterladen . Der Fehler lautet "SunCertPathBuilderException: Es kann kein gültiger Zertifizierungspfad zum angeforderten Ziel gefunden werden".

Ich sitze hinter einer Unternehmensfirewall und habe die Proxy-Einstellungen für beide korrekt konfiguriert http und den httpsZugriff über die settings.xmlDatei . Ich bezweifle, dass jeder, der Maven herunterlädt und zum ersten Mal ausführt, das SSL-Zertifikat des Maven-Repositorys importieren muss, daher muss das Problem beim Proxy liegen. Hat jemand irgendwelche Erfahrungen damit?

Hier ist der Stack-Trace im vollständigen Debug-Modus (-X):

 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Apache Maven 3.2.3 (33f8c3e1027c3ddde99d3cdebad2656a31e8fdf4; 2014-08-11T22:58:10+02:00)
    Maven home: C:\Projects\maven\bin\..
    Java version: 1.7.0_45, vendor: Oracle Corporation
    Java home: C:\Program Files\Java\jdk1.7.0_45\jre
    Default locale: it_IT, platform encoding: Cp1252
    OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
    [DEBUG] Using connector WagonRepositoryConnector with priority 0.0 for https://repo.maven.apache.org/maven2 via *****:8080 with username=*****, password=***
    Downloading: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-clean-plugin/2.5/maven-clean-plugin-2.5.pom
    [WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean-plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
    org.apache.maven.plugin.PluginResolutionException: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
            at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:122)
            at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getPluginDescriptor(DefaultMavenPluginManager.java:148)
            at org.apache.maven.plugin.DefaultBuildPluginManager.loadPlugin(DefaultBuildPluginManager.java:81)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:138)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolveFromProject(DefaultPluginPrefixResolver.java:121)
            at org.apache.maven.plugin.prefix.internal.DefaultPluginPrefixResolver.resolve(DefaultPluginPrefixResolver.java:85)
            at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.findPluginForPrefix(MojoDescriptorCreator.java:260)
            at org.apache.maven.lifecycle.internal.MojoDescriptorCreator.getMojoDescriptor(MojoDescriptorCreator.java:220)
            at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:103)
            at org.apache.maven.lifecycle.internal.DefaultLifecycleTaskSegmentCalculator.calculateTaskSegments(DefaultLifecycleTaskSegmentCalculator.java:83)
            at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:85)
            at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:347)
            at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:154)
            at org.apache.maven.cli.MavenCli.execute(MavenCli.java:582)
            at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
            at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:606)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
            at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
            at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
            at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
    Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:349)
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:231)
            at org.eclipse.aether.internal.impl.DefaultRepositorySystem.readArtifactDescriptor(DefaultRepositorySystem.java:288)
            at org.apache.maven.plugin.internal.DefaultPluginDependenciesResolver.resolve(DefaultPluginDependenciesResolver.java:108)
            ... 23 more
    Caused by: org.eclipse.aether.resolution.ArtifactResolutionException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:459)
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:262)
            at org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:239)
            at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:334)
            ... 26 more
    Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact org.apache.maven.plugins:maven-clean-plugin:pom:2.5 from/to central (https://repo.maven.apache.org/maven2): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1016)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$6.wrap(WagonRepositoryConnector.java:1004)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:725)
            at org.eclipse.aether.util.concurrency.RunnableErrorForwarder$1.run(RunnableErrorForwarder.java:67)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
            at java.lang.Thread.run(Thread.java:744)
    Caused by: org.apache.maven.wagon.TransferFailedException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:935)
            at org.apache.maven.wagon.StreamWagon.getInputStream(StreamWagon.java:116)
            at org.apache.maven.wagon.StreamWagon.getIfNewer(StreamWagon.java:88)
            at org.apache.maven.wagon.StreamWagon.get(StreamWagon.java:61)
            at org.eclipse.aether.connector.wagon.WagonRepositoryConnector$GetTask.run(WagonRepositoryConnector.java:660)
            ... 4 more
    Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
            at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)
            at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1341)
            at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153)
            at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
            at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
            at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
            at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
            at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
            at org.apache.maven.wagon.providers.http.httpclient.conn.ssl.SSLConnectionSocketFactory.createLayeredSocket(SSLConnectionSocketFactory.java:280)
            at org.apache.maven.wagon.providers.http.httpclient.impl.conn.HttpClientConnectionOperator.upgrade(HttpClientConnectionOperator.java:167)
            at org.apache.maven.wagon.providers.http.httpclient.impl.conn.PoolingHttpClientConnectionManager.upgrade(PoolingHttpClientConnectionManager.java:329)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:392)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.MainClientExec.execute(MainClientExec.java:218)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec.execute(RetryExec.java:85)
            at org.apache.maven.wagon.providers.http.httpclient.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
            at org.apache.maven.wagon.providers.http.httpclient.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
            at org.apache.maven.wagon.providers.http.httpclient.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.execute(AbstractHttpClientWagon.java:756)
            at org.apache.maven.wagon.providers.http.AbstractHttpClientWagon.fillInputData(AbstractHttpClientWagon.java:854)
            ... 8 more
    Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:385)
            at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
            at sun.security.validator.Validator.validate(Validator.java:260)
            at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:326)
            at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:231)
            at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:126)
            at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323)
            ... 27 more
    Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
            at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:196)
            at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:268)
            at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:380)
            ... 33 more

2
Ich habe es nach der Antwort von rec gelöst , die Überprüfung von SSL-Zertifikaten zu ignorieren.
Evin1_

Antworten:


182

Tatsache ist, dass Ihr Maven-Plugin versucht, eine Verbindung zu einem https-Remote-Repository herzustellen
(z. B. https://repo.maven.apache.org/maven2/ ).

Dies ist eine neue SSL-Konnektivität für Maven Central, die im August 2014 verfügbar gemacht wurde!

Können Sie also bitte überprüfen, ob Ihre settings.xml die richtige Konfiguration hat?

    <settings>
  <activeProfiles>
    <!--make the profile active all the time -->
    <activeProfile>securecentral</activeProfile>
  </activeProfiles>
  <profiles>
    <profile>
      <id>securecentral</id>
      <!--Override the repository (and pluginRepository) "central" from the
         Maven Super POM -->
      <repositories>
        <repository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <id>central</id>
          <url>http://repo1.maven.org/maven2</url>
          <releases>
            <enabled>true</enabled>
          </releases>
        </pluginRepository>
      </pluginRepositories>
    </profile>
  </profiles>
</settings>

Alternativ können Sie das einfache http maven-Repository wie folgt verwenden

 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <name>Maven Plugin Repository</name>
      <url>http://repo1.maven.org/maven2</url>
      <layout>default</layout>
      <snapshots>
        <enabled>false</enabled>
      </snapshots>
      <releases>
        <updatePolicy>never</updatePolicy>
      </releases>
    </pluginRepository>
  </pluginRepositories>

Bitte lassen Sie mich wissen, ob meine Lösung funktioniert;)

J. J.


2
Vielen Dank für die schnelle und genaue Antwort, es hat bei mir funktioniert und wird wahrscheinlich vielen Menschen helfen, die Maven nach August 2014 verwenden :-) In der Zwischenzeit habe ich herausgefunden, wie es mit SSL funktioniert. Ich werde es als Antwort unten veröffentlichen, um anderen zu helfen, aber Ihre Antwort wird die offiziell akzeptierte sein. Vielen Dank
Andy

Danke Andy;) Beide Lösungen funktionieren für dich? oder nur die Alternative?
Biologie.info

4
Ja, ich habe es versucht und es funktioniert. Im ersten Codeblock musste ich jedoch beide Repository-URLs von https in http ändern, da sonst die gleiche Fehlermeldung wie zuvor angezeigt wurde. Vergessen Sie für jeden, der dies versucht, nicht das <activeProfiles> -Tag.
Andy

1
Ich habe es gerade mit der zweiten alternativen einfachen Lösung versucht, es hat bei mir funktioniert ... Danke.
Blue Diamond

7
Ab dem 15. Januar 2020 unterstützt das zentrale Repository keine unsichere Kommunikation mehr über einfaches HTTP und erfordert, dass alle Anforderungen an das Repository über HTTPS verschlüsselt werden.
Ahmad Alkhatib

183

Die obige Antwort ist eine gut funktionierende Lösung, aber so geht's, wenn Sie das SSL-Repo verwenden möchten:

  • Verwenden Sie einen Browser (ich habe IE verwendet), um zu https://repo.maven.apache.org/ zu gelangen.
    • Klicken Sie auf das Schlosssymbol und wählen Sie "Zertifikat anzeigen".
    • Gehen Sie zur Registerkarte "Details" und wählen Sie "In Datei speichern".
    • Wählen Sie "Base 64 X.509 (.CER)" und speichern Sie es irgendwo
  • Öffnen Sie nun eine Eingabeaufforderung und geben Sie ein (verwenden Sie Ihre eigenen Pfade):

    keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore

  • Jetzt können Sie den Befehl mit dem Parameter erneut ausführen

    -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

  • Verwenden Sie unter Linux den absoluten Pfad

    -Djavax.net.ssl.trustStore=/tmp/mavenKeystore

    Andernfalls wird dies passieren

  • So was:

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore

Optional:

Sie können die MAVEN_OPTSUmgebungsvariable verwenden, damit Sie sich nicht erneut darum kümmern müssen. Weitere Informationen zur MAVEN_OPTSVariablen finden Sie hier :


15
Dies sollte als die richtige Antwort akzeptiert werden. Ihr ISA-Proxy fügt ein Zwischenzertifikat ein, dem das JDK nicht vertraut.
Gordon

2
Ich habe Maven über die Kommandozeile arbeiten lassen. Wie bringe ich es zum Laufen, wenn ich verdunkle?
Prabodh Mhalgi

Einfaches Ausschneiden und Einfügen für MAVEN_OPTS: -Xmx512m -Djavax.net.ssl.trustStore = trust.jks -Djavax.net.ssl.trustStorePassword = -Djavax.net.ssl.keyStore = / home / directory / mycertificate.p12 - Djavax.net.ssl.keyStoreType = pkcs12 -Djavax.net.ssl.keyStorePassword = XXXXXX
Al Lelopath

Dies löste mein Problem. Wenn Sie nach dem Schlüsselspeicherkennwort gefragt werden, lautet die Standardeinstellung "changeit", falls Sie es noch nicht geändert haben. :)
John Manko

3
Unter Ubuntu können Sie den Befehl auch wie sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
folgt

23

Aktualisieren

Ich bin gerade auf diesen Fehlerbericht gestoßen:

https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760

Es scheint hier die Ursache unserer Probleme zu sein. Etwas mit ca-certificates-java, bei dem ein Fehler auftritt und die Cacerts nicht vollständig ausgefüllt sind. Für mich begann dies nach dem Upgrade auf 15.10 und dieser Fehler trat wahrscheinlich während dieses Vorgangs auf.

Die Problemumgehung besteht darin, den folgenden Befehl auszuführen:

sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure

Wenn Sie den Inhalt des Schlüsselspeichers überprüfen (wie in meiner ursprünglichen Antwort), sehen Sie jetzt eine ganze Reihe weiterer Informationen, einschließlich der erforderlichen DigiCert Global Root-Zertifizierungsstelle.

Wenn Sie den Prozess in meiner ursprünglichen Antwort durchlaufen haben, können Sie den von uns hinzugefügten Schlüssel bereinigen, indem Sie diesen Befehl ausführen (vorausgesetzt, Sie haben keinen anderen Alias ​​angegeben):

sudo keytool -delete -alias mykey -keystore / etc / ssl / certs / java / cacerts

Maven wird jetzt gut funktionieren.


Ursprüngliche Antwort

Ich möchte nur auf Andys Antwort zum Hinzufügen des Zertifikats und zum Angeben eines Schlüsselspeichers eingehen. Das hat mich dazu gebracht, und zusammen mit Informationen an anderer Stelle konnte ich das Problem verstehen und eine andere (bessere?) Lösung finden.

Andys Antwort gibt einen neuen Keystore mit dem Maven-Zertifikat an. Hier gehe ich etwas weiter und füge das Stammzertifikat dem Standard-Java-Truststore hinzu. Dadurch kann ich mvn (und andere Java-Inhalte) verwenden, ohne einen Keystore anzugeben.

Als Referenz ist mein Betriebssystem Ubuntu 15.10 mit Maven 3.3.3.

Grundsätzlich vertraut der Standard-Java-Truststore in diesem Setup nicht dem Stammzertifikat des Maven-Repos (DigiCert Global Root CA), daher muss es hinzugefügt werden.

Ich habe es hier gefunden und heruntergeladen:

https://www.digicert.com/digicert-root-certificates.htm

Dann habe ich den Standardspeicherort des Truststores gefunden, der sich hier befindet:

/ etc / ssl / certs / java / cacerts

Sie können sehen, welche Zertifikate sich derzeit dort befinden, indem Sie diesen Befehl ausführen:

keytool -list -keystore / etc / ssl / certs / java / cacerts

Wenn Sie dazu aufgefordert werden, lautet das Standardkennwort für den Keystore "changeit" (aber niemand tut dies jemals).

In meinem Setup war der Fingerabdruck von "DigiCert Global Root CA" nicht vorhanden (DigiCert nennt ihn "Daumenabdruck" im obigen Link). So fügen Sie es hinzu:

sudo keytool -import -file DigiCertGlobalRootCA.crt -keystore / etc / ssl / certs / java / cacerts

Wenn Sie dem Zertifikat vertrauen, sollten Sie mit Ja antworten.

Verwenden Sie die Keytool-Liste erneut, um zu überprüfen, ob der Schlüssel vorhanden ist. Ich habe mir nicht die Mühe gemacht, einen Alias ​​(-alias) anzugeben, also endete es so:

mykey, 2. Dezember 2015, trustedCertEntry, Zertifikatfingerabdruck (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Dann konnte ich mvn-Befehle wie gewohnt ausführen, ohne dass ein Keystore angegeben werden musste.


Danke an Andy. Und an Leeland, der seinen Blog neu gepostet hat. nodsw.com/blog/leeland/2006/12/… Und auch Ihnen, @Luke.
Ajoshi

13

Sie können die -Dmaven.wagon.http.ssl.insecure=trueOption verwenden


11

Sie können das SSL-Zertifikat manuell importieren und es einfach dem Keystore hinzufügen.

Für Linux-Benutzer

Syntax:

keytool -trustcacerts -keystore / jre / lib / security / cacerts -storepass changeit -importcert -alias nexus -file

Beispiel:

keytool -trustcacerts -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/jre/lib/security/cacerts -storepass changeit -importcert -alias nexus -file ~ / Downloads / abc.com-ssl. crt


Zuerst müssen Sie das Zertifikat noch speichern, wie in Andys Antwort beschrieben . Die Erweiterung wäre also ".cer".
sjngm

9

Dies ist möglicherweise nicht die beste Lösung. Ich habe meinen Maven von 3.3.x auf 3.2.x geändert. Und dieses Problem ist weg.


Ich habe versucht, die Zertifikate für ein paar Stunden ohne Glück zu installieren, und diese Lösung hat endlich funktioniert! Die neueste Version von Maven, die ich zur Arbeit bekam, war 3.2.2.
jlars62

3.3.3 und 3.2.5 haben bei mir nicht funktioniert, aber 3.0.5 hat funktioniert
ROMANIA_engineer

Ich bin von einer Suchmaschine hierher gekommen, benutze aber Gradle anstelle von Maven. Durch das Aktualisieren meiner älteren Version von Gradle wurden auch diese seltsamen SSL-Probleme für mich behoben.
Nik Reiman

6

Ich hatte tatsächlich das gleiche Problem.

wenn ich renne

MVN sauberes Paket

Bei meinem Maven-Projekt erhalte ich diesen Zertifikatfehler vom Maven-Tool.

Ich folgte @Andys Antwort bis zu dem Punkt, an dem ich die CER- Datei heruntergeladen hatte

Danach hat der Rest der Antwort für mich nicht funktioniert, aber ich habe Folgendes getan (ich laufe auf einem Linux Debian-Computer)

Führen Sie zunächst Folgendes aus:

keytool -list -keystore "Java-Pfad +" / jre / lib / security / cacerts ""

In meinem Fall ist es zum Beispiel:

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

Wenn Sie nach dem Passwort gefragt werden, drücken Sie einfach die Eingabetaste.

Dieser Befehl soll alle von Java akzeptierten SSL-Zertifikate auflisten. Als ich diesen Befehl ausführte, bekam ich in meinem Fall zum Beispiel 93 Zertifikate.

Fügen Sie nun die heruntergeladene Datei .cer zur cacerts- Datei hinzu, indem Sie den folgenden Befehl ausführen :

sudo keytool -importcert -file /home/hal/Public/certificate_file_downloaded.cer -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / security / cacerts

Schreiben Sie Ihr Sudo-Passwort und Sie werden nach dem Keystore-Passwort gefragt

Die Standardeinstellung ist changeit

Sagen Sie dann y, dass Sie diesem Zertifikat vertrauen.

wenn Sie den Befehl ausführen

keytool -list -keystore / usr / lib / jvm / jdk-8-oracle-arm32-vfp-hflt / jre / lib / security / cacerts

In meinem Fall habe ich wieder 94 Inhalte der Cacerts- Datei erhalten

es bedeutet, dass es erfolgreich hinzugefügt wurde.


2

Eine schnelle Lösung ist das Hinzufügen dieses Codes in Ihrer pom.xml:

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Plugin Repository</name>
        <url>http://repo1.maven.org/maven2</url>
        <layout>default</layout>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <releases>
            <updatePolicy>never</updatePolicy>
        </releases>
    </repository>
</repositories>

Wo nie für die Suche eine zertifizierte zu vermeiden ist.


1
Es lohnt sich, im Antwort-Thread nach unten zu scrollen. Das hat einfach funktioniert!
Silber

1

Ich habe den gleichen Fehler bezüglich des SSL-Zertifikats erhalten, als Maven versuchte, die erforderlichen Module automatisch herunterzuladen.
Als Abhilfe habe ich versucht, Lukes Antwort oben zu implementieren, aber festgestellt, dass sich das DigiCert Global Root CA-Zertifikat bereits im vertrauenswürdigen Schlüsselspeicher von Java befindet.

Was mir geholfen hat, war das Hinzufügen %JAVA_HOME%\binzur Pfadvariablen (ich verwende Windows). Und %JAVA_HOME%ist ein JDK-Standort, nicht nur ein JRE-Standort, da Maven ein JDK benötigt.
Ich bin nicht sicher, warum es geholfen hat, aber es hat geholfen. Ich bin mir absolut sicher, dass dies das einzige war, was ich geändert habe.



1

Schritt 1: Holen Sie sich den Inhalt des Zertifikats der Website (Sie möchten es als vertrauenswürdiges Stammverzeichnis importieren lassen).

$ keytool -printcert -rfc -sslserver maven.2xoffice.com*

-----BEGIN CERTIFICATE-----
MIIFNTCCBB2gAwIBAgIHJ73QrVnyJjANBgkqhkiG9w0BAQsFADCBtDELMAkGA1UEBhMCVVMxEDAO
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMxITAfBgNVBAoT
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
...
-----END CERTIFICATE-----
The -rfc option outputs the certificate chain in PEM-encoded format for easy import back into a keystore.

Schritt 2: Speichern Sie das Ganze (einschließlich der in diesem Fall wichtigen Zeilen BEGIN CERTIFICATE und END CERTIFICATE) als godaddyg2.pem und importieren Sie es in meinen Trust Store über:

Schritt 3: Importieren Sie das Zertifikat in den Keystore (Java Trusted Key Store).

$ keytool -importcert -file ./godaddyg2.pem -keystore $JRE_LIB/lib/security/cacerts

1

Was hat bei mir funktioniert:

Konfigurieren Sie die <proxy>Einstellungen in${MAVEN_HOME}/conf/settings.xml :

(Hinweis: Bei anderen hat es bei der Konfiguration funktioniert ${user.home}/.m2/settings.xml. Wenn in user.home keine settings.xml vorhanden ist, kopieren Sie sie einfach aus conf / in das Verzeichnis maven.)

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->

    <proxy>
      <id>my-proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <username></username>
      <password></password>
      <host>my.proxy.host.com</host>
      <port>8080</port>
      <nonProxyHosts></nonProxyHosts>
    </proxy>

  </proxies>

pom.xmlZeigen Sie dann auf den Download von http maven central repo:

<project>
...
    <repositories>
        <repository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>http://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </repository>
    </repositories>
...
</project>

Möglicherweise müssen Sie auch den http-Proxy in Ihrer IDE konfigurieren. Für VSCode in settings.json:

{
    ...
    "http.proxy": "http://my/proxy/script/address/my-proxy.pac",
    ...
}

Für Win10: Start / Suche> Netzwerk-Proxy-Einstellungen> Skriptadresse Geben Sie hier die Bildbeschreibung ein

Quellen:


0

Ich bin in derselben Situation auf dieses Problem gestoßen und habe eine ausführliche Antwort auf eine verwandte Frage zum Stapelüberlauf geschrieben, in der erklärt wird, wie die Cacerts des Systems mithilfe eines GUI-Tools einfacher geändert werden können. Ich denke, es ist ein bisschen besser, als einen einmaligen Keystore für ein bestimmtes Projekt zu verwenden oder die Einstellungen für Maven zu ändern (was später zu Problemen führen kann).


0

Obwohl ich die Zertifikate in Zertifikate steckte, bekam ich immer noch den Fehler. Ich habe sie in jre gesetzt, nicht in jdk / jre.

Es gibt zwei Schlüsselspeicher, denken Sie daran !!!


0

Das Problem, das ich bekam, ist: Früher habe ich jdk 1.8.0_31 mit installiertem Zertifikat verwendet. Ich habe zu jdk 1.8.0_191 gewechselt, aber kein Zertifikat installiert.

Aber meine Projekte funktionierten gut, ich stellte fest, dass ihre Abhängigkeiten bereits heruntergeladen wurden. Sie würden also nur diese Projekte kompilieren und verpacken. Dies funktionierte jedoch nicht für neue Maven-Projekte, da ihre Abhängigkeiten nicht früher heruntergeladen wurden.

Lösung::

  1. Wechseln Sie für Ihr neues Projekt zu einer früheren JDK-Version (auf der das Zertifikat bereits installiert war) und führen Sie eine Neuinstallation durch
  2. Laden Sie das Zertifikat für die neue JDK-Version, zu der Sie kürzlich gewechselt sind, erneut herunter und führen Sie dann eine Neuinstallation durch

0

Nach dem Erstellen des von @Andy erwähnten Keystores. In Eclipse habe ich die JVM-Argumente hinzugefügt und es hat funktioniert.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein


0

Ich hatte das gleiche Problem mit SSL und Maven. Aufgrund der IT-Richtlinien meines Unternehmens kann ich keine Änderungen an der Computerkonfiguration vornehmen. Daher habe ich die gesamte .m2-Datei von meinem anderen Computer kopiert und den .m2-Ordner eingefügt, und es hat funktioniert.

Der Ordner .m2 befindet sich normalerweise unter c \ user \ admin


-1

Nur eine weitere Ursache: Wenn Sie Charles öffnen, können Sie auch auf dieses Problem stoßen. In diesem Fall beenden Sie einfach Charles.


-1

Ich habe einfach eine neue Java-Version verwendet und es hat bei mir funktioniert.

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.