Problemi con Maven e SSL dietro il proxy


133

Ho appena scaricato Maven e stavo provando a eseguire il semplice comando trovato nella pagina "Maven in cinque minuti" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Questo è il comando:

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

Quando lo eseguo, visualizzo un errore con il certificato SSL e non riesco a scaricare dal repository Maven centrale all'indirizzo https://repo.maven.apache.org/maven2 . L'errore è "SunCertPathBuilderException: impossibile trovare un percorso di certificazione valido per la destinazione richiesta".

Sono seduto dietro un firewall aziendale e ho configurato correttamente le impostazioni del proxy per entrambi httpe l' httpsaccesso tramite il settings.xmlfile. Dubito che tutti coloro che scaricano Maven e lo eseguono per la prima volta debbano importare il certificato SSL del repository Maven, quindi il problema deve riguardare il proxy. Qualcuno ha qualche esperienza con questo?

Ecco la traccia dello stack in modalità di debug completa (-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
L'ho risolto seguendo la risposta di rec per ignorare il controllo del certificato SSL.
Evin1_

Risposte:


182

Il fatto è che il tuo plugin maven prova a connettersi a un repository remoto https
(es. Https://repo.maven.apache.org/maven2/ )

Questa nuova connettività SSL per Maven Central è stata resa disponibile nell'agosto 2014!

Quindi, per favore, puoi verificare che il tuo settings.xml abbia la configurazione corretta.

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

In alternativa puoi usare il semplice repository http maven in questo modo

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

Per favore fatemi sapere se la mia soluzione funziona;)

J.


2
Grazie per la risposta rapida e accurata, ha funzionato per me e probabilmente aiuterà molte persone che iniziano a usare Maven dopo agosto 2014 :-) Nel frattempo ho capito come farlo funzionare con SSL. Lo posterò come una risposta di seguito per aiutare gli altri, ma la tua risposta sarà quella ufficialmente accettata. Grazie
Andy,

Grazie Andy;) Entrambe le soluzioni funzionano per te? o solo l'alternativa?
biology.info,

4
Sì, l'ho provato e funziona. Tuttavia, nel primo blocco di codice ho dovuto modificare entrambi gli URL del repository da https a http, altrimenti ho ricevuto lo stesso messaggio di errore di prima. Inoltre, per chiunque provi questo, non dimenticare il tag <activeProfiles>.
Andy,

1
Ho appena provato con la seconda alternativa semplice, ha funzionato per me ... Grazie.
Blue Diamond,

7
A partire dal 15 gennaio 2020, il repository centrale non supporta più comunicazioni non sicure su HTTP semplice e richiede che tutte le richieste al repository siano crittografate su HTTPS.
Ahmad Alkhatib,

183

La risposta sopra è una buona soluzione funzionante, ma ecco come farlo se si desidera utilizzare il repository SSL:

  • Usa un browser (ho usato IE) per andare su https://repo.maven.apache.org/
    • Fare clic sull'icona del lucchetto e selezionare "Visualizza certificato"
    • Vai alla scheda "Dettagli" e seleziona "Salva su file"
    • Scegli "Base 64 X.509 (.CER)" e salvalo da qualche parte
  • Ora apri un prompt dei comandi e digita (usa i tuoi percorsi):

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

  • Ora puoi eseguire nuovamente il comando con il parametro

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

  • Sotto Linux usa il percorso assoluto

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

    altrimenti ciò accadrà

  • Come questo:

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

Opzionale:

Puoi usare la MAVEN_OPTSvariabile d'ambiente in modo da non doverti più preoccupare. Vedi maggiori informazioni sulla MAVEN_OPTSvariabile qui :


15
Questo dovrebbe essere accettato come la risposta corretta. Il proxy ISA sta inserendo un certificato intermedio non considerato attendibile da JDK.
Gordon,

2
Ho fatto funzionare maven dalla riga di comando. Come faccio a farlo funzionare eclissi?
Prabodh Mhalgi,

Easy cut'n'paste per 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

Questo ha risolto il mio problema. Quando viene richiesta la password del keystore, l'impostazione predefinita è "changeit" se non l'hai già modificata. :)
John Manko

3
Inoltre, su Ubuntu, potresti eseguire il comando comesudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko

23

Aggiornare

Mi sono appena imbattuto in questa segnalazione di bug:

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

