Acabei de fazer o download do Maven e estava tentando executar o comando simples encontrado na página "Maven em cinco minutos" ( http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html ). Este é o comando:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Quando o executo, recebo um erro com o certificado SSL e não consigo fazer o download no repositório central do Maven em https://repo.maven.apache.org/maven2 . O erro é "SunCertPathBuilderException: não foi possível encontrar o caminho de certificação válido para o destino solicitado".
Estou atrás de um firewall corporativo e defini corretamente as configurações de proxy para ambos http
e o https
acesso através do settings.xml
arquivo. Duvido que todo mundo que baixa o Maven e o executa pela primeira vez precise importar o certificado SSL do repositório do Maven, portanto o problema deve estar no proxy. Alguém tem alguma experiência com isto?
Aqui está o rastreamento de pilha no modo de depuração completo (-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
Respostas:
O fato é que seu plugin maven tenta se conectar a um repositório remoto https
(por exemplo, https://repo.maven.apache.org/maven2/ )
Esta é uma nova conectividade SSL para o Maven Central foi disponibilizada em agosto de 2014!
Portanto, você pode verificar se o seu settings.xml está com a configuração correta.
Como alternativa, você pode usar o repositório http maven simples como este
Entre em contato se minha solução funcionar;)
J.
fonte
A resposta acima é uma boa solução de trabalho, mas veja como fazê-lo se você quiser usar o repositório SSL:
Agora abra um prompt de comando e digite (use seus próprios caminhos):
keytool -import -file C:\temp\mavenCert.cer -keystore C:\temp\mavenKeystore
Agora você pode executar o comando novamente com o parâmetro
-Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
No linux, use o caminho absoluto
-Djavax.net.ssl.trustStore=/tmp/mavenKeystore
caso contrário, isso vai acontecer
Como isso:
mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -Djavax.net.ssl.trustStore=C:\temp\mavenKeystore
Opcional:
Você pode usar a
MAVEN_OPTS
variável de ambiente para não precisar se preocupar com isso novamente. Veja mais informações sobre aMAVEN_OPTS
variável aqui :fonte
sudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
Atualizar
Eu apenas tropecei neste relatório de bug:
https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760
Parece ser a causa dos nossos problemas aqui. Algo com ca-certificate-java encontrando um erro e não preenchendo completamente o cacerts. Para mim, isso começou a acontecer depois da atualização para a 15.10 e esse bug provavelmente ocorreu durante esse processo.
A solução alternativa é executar o seguinte comando:
Se você verificar o conteúdo do keystore (como na minha resposta original), agora verá muito mais, incluindo a CA raiz global do DigiCert necessária.
Se você passou pelo processo na minha resposta original, pode limpar a chave que adicionamos executando este comando (assumindo que você não especificou um alias diferente):
Maven agora funcionará bem.
Resposta original
Gostaria apenas de expandir a resposta de Andy sobre como adicionar o certificado e especificar um keystore. Isso começou e, combinado com informações em outros lugares, eu consegui entender o problema e encontrar outra solução (melhor?).
A resposta de Andy especifica um novo armazenamento de chaves com o certificado Maven especificamente. Aqui, estou indo um pouco mais amplo e adicionando o certificado raiz ao armazenamento confiável java padrão. Isso me permite usar o mvn (e outras coisas em java) sem especificar um keystore.
Para referência, meu sistema operacional é o Ubuntu 15.10 com Maven 3.3.3.
Basicamente, o armazenamento confiável em java padrão nessa configuração não confia no certificado raiz do repositório Maven (DigiCert Global Root CA), portanto, ele precisa ser adicionado.
Encontrei aqui e baixei:
https://www.digicert.com/digicert-root-certificates.htm
Encontrei o local padrão do armazenamento confiável, que reside aqui:
Você pode ver quais certs estão lá atualmente, executando este comando:
Quando solicitado, a senha padrão do keystore é "changeit" (mas ninguém nunca o faz).
Na minha configuração, a impressão digital do "DigiCert Global Root CA" não existia (o DigiCert chama de "impressão digital" no link acima). Então, aqui está como adicioná-lo:
Isso deve ser solicitado se você confiar no certificado, diga sim.
Use keytool -list novamente para verificar se a chave existe. Eu não me incomodei em especificar um alias (-alias), então acabou assim:
Então eu pude executar comandos mvn normalmente, sem precisar especificar o armazenamento de chaves.
fonte
Você pode usar a
-Dmaven.wagon.http.ssl.insecure=true
opçãofonte
Você pode importar o certificado SSL manualmente e apenas adicioná-lo ao keystore.
Para usuários do linux,
Sintaxe:
Exemplo:
fonte
Esta pode não ser a melhor solução. Mudei meu maven de 3.3.x para 3.2.x. E essa questão se foi.
fonte
Na verdade, eu tive o mesmo problema.
quando eu corro
no meu projeto maven, recebo esse erro de certificado pela ferramenta maven.
Eu segui a resposta de @Andy até o ponto em que baixei o arquivo .cer
Depois disso, o restante da resposta não funcionou para mim, mas fiz o seguinte (estou executando na máquina Debian Linux)
primeiro de tudo, execute:
por exemplo, no meu caso, é:
se perguntar sobre a senha, basta pressionar enter.
esse comando deve listar todos os certificados SSL aceitos pelo java. quando executei este comando, no meu caso, obtive 93 certificados, por exemplo.
Agora adicione o arquivo baixado .cer ao arquivo cacerts executando o seguinte comando:
escreva sua senha do sudo e perguntará sobre a senha do keystore
o padrão é changeit
diga y que você confia neste certificado.
se você executar o comando
mais uma vez, no meu caso, obtive 94 conteúdos do arquivo cacerts
isso significa que foi adicionado com sucesso.
fonte
Uma solução rápida é adicionar esse código ao seu pom.xml:
Onde nunca é para evitar a busca de um certificado.
fonte
Eu estava recebendo o mesmo erro sobre o certificado SSL quando o Maven tentou fazer o download dos módulos necessários automaticamente.
Como solução, eu estava tentando implementar a resposta de Luke acima, mas descobri que o certificado de CA Raiz Global DigiCert já está no keystore confiável de Java.
O que me ajudou foi adicionar
%JAVA_HOME%\bin
à variável Path (estou executando o Windows). E%JAVA_HOME%
é um local JDK, não apenas um local JRE, pois o Maven precisa de um JDK.Não sei por que ajudou, mas ajudou. Estou absolutamente certo de que essa foi a única coisa que mudei.
fonte
Se esse problema ocorrer no repositório HTTPS , por https://repo.spring.io/milestone, você pode apenas tentar substituir por não protegido: http://repo.spring.io/milestone . E é isso
fonte
Etapa 1: obtenha o conteúdo do certificado do site (você deseja que ele seja importado como uma raiz confiável)
Etapa 2: Salve a coisa toda (incluindo as linhas BEGIN CERTIFICATE e END CERTIFICATE, que são significativas nesse caso) como godaddyg2.pem e a importei para o meu armazenamento confiável via:
Etapa 3: Importar o certificado no keystore (armazenamento de chaves confiável java)
fonte
O que funcionou para mim:
Defina as
<proxy>
configurações em${MAVEN_HOME}/conf/settings.xml
:(Nota: para outros, funcionou quando eles configuraram
${user.home}/.m2/settings.xml
. Se não houver settings.xml em user.home, basta copiá-lo de conf / no diretório maven.)Em seguida, aponte
pom.xml
para fazer o download no http maven central repo:Você também pode precisar configurar o proxy http no seu IDE. Para VSCode em
settings.json
:Para Win10: Iniciar / Pesquisa> Configurações de proxy de rede> Endereço de script
Fontes:
fonte
Encontrei esse problema na mesma situação e escrevi uma resposta detalhada para uma pergunta relacionada ao estouro de pilha, explicando como modificar mais facilmente os cacerts do sistema usando uma ferramenta GUI. Eu acho que é um pouco melhor do que usar um keystore único para um projeto específico ou modificar as configurações do maven (o que pode causar problemas no futuro).
fonte
Mesmo colocando os certificados em cacerts, ainda estava recebendo o erro. Acontece que eu estava colocando-os no jre, não no jdk / jre.
Existem duas lojas principais, lembre-se disso !!!
fonte
O problema que obtive é anterior, estava usando o jdk 1.8.0_31 com o certificado instalado. Eu mudei para o jdk 1.8.0_191, mas não instalei o certificado.
Mas, meus projetos estavam funcionando bem, percebi que suas dependências já haviam sido baixadas. Portanto, eles apenas compilariam e empacotariam esses projetos. Porém, isso não funcionou para novos projetos de maven, pois suas dependências não foram baixadas anteriormente.
Solução::
fonte
Depois de criar o keystore mencionado por @Andy. No Eclipse, adicionei o jvm args e funcionou.
fonte
Eu tive o mesmo problema com SSL e maven. A política de TI de minhas empresas me restringe a fazer alterações na configuração dos computadores, então copiei o .m2 inteiro do meu outro computador e colei a pasta .m2 e funcionou.
A pasta .m2 geralmente é encontrada em c \ user \ admin
fonte
Apenas outra causa: se você abrir o Charles, também poderá encontrar esse problema; nesse caso, saia do Charles.
fonte
Simplesmente usei a nova versão java e funcionou para mim.
fonte