Como dizer ao Maven para desconsiderar erros de SSL (e confiar em todos os certificados)?

106

Freqüentemente preciso executar o comando "mvn":

mvn -f pom.xml clean install -Dmaven.test.skip=false --settings /Users/myhome/settings.xml -X -Djavax.net.ssl.trustStore=/Users/myhome/truststore.jks -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=dummy -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -U

Como preciso me integrar com vários outros domínios, atualmente sempre preciso adicionar seu certificado ao meu truststore.jks para evitar erros de handshake de SSL.

Existe alguma maneira de configurar o mvn para ignorar erros de SSL.

Usuário iniciante
fonte

Respostas:

235

Você pode desativar a verificação de certificado SSL adicionando um ou mais destes parâmetros de linha de comando:

  • -Dmaven.wagon.http.ssl.insecure=true - permite o uso de verificação SSL relaxada para certificados gerados pelo usuário.
  • -Dmaven.wagon.http.ssl.allowall=true- permite a correspondência do certificado X.509 do servidor com o nome do host. Se desativado, um navegador como check será usado.
  • -Dmaven.wagon.http.ssl.ignore.validity.dates=true - ignora problemas com datas de certificado.

Documentação oficial: http://maven.apache.org/wagon/wagon-providers/wagon-http/

Aqui está o oneliner para um fácil copiar e colar:

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

Ajay Gautam sugeriu que você também poderia adicionar o código acima ao ~/.mavenrcarquivo para não ter que especificá-lo todas as vezes na linha de comando:

$ cat ~/.mavenrc 
MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true"
gravando
fonte
1
Eu tenho o projeto spring boot / maven e estou usando o maven-jaxb2-plugin para gerar fontes de um serviço da web. mas o certificado expirou. Então, tentei executar o maven generate sources com os agrumentos acima no Eclipse. Mas eu ainda recebo o erro "falha na verificação do carimbo de data / hora" qualquer ideia de como resolvê-lo em um ambiente eclipse / maven.
Mukun de
14
A resposta não funciona para mim. Estou usando o maven 3.5.0 e as exceções que recebi foram PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. O vagão funciona com o MAven 3.5.0?
thlim
Em vez disso, criei um armazenamento confiável jks e apontei para este arquivo jks.
thlim
3
Ao instalar o Java Cryptography Extension (JCE) Unlimited Strength (para JDK7 | para JDK8 ) corrige o problema para mim no maven 3.5.0
skadya
1
Usando o netbeans 6.8, adicionei as opções às opções do maven do netbeans em 'Opções de execução global' por meio da interface do usuário e consegui fazer o download de repositórios usando https.
Dan675 de
46

Uma alternativa que funcionou para mim é dizer ao Maven para usar http: em vez de https: ao usar o Maven Central, adicionando o seguinte ao settings.xml :

<settings>
   .
   .
   .
  <mirrors>
    <mirror>
        <id>central-no-ssl</id>
        <name>Central without ssl</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
   .
   .
   .
</settings>

Sua milhagem pode variar, é claro.

Richard Steele
fonte
2
Obrigado, funcionou! E por favor, uma nota para reverter assim que o SSL funcionar, porque isso pode levar os usuários a adicionar repositórios fora do padrão que podem hospedar sabe
lá o
3
Isso não funciona desde janeiro de 2020 porque o repositório Maven desativou a conexão http
Justin
1
Receberá este erro desde janeiro de 2020: ReasonPhrase: HTTPS necessário ", porque o repo Maven desativou a conexão Http
Justin
8

Crie uma pasta ${USER_HOME}/.mvn e coloque um arquivo chamado maven.confignela.

O conteúdo deve ser:

-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true
-Dmaven.wagon.http.ssl.ignore.validity.dates=true

Espero que isto ajude.

Nicola Ben
fonte
Consegui usar diretamente esses parâmetros na linha de comando, mas ainda falhei ao adicioná-los ao arquivo
Justin