Sembra essere la causa dei nostri problemi qui. Qualcosa con ca-certificati-java che riscontra un errore e non popola completamente i dessert. Per me, questo ha iniziato a succedere dopo l'aggiornamento alla 15.10 e probabilmente questo errore si è verificato durante quel processo.

La soluzione alternativa è eseguire il comando seguente:

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

Se controlli il contenuto del keystore (come nella mia risposta originale), ora vedrai un sacco di più, inclusa la CA radice globale DigiCert necessaria.

Se hai seguito il processo nella mia risposta originale, puoi ripulire la chiave che abbiamo aggiunto eseguendo questo comando (supponendo che non hai specificato un alias diverso):

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

Maven ora funzionerà bene.


Risposta originale

Vorrei solo espandere la risposta di Andy sull'aggiunta del certificato e sulla specifica di un keystore. Questo mi ha fatto iniziare, e combinato con informazioni altrove sono stato in grado di capire il problema e trovare un'altra soluzione (migliore?).

La risposta di Andy specifica un nuovo keystore con il certificato Maven in particolare. Qui, sto andando un po 'più ampio e aggiungendo il certificato radice al truststore java predefinito. Questo mi permette di usare mvn (e altre cose java) senza specificare un keystore.

Per riferimento il mio sistema operativo è Ubuntu 15.10 con Maven 3.3.3.

Fondamentalmente, il truststore java predefinito in questa configurazione non si fida del certificato radice del repository Maven (DigiCert Global Root CA), quindi deve essere aggiunto.

L'ho trovato qui e scaricato:

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

Quindi ho trovato la posizione predefinita del truststore, che risiede qui:

/ Etc / ssl / certs / java / cacerts

Puoi vedere quali certs sono attualmente presenti eseguendo questo comando:

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

Quando richiesto, la password del keystore predefinita è "changeit" (ma nessuno lo fa mai).

Nella mia configurazione, l'impronta digitale di "DigiCert Global Root CA" non esisteva (DigiCert lo chiama "identificazione personale" nel link sopra). Quindi, ecco come aggiungerlo:

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

Questo dovrebbe richiedere se ti fidi del certificato, dire di sì.

Utilizzare nuovamente keytool -list per verificare l'esistenza della chiave. Non mi sono preoccupato di specificare un alias (-alias), quindi è finito così:

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

Quindi sono stato in grado di eseguire i comandi mvn come di consueto, non è necessario specificare il keystore.


Grazie ad Andy. E a Leeland che ha ripubblicato il suo blog. nodsw.com/blog/leeland/2006/12/… E anche a te, @Luke.
Ajoshi,

13

Puoi usare l' -Dmaven.wagon.http.ssl.insecure=trueopzione


11

È possibile importare il certificato SSL manualmente e aggiungerlo al keystore.

Per gli utenti Linux,

Sintassi:

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

Esempio :

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


All'inizio devi ancora salvare il certificato come descritto nella risposta di Andy . Quindi l'estensione sarebbe ".cer".
sjngm,

9

Questa potrebbe non essere la soluzione migliore. Ho cambiato la mia maven da 3.3.xa 3.2.x. E questo problema è andato.


Ho provato a installare i certificati per un paio d'ore senza fortuna, e questa soluzione finalmente ha funzionato! L'ultima versione di Maven che ho avuto modo di lavorare era 3.2.2.
jlars62,

3.3.3 e 3.2.5 non hanno funzionato per me, ma 3.0.5 ha funzionato
ROMANIA_engineer il

Sono finito qui da un motore di ricerca, ma sto usando Gradle invece di Maven. L'aggiornamento della mia versione precedente di Gradle ha risolto anche questi strani problemi SSL per me.
Nik Reiman,

6

In realtà ho avuto lo stesso problema.

quando corro

mvn pacchetto pulito

sul mio progetto maven, ricevo questo errore di certificato dallo strumento maven.

Ho seguito la risposta di @Andy fino al punto in cui ho scaricato il file .cer

dopo che il resto della risposta non ha funzionato per me, ma ho fatto quanto segue (sono in esecuzione su macchina Debian Linux)

prima di tutto, esegui:

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

per esempio nel mio caso è:

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

se ti chiede la password, premi Invio.

questo comando dovrebbe elencare tutti i certificati SSL accettati da Java. quando ho eseguito questo comando, nel mio caso ho ricevuto 93 certificati per esempio.

A questo punto aggiungere il file scaricato cer al cacerts file eseguendo il comando seguente:

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

