1
resposta

Erro de certificado quando executado o build do maven

Quando executo o comando mvn clean install é apresentado o erro abaixo para mim:

[ERROR] Failed to execute goal on project sicla-services-impl: Could not resolve dependencies for project com.gapso.local.system:system-services-impl:ejb:1.0.0: Failed to collect dependencies at org.jboss.ws:jbossws-jboss510:jar:3.4.0.GA -> org.jboss.metadata:jboss-metadata:jar:1.0.1.GA: Failed to read artifact descriptor for org.jboss.metadata:jboss-metadata:jar:1.0.1.GA: Could not transfer artifact org.jboss.metadata:jboss-metadata:pom:1.0.1.GA from/to Nexus-Local (https://nexus.localti.com.br/repository/maven-public/): sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]

Alguém tem uma ideia de como incluir esse certificado?

1 resposta

Só pra esclarecer outros possíveis leitores, o erro acontece porque o certificado do seu repositório Nexus não é reconhecido como válido pelo Java.

O endereço do repositório é: https://nexus.localti.com.br/repository/maven-public/

Acho que o certificado não foi gerado a partir de uma Certificadora Raiz reconhecida e, por isso, é detectado como inválido.

Você precisa mexer com os certificados do Java.


Os certificados usados pelo Java ficam no arquivo jre/lib/security/cacerts.

Na minha máquina, um Ubuntu, fica em:

/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts

É uma boa fazer um backup desse arquivo!

Para listar os certificados atuais, faça:

keytool -list -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit

A password padrão é: changeit


Você vai precisar baixar o certificado do servidor remoto para sua máquina local.

Para isso, você pode usar um navegador.

  • No Chrome, abra o endereço nexus.localti.com.br
  • Você deve ver um erro "Your connection is not private"
  • Clique no triângulo vermelho que fica à esquerda da URL.
  • Em "Certificate", clique em "Invalid".
  • Você deve abrir o "Certificate Viewer" do Chrome.
  • Vá até a aba "Details".
  • Clique no "*" e em Export...
  • Salve em um arquivo como "nexus-localti.cer" (pode deixar "Base64-encoded ASCII, single certificate" como tipo do arquivo)

Você também pode usar o comando openssl:

openssl s_client -connect nexus.localti.com.br:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > nexus-localti.cer

Agora, você precisa importar o certificado nexus-localti.cer para o Java com o seguinte comando:

 sudo keytool -import -noprompt -trustcacerts -file nexus-localti.cer -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit

Perceba que usei o sudo. O usuário precisa ser administrador da máquina (sudoer) no Linux.