Problèmes d'utilisation de Maven et SSL derrière le proxy

133

Je viens de télécharger Maven et j'essayais d'exécuter la commande simple trouvée sur la page "Maven en cinq minutes" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Voici la commande:

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

Lorsque je l'exécute, j'obtiens une erreur avec le certificat SSL et je ne peux pas télécharger à partir du référentiel central Maven à https://repo.maven.apache.org/maven2 . L'erreur est «SunCertPathBuilderException: impossible de trouver un chemin de certification valide vers la cible demandée».

Je suis assis derrière un pare-feu d'entreprise et j'ai correctement configuré les paramètres de proxy pour les deux httpet l' httpsaccès via le settings.xmlfichier. Je doute que quiconque télécharge Maven et l'exécute pour la première fois doive importer le certificat SSL du référentiel Maven, donc le problème doit être avec le proxy. Est-ce que quelqu'un a de l'expérience avec ça?

Voici la trace de la pile en mode débogage complet (-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
Andy
la source
2
Je l'ai résolu en suivant la réponse de rec pour ignorer la vérification du certificat SSL.
Evin1_

Réponses:

182

Le fait est que votre plugin maven essaie de se connecter à un référentiel distant https
(par exemple https://repo.maven.apache.org/maven2/ )

C'est une nouvelle connectivité SSL pour Maven Central qui a été mise à disposition en août 2014!

Alors s'il vous plaît, pouvez-vous vérifier que votre settings.xml a la bonne configuration.

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

Vous pouvez également utiliser le simple référentiel http maven comme celui-ci

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

S'il vous plaît laissez-moi savoir si ma solution fonctionne;)

J.

biology.info
la source
2
Merci pour la réponse rapide et précise, cela a fonctionné pour moi et aidera probablement beaucoup de gens qui commencent à utiliser maven après août 2014 :-) En attendant, j'ai compris comment le faire fonctionner avec SSL. Je la posterai comme réponse ci-dessous pour aider les autres, mais votre réponse sera celle officiellement acceptée. Merci
Andy
Merci Andy;) Les deux solutions fonctionnent pour vous? ou juste l'alternative?
biology.info
4
Oui, je l'ai essayé et ça marche. Cependant, dans le premier bloc de code, j'ai dû changer les deux URL du référentiel de https à http, sinon j'ai eu le même message d'erreur qu'auparavant. De plus, pour tous ceux qui essaient cela, n'oubliez pas la balise <activeProfiles>.
Andy
1
Je viens d'essayer avec la deuxième solution alternative simple, cela a fonctionné pour moi ... Merci.
Blue Diamond
7
À compter du 15 janvier 2020, le référentiel central ne prend plus en charge les communications non sécurisées via HTTP simple et exige que toutes les demandes adressées au référentiel soient chiffrées via HTTPS.
Ahmad Alkhatib le
183

La réponse ci-dessus est une bonne solution de travail, mais voici comment le faire si vous souhaitez utiliser le référentiel SSL:

  • Utilisez un navigateur (j'ai utilisé IE) pour accéder à https://repo.maven.apache.org/
    • Cliquez sur l'icône de verrouillage et choisissez "Afficher le certificat"
    • Allez dans l'onglet "Détails" et choisissez "Enregistrer dans un fichier"
    • Choisissez le type "Base 64 X.509 (.CER)" et enregistrez-le quelque part
  • Maintenant, ouvrez une invite de commande et tapez (utilisez vos propres chemins):

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

  • Vous pouvez maintenant exécuter à nouveau la commande avec le paramètre

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

  • Sous Linux, utilisez le chemin absolu

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

    sinon cela arrivera

  • Comme ça:

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

Optionnel:

Vous pouvez utiliser la MAVEN_OPTSvariable d'environnement pour ne plus avoir à vous en soucier. Voir plus d'informations sur la MAVEN_OPTSvariable ici :

Andy
la source
15
Cela devrait être accepté comme la bonne réponse. Votre proxy ISA insère un certificat intermédiaire qui n'est pas approuvé par le JDK.
Gordon
2
J'ai fait travailler maven via la ligne de commande. Comment le faire fonctionner I Eclipse?
Prabodh Mhalgi du
Cut'n'paste facile pour 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
Cela a résolu mon problème. Lorsqu'il demande le mot de passe du keystore, la valeur par défaut est "changeit" si vous ne l'avez pas déjà changé. :)
John Manko
3
De plus, sur Ubuntu, vous pouvez exécuter la commande commesudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko
23

Mettre à jour

Je viens de tomber sur ce rapport de bogue:

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

Cela semble être la cause de nos problèmes ici. Quelque chose avec ca-certificate-java rencontrant une erreur et ne remplissant pas complètement les cacerts. Pour moi, cela a commencé à se produire après la mise à niveau vers 15.10 et ce bogue s'est probablement produit pendant ce processus.