scrivi la tua password sudo quindi ti chiederà la password del keystore

quello predefinito è changeit

poi dire y che vi fidate di questo certificato.

se si esegue il comando

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

ancora una volta, nel mio caso, ho ottenuto 94 contenuti del file cacerts

significa che è stato aggiunto con successo.


2

Una soluzione rapida è aggiungere questo codice nel tuo 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>

Dove mai è per evitare la ricerca di un certificato.


1
Vale la pena scorrere verso il basso nel thread delle risposte. Questo ha funzionato semplicemente!
argento,

1

Stavo ottenendo lo stesso errore sul certificato SSL quando Maven ha provato a scaricare automaticamente i moduli necessari.
Come rimedio, stavo tentando di implementare la risposta di Luke sopra, ma ho scoperto che il certificato CA radice globale DigiCert è già nel keystore di fiducia di Java.

Ciò che mi ha aiutato è stato l'aggiunta %JAVA_HOME%\binalla variabile Path (sto eseguendo Windows). Ed %JAVA_HOME%è una posizione JDK, non solo una posizione JRE, poiché Maven ha bisogno di una JDK.
Non sono sicuro del perché abbia aiutato, ma lo ha fatto. Sono assolutamente sicuro che questa sia stata l'unica cosa che ho cambiato.



1

Passaggio 1: OTTIENI i contenuti del Certificato del sito Web (desideri importarlo come radice attendibile)

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

Passo 2: salva il tutto (incluse le righe BEGIN CERTIFICATE e END CERTIFICATE, che sono significative in questo caso) come godaddyg2.pem e importalo nel mio negozio di fiducia tramite:

Passaggio 3: importare il certificato nel keystore (keystore java trusted)

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

1

Cosa ha funzionato per me:

Configurare le <proxy>impostazioni in${MAVEN_HOME}/conf/settings.xml :

(Nota: per altri, ha funzionato quando sono stati configurati ${user.home}/.m2/settings.xml. Se non è presente settings.xml in user.home, basta copiarlo da conf / nella directory 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>

Quindi punta pom.xmla scaricare dal repository centrale http maven:

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

Potrebbe anche essere necessario configurare il proxy http nell'IDE. Per VSCode in settings.json:

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

Per Win10: Start / Cerca> Impostazioni proxy di rete> Indirizzo script inserisci qui la descrizione dell'immagine

fonti:


0

Mi sono imbattuto in questo problema nella stessa situazione e ho scritto una risposta dettagliata a una domanda correlata su overflow dello stack spiegando come modificare più facilmente i cacerts del sistema usando uno strumento GUI. Penso che sia un po 'meglio che usare un keystore unico per un progetto specifico o modificare le impostazioni per Maven (che può causare problemi lungo la strada).


0

Anche se stavo inserendo i certificati nei dessert, continuavo a ricevere l'errore. Trasforma il nostro li stavo mettendo in jre, non in jdk / jre.

Ci sono due keystore, tienilo a mente !!!


0

Il problema, ho riscontrato in precedenza, utilizzavo jdk 1.8.0_31 con il certificato installato. Sono passato a jdk 1.8.0_191 ma non ho installato il certificato.

Ma i miei progetti funzionavano bene, mi sono reso conto che le loro dipendenze erano già state scaricate. Quindi compilerebbero e impacchetterebbero solo quei progetti. Ma questo non ha funzionato per i nuovi progetti maven in quanto le loro dipendenze non sono state scaricate in precedenza.

Soluzione::

  1. Passa alla versione precedente di jdk (che aveva già il certificato installato) per il tuo nuovo progetto ed esegui un'installazione pulita
  2. Scarica di nuovo il certificato per la nuova versione jdk a cui sei passato di recente, quindi esegui un'installazione pulita

0

Dopo aver creato il keystore menzionato da @Andy. In Eclipse, ho aggiunto jvm args e ha funzionato.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


0

Ho avuto lo stesso problema con SSL e Maven. La politica IT della mia azienda mi limita a fare qualsiasi modifica alla configurazione del computer, quindi ho copiato l'intero .m2 dall'altro mio computer e incollato la cartella .m2 e ha funzionato.

La cartella .m2 si trova di solito in c \ user \ admin


-1

Solo un'altra causa: se apri Charles, potresti anche incontrare questo problema, in questo caso basta uscire da Charles.


-1

Ho semplicemente usato la nuova versione di Java e ha funzionato per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.