Problemas usando Maven e SSL atrás de proxy


133

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 httpe o httpsacesso através do settings.xmlarquivo. 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

2
Eu o resolvi seguindo a resposta do rec para ignorar a verificação do certificado SSL.
Evin1_

Respostas:


182

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.

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

Como alternativa, você pode usar o repositório http maven simples como este

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

Entre em contato se minha solução funcionar;)

J.


2
Obrigado pela resposta rápida e precisa, funcionou para mim e provavelmente ajudará muitas pessoas que começarem a usar o maven após agosto de 2014 :-) Enquanto isso, eu descobri como fazê-lo funcionar com SSL. Vou publicá-lo como resposta abaixo para ajudar outras pessoas, mas sua resposta será a oficialmente aceita. Obrigado
Andy

Obrigado Andy;) Ambas as soluções funcionam para você? ou apenas a alternativa?
biology.info

4
Sim, eu tentei e funciona. No entanto, no primeiro bloco de código, tive que alterar os dois URLs do repositório de https para http; caso contrário, recebi a mesma mensagem de erro de antes. Além disso, para quem está tentando fazer isso, não esqueça a tag <activeProfiles>.
Andy

1
Apenas tentei com o segundo soln alternativo simples, funcionou para mim ... Obrigado.
Blue Diamond

7
A partir de 15 de janeiro de 2020, o Repositório Central não oferece mais suporte à comunicação insegura através de HTTP simples e exige que todas as solicitações ao repositório sejam criptografadas por HTTPS.
Ahmad Alkhatib 27/01

183

A resposta acima é uma boa solução de trabalho, mas veja como fazê-lo se você quiser usar o repositório SSL:

  • Use um navegador (usei o IE) para acessar https://repo.maven.apache.org/
    • Clique no ícone de cadeado e escolha "Ver certificado"
    • Vá para a guia "Detalhes" e escolha "Salvar no arquivo"
    • Escolha o tipo "Base 64 X.509 (.CER)" e salve-o em algum lugar
  • 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_OPTSvariável de ambiente para não precisar se preocupar com isso novamente. Veja mais informações sobre a MAVEN_OPTSvariável aqui :


15
Isso deve ser aceito como a resposta correta. Seu proxy ISA está inserindo um certificado intermediário que não é confiável pelo JDK.
Gordon

2
Fiz maven trabalhando através da linha de comando. Como faço para funcionar eu eclipse?
Prabodh Mhalgi

Pasta fácil de cortar para 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 16/15

Isso resolveu meu problema. Quando solicita a senha do keystore, o padrão é "changeit" se você ainda não a tiver alterado. :)
John Manko

3
Além disso, no Ubuntu, você pode executar o comando comosudo keytool -import -file ./repo.maven.apache.org.crt -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts
John Manko 08/08

23

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:

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

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

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

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:

/ etc / ssl / certs / java / cacerts

Você pode ver quais certs estão lá atualmente, executando este comando:

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

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:

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

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:

mykey, 2 de dezembro de 2015, trustCertEntry, impressão digital de certificado (SHA1): A8: 98: 5D: 3A: 65: E5: E5: C4: B2: D7: D6: 6D: 40: C6: DD: 2F: B1: 9C : 54: 36

Então eu pude executar comandos mvn normalmente, sem precisar especificar o armazenamento de chaves.


Graças ao Andy. E para Leeland, que republicou seu blog. nodsw.com/blog/leeland/2006/12/… E para você também, @Luke.
ajoshi

13

Você pode usar a -Dmaven.wagon.http.ssl.insecure=trueopção


11

Você pode importar o certificado SSL manualmente e apenas adicioná-lo ao keystore.

Para usuários do linux,

Sintaxe:

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

Exemplo:

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


No início, você ainda precisa salvar o certificado, conforme descrito na resposta de Andy . Portanto, a extensão seria ".cer".
Sjngm

9

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.


Tentei instalar o certs por algumas horas sem sorte, e esta solução finalmente funcionou! A versão mais recente do maven que eu comecei a trabalhar foi o 3.2.2.
jlars62

3.3.3 e 3.2.5 não funcionaram para mim, mas a versão 3.0.5 funcionou #
ROMANIA_engineer

Acabei aqui de um mecanismo de pesquisa, mas estou usando Gradle em vez de Maven. A atualização da minha versão mais antiga do Gradle também corrigiu esses problemas estranhos de SSL para mim.
Nik Reiman 19/02

6

Na verdade, eu tive o mesmo problema.

quando eu corro

mvn clean package

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:

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

por exemplo, no meu caso, é:

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

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:

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

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

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

mais uma vez, no meu caso, obtive 94 conteúdos do arquivo cacerts

isso significa que foi adicionado com sucesso.


2

Uma solução rápida é adicionar esse código ao seu 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>

Onde nunca é para evitar a busca de um certificado.


1
Vale a pena rolar para baixo no tópico de respostas. Isso funcionou simplesmente!
silver

1

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.



1

Etapa 1: obtenha o conteúdo do certificado do site (você deseja que ele seja importado como uma raiz confiável)

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

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)

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

1

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

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

Em seguida, aponte pom.xmlpara fazer o download no 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>

Você também pode precisar configurar o proxy http no seu IDE. Para VSCode em settings.json:

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

Para Win10: Iniciar / Pesquisa> Configurações de proxy de rede> Endereço de script insira a descrição da imagem aqui

Fontes:


0

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


0

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


0

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

  1. Alterne para a versão jdk anterior (que já tinha o certificado instalado) para o seu novo projeto e faça a instalação limpa
  2. Faça o download do certificado novamente para a nova versão do jdk para a qual você mudou recentemente e faça a instalação limpa

0

Depois de criar o keystore mencionado por @Andy. No Eclipse, adicionei o jvm args e funcionou.

insira a descrição da imagem aqui

insira a descrição da imagem aqui


0

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


-1

Apenas outra causa: se você abrir o Charles, também poderá encontrar esse problema; nesse caso, saia do Charles.


-1

Simplesmente usei a nova versão java e funcionou para mim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.