La solution de contournement consiste à exécuter la commande suivante:

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

Si vous vérifiez le contenu du keystore (comme dans ma réponse d'origine), vous en verrez maintenant un tas d'autres, y compris le DigiCert Global Root CA.

Si vous avez suivi le processus dans ma réponse d'origine, vous pouvez nettoyer la clé que nous avons ajoutée en exécutant cette commande (en supposant que vous n'ayez pas spécifié d'alias différent):

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

Maven fonctionnera désormais correctement.


Réponse originale

Je voudrais juste développer la réponse d'Andy sur l'ajout du certificat et la spécification d'un keystore. Cela m'a permis de démarrer et, combiné à des informations ailleurs, j'ai pu comprendre le problème et trouver une autre (meilleure?) Solution.

La réponse d'Andy spécifie un nouveau keystore avec le certificat Maven spécifiquement. Ici, je vais un peu plus large et j'ajoute le certificat racine au truststore java par défaut. Cela me permet d'utiliser mvn (et d'autres trucs java) sans spécifier de keystore.

Pour référence, mon système d'exploitation est Ubuntu 15.10 avec Maven 3.3.3.

Fondamentalement, le truststore Java par défaut dans cette configuration ne fait pas confiance au certificat racine du dépôt Maven (DigiCert Global Root CA), il doit donc être ajouté.

Je l'ai trouvé ici et téléchargé:

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

Ensuite, j'ai trouvé l'emplacement du truststore par défaut, qui réside ici:

/ etc / ssl / certs / java / cacerts

Vous pouvez voir quels certificats y sont actuellement en exécutant cette commande:

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

Lorsque vous y êtes invité, le mot de passe par défaut du keystore est "changeit" (mais personne ne le fait jamais).

Dans ma configuration, l'empreinte digitale de "DigiCert Global Root CA" n'existait pas (DigiCert l'appelle "empreinte digitale" dans le lien ci-dessus). Alors, voici comment l'ajouter:

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

Cela devrait vous demander si vous faites confiance au cert, dites oui.

Utilisez à nouveau keytool -list pour vérifier que la clé existe. Je n'ai pas pris la peine de spécifier un alias (-alias), donc ça s'est terminé comme ceci:

mykey, 2 décembre 2015, trustedCertEntry, Empreinte du certificat (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Ensuite, j'ai pu exécuter les commandes mvn comme d'habitude, pas besoin de spécifier le magasin de clés.

Luke
la source
Merci à Andy. Et à Leeland qui a republié son blog. nodsw.com/blog/leeland/2006/12/… Et à vous aussi, @Luke.
ajoshi
13

Vous pouvez utiliser l' -Dmaven.wagon.http.ssl.insecure=trueoption

dieter
la source
11

Vous pouvez importer le certificat SSL manuellement et l'ajouter simplement au fichier de clés.

Pour les utilisateurs Linux,

Syntaxe:

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

Exemple :

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

Balaji Boggaram Ramanarayan
la source
Au début, vous devez toujours enregistrer le certificat comme décrit dans la réponse d'Andy . L'extension serait donc ".cer".
sjngm
9

Ce n'est peut-être pas la meilleure solution. J'ai changé mon maven de 3.3.x à 3.2.x. Et ce problème est parti.

Senthil
la source
J'ai essayé d'installer les certificats pendant quelques heures sans succès, et cette solution a finalement fonctionné! La dernière version de maven que j'ai mise au travail était la 3.2.2.
jlars62
3.3.3 et 3.2.5 n'ont pas fonctionné pour moi, mais 3.0.5 ont fonctionné
ROMANIA_engineer
Je me suis retrouvé ici à partir d'un moteur de recherche, mais j'utilise Gradle au lieu de Maven. La mise à jour de mon ancienne version de Gradle a également résolu ces problèmes SSL étranges pour moi.
Nik Reiman le
6

J'ai en fait eu le même problème.

quand je cours

paquet propre mvn

sur mon projet maven, j'obtiens cette erreur de certificat par l'outil maven.

J'ai suivi la réponse de @Andy jusqu'au moment où j'ai téléchargé le .cer fichier

après cela, le reste de la réponse n'a pas fonctionné pour moi mais j'ai fait ce qui suit (je fonctionne sur une machine Linux Debian)

tout d'abord, exécutez:

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

par exemple dans mon cas c'est:

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

s'il vous demande le mot de passe, appuyez simplement sur Entrée.

cette commande est censée lister tous les certificats ssl acceptés par le java. lorsque j'ai exécuté cette commande, dans mon cas, j'ai obtenu 93 certificats par exemple.

Ajoutez maintenant le fichier téléchargé .cer au fichier cacerts en exécutant la commande suivante:

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

écrivez votre mot de passe sudo puis il vous demandera le mot de passe du keystore

celui par défaut est changeit

puis dites y que vous faites confiance à ce certificat.

si vous exécutez la commande

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

encore une fois, dans mon cas, j'ai eu 94 contenus des cacerts fichier

cela signifie qu'il a été ajouté avec succès.

halim
la source
2

Une solution rapide consiste à ajouter ce code dans votre 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>

Où jamais est pour éviter la recherche d'un certifié.

jcarlosp1986
la source
1
Il vaut la peine de faire défiler vers le bas dans le fil des réponses. Cela a fonctionné simplement!
argent le
1

J'obtenais la même erreur sur le certificat SSL lorsque Maven a essayé de télécharger automatiquement les modules nécessaires.
En guise de remède, j'essayais d'implémenter la réponse de Luke ci-dessus, mais j'ai constaté que le certificat DigiCert Global Root CA est déjà dans le keystore de confiance de Java.

Ce qui m'a aidé a été d'ajouter %JAVA_HOME%\binà la variable Path (j'utilise Windows). Et %JAVA_HOME%c'est un emplacement JDK, pas seulement un emplacement JRE, puisque Maven a besoin d'un JDK.
Je ne sais pas pourquoi cela a aidé, mais cela a été le cas. Je suis absolument sûr que c'est la seule chose que j'ai changée.

Gène M
la source
1

Étape 1: OBTENEZ le contenu du certificat du site Web (vous voulez l'avoir importé en tant que racine de confiance)

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

Étape 2: enregistrez le tout (y compris les lignes BEGIN CERTIFICATE et END CERTIFICATE, qui sont significatives dans ce cas) sous godaddyg2.pem et importez-le dans mon magasin de confiance via:

Étape 3: Importez le certificat dans le keystore (magasin de clés de confiance Java)

$ keytool -importcert -file ./godaddyg2.pem -keystore $JRE_LIB/lib/security/cacerts
vks
la source
1

Ce qui a fonctionné pour moi:

Configurer les <proxy>paramètres dans${MAVEN_HOME}/conf/settings.xml :

(Remarque: pour les autres, cela fonctionnait lorsqu'ils étaient configurés ${user.home}/.m2/settings.xml. S'il n'y a pas de settings.xml dans user.home, copiez-le simplement depuis conf / dans le répertoire 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>

Puis pointez pom.xmlpour télécharger à partir de 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>

Vous devrez peut-être également configurer le proxy http dans votre IDE. Pour VSCode dans settings.json:

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

Pour Win10: Démarrer / Rechercher> Paramètres du proxy réseau> Adresse de script entrez la description de l'image ici

Sources:

argent
la source
0

J'ai rencontré ce problème dans la même situation et j'ai rédigé une réponse détaillée à une question connexe sur le débordement de pile expliquant comment modifier plus facilement les cacerts du système à l'aide d'un outil GUI. Je pense que c'est un peu mieux que d'utiliser un keystore unique pour un projet spécifique ou de modifier les paramètres de maven (ce qui peut causer des problèmes plus tard).

apocalysque
la source
0

Même si je mettais les certificats dans des cacerts, j'obtenais toujours l'erreur. Tourne notre je les mettais en jre, pas en jdk / jre.

Il y a deux keystores, gardez cela à l'esprit !!!

Tudor
la source
0

Le problème que j'ai eu est plus tôt, j'utilisais jdk 1.8.0_31 avec le certificat installé. Je suis passé à jdk 1.8.0_191 mais je n'ai pas installé de certificat.

Mais, mes projets fonctionnaient bien, j'ai réalisé que leurs dépendances étaient déjà téléchargées. Ainsi, ils ne compileraient et emballeraient que ces projets. Mais cela n'a pas fonctionné pour les nouveaux projets maven car leurs dépendances n'ont pas été téléchargées plus tôt.

Solution::

  1. Basculez vers la version antérieure de jdk (qui avait déjà un certificat installé) pour votre nouveau projet et effectuez une installation propre
  2. Téléchargez à nouveau le certificat pour la nouvelle version de jdk vers laquelle vous avez récemment basculé, puis effectuez une nouvelle installation
mitesh keswani
la source
0

Après avoir créé le keystore mentionné par @Andy. Dans Eclipse, j'ai ajouté les arguments jvm et cela a fonctionné.

entrez la description de l'image ici

entrez la description de l'image ici

Tim
la source
0

J'ai eu le même problème avec SSL et maven. La politique informatique de mon entreprise me limite à apporter des modifications à la configuration des ordinateurs, j'ai donc copié tout le .m2 de mon autre ordinateur et collé le dossier .m2 et cela a fonctionné.

Le dossier .m2 se trouve généralement sous c \ user \ admin

Andain
la source
-1

Juste une autre cause: si vous ouvrez Charles, vous pourriez également rencontrer ce problème, dans ce cas, quittez simplement Charles.

zhuguowei
la source
-1

J'ai simplement utilisé la nouvelle version java et cela a fonctionné pour moi.

trousse
la source