Estou tentando configurar meu email no Jenkins / Hudson e recebo constantemente o erro:
java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be
non-empty
Vi muitas informações on-line sobre o erro, mas não consegui trabalhar. Estou usando o JDK da Sun no Fedora Linux (não o OpenJDK).
Aqui estão algumas coisas que eu tentei. Tentei seguir os conselhos deste post , mas copiar as cacerts do Windows para minha caixa do Fedora que hospedava Jenkins não funcionou. Tentei seguir este guia enquanto tentava configurar o Gmail como meu servidor SMTP, mas também não funcionou. Também tentei baixar e mover esses arquivos cacert manualmente e movê-los para minha pasta Java usando uma variação dos comandos neste guia .
Estou aberto a sugestões, pois estou preso no momento. Consegui fazê-lo funcionar em um servidor Windows Hudson, mas estou com dificuldades no Linux.
${CATALINA_HOME}\conf
masCATALINA_HOME
não estava sendo definido, então o Tomcat estava procurando\conf
pelo armazenamento confiável.No Ubuntu 18.04 , esse erro tem uma causa diferente (JEP 229, alterne do
jks
formato padrão de keystore para opkcs12
formato e a geração de arquivos cacerts do Debian usando o padrão para novos arquivos) e solução alternativa :Status (07/08/2018) , o bug foi corrigido no Ubuntu Bionic LTS 18.04.1 e Ubuntu Cosmic 18.10.
🗹 Ubuntu 1770553: back-end [SRU] ca-certificates-java da cosmic (20180413ubuntu1)
176 Ubuntu 1769013: Por favor, mescle ca-certificate-java 20180413 (main) do Debian unstable (main)
🗹 Ubuntu 1739631: A nova instalação com o JDK 9 não pode usar o arquivo de armazenamento de chaves cacerts PKCS12 gerado
🗹 Imagem do docker-library 145: 9-jdk tem problemas de SSL
🗹 Debian 894979: ca-certificates-java: não funciona com o OpenJDK 9, os aplicativos falham com InvalidAlgorithmParameterException: o parâmetro trustAnchors deve estar vazio
🗹 JDK-8044445: JEP 229: criar keystores PKCS12 por padrão
🖺 JEP 229: criar PKCS12 por padrão
Se o problema persistir após esta solução alternativa, convém verificar se você está realmente executando a distribuição Java que acabou de corrigir.
Você pode definir as alternativas Java para 'auto' com:
Você pode verificar novamente a versão Java que está executando:
Também existem soluções alternativas, mas elas têm seus próprios efeitos colaterais, que exigirão manutenção futura extra, sem nenhum retorno.
A próxima melhor solução alternativa é adicionar a linha
para os arquivos
o que existir.
A terceira solução menos problemática é alterar o valor de
para
nos arquivos
o que existir, remova o
cacerts
arquivo e gere-o novamente da maneira descrita na última linha do script de solução alternativa na parte superior da postagem.fonte
Isso corrigiu o problema para mim no Ubuntu:
(encontrado aqui: https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1396760 )
ca-certificates-java
não é uma dependência no Oracle JDK / JRE, portanto, isso deve ser explicitamente instalado.fonte
No Ubuntu 18.04, a causa raiz é um conflito entre o openjdk-11-jdk (que é o padrão) e outros pacotes, dependendo dele. Ele já foi corrigido no Debian e será incluído no Ubuntu em breve. Enquanto isso, a solução mais simples é rebaixar seu java para a versão 8. Outras soluções empregando
ca-certificates-java
são muito mais complicadas.Primeiro remova pacotes conflitantes:
Verifique se você removeu com êxito todos os pacotes relacionados:
O sistema solicitará que não haja Java disponível para configuração , caso contrário, essa solução alternativa falhará .
Em seguida, reinstale os pacotes necessários:
fonte
openjdk-8-jdk
pacote, remover o/etc/ssl/certs/java/cacerts
arquivo e executar,sudo update-ca-certificates -f
que é a maneira indireta de alternar de umpkcs12
arquivo cacerts formatado para um arquivojks
formatado, como descrito em outras partes deste encadeamento.O EJP basicamente respondeu à pergunta (e eu sei que isso tem uma resposta aceita), mas lidei com essa pegadinha e queria imortalizar minha solução.
Eu tive o
InvalidAlgorithmParameterException
erro em um Jira hospedado servidor que eu havia configurado anteriormente para acesso somente SSL. O problema foi que eu havia configurado meu keystore no formato PKCS # 12, mas meu armazenamento confiável estava no formato JKS.No meu caso, editei meu
server.xml
arquivo para especificar o keystoreType para PKCS, mas não especifiquei o truststoreType, portanto, o padrão é o que seja o keystoreType. Especificar o truststoreType explicitamente como o JKS resolveu para mim.fonte
Corri para esta solução a partir da postagem do blog Corrigindo o problema trustAnchors ao executar o OpenJDK 7 no OS X :
Corrigindo o problema trustAnchors ao executar o OpenJDK 7 no OS X. Se você estiver executando o OpenJDK 7 no OS X e viu esta exceção:
Há uma solução simples. Basta vincular o mesmo arquivo cacerts que o JDK 1.6 da Apple usa:
Você precisa fazer isso para todas as versões do OpenJDK instaladas. Apenas mude
-v 1.7
para a versão que você deseja corrigir. Execute/usr/libexec/java_home -V
para ver todos os JREs e JDKs que você instalou.Talvez o pessoal do OpenJDK possa adicionar isso aos scripts de instalação.
fonte
security
pasta (blacklisted.certs
,local_policy.jar
eUS_export_policy.jar
) para Java para ser feliz.cacerts
sobjre
diretório?No Ubuntu 12.10 (Quantal Quetzal) ou posterior, os certificados são mantidos no pacote ca-certificates-java . O uso
-Djavax.net.ssl.trustStore=/etc/ssl/certs/java/cacerts
irá buscá-los, independentemente do JDK que você estiver usando.fonte
update-ca-certificates -f
manualmente, para preencher o arquivo cacertsCorri para esse problema exato no OS X, usando o JDK 1.7, depois de atualizar para o OS X v10.9 (Mavericks). A correção que funcionou para mim foi simplesmente reinstalar a versão Apple do Java, disponível em http://support.apple.com/kb/DL1572 .
fonte
Eu corri
para criar um arquivo de certificado e, em seguida:
Eu estava de volta aos negócios, obrigado pessoal. É uma pena que não esteja incluído na instalação, mas cheguei lá no final.
fonte
sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure**
eu recebo #sudo: /var/lib/dpkg/info/ca-certificates-java.postinst: command not found
sudo update-ca-certificates -f
é suficiente no Debian jessie comopenjdk-8-jre-headless
jessie-backports, desde queca-certificates-java
esteja instalado. Acho que a ordem da instalação é importante (o JRE depoisca-certificates-java
pode causar isso, pois o último não possui gatilhos para o Java 8 com backport).sudo /var/lib/dpkg/info/ca-certificates-java.postinst configure
sem estrelas **update-ca-certificates -f
é a coisa que consertou isso. Eu não precisava do segundo comandoO erro diz que o sistema não pode encontrar o truststore no caminho fornecido com o parâmetro
javax.net.ssl.trustStore
.No Windows, copiei o
cacerts
arquivojre/lib/security
para o diretório de instalação do Eclipse (mesmo local que oeclipse.ini
arquivo) e adicionei as seguintes configurações emeclipse.ini
:Eu tive alguns problemas com o caminho para as cacerts (a variável de ambiente% java_home% é de alguma forma substituída), então usei essa solução trivial.
A idéia é fornecer um caminho válido para o arquivo de armazenamento confiável - o ideal seria usar um caminho relativo. Você também pode usar um caminho absoluto.
Para garantir que o tipo de loja seja JKS, execute o seguinte comando:
fonte
Remover o pacote ca-certificate-java e instalá-lo novamente funcionou para mim ( Ubuntu MATE 17.10 (Artful Aardvark)).
Obrigado, jdstrand: Comentário 1 para o bug 983302, Re: ca-certificate-java falha ao instalar o Java cacerts no Oneiric Ocelot .
fonte
Eu tive muitos problemas de segurança após atualizar para o OS X v10.9 (Mavericks):
trustAnchors
parâmetro não deve estar vazioApliquei esta atualização do Java e ela corrigiu todos os meus problemas: http://support.apple.com/kb/DL1572?viewlocale=en_US
fonte
Eu esperava coisas assim, sendo que eu uso uma JVM alternativa no meu Talend Open Studio (o suporte existe no momento apenas até o JDK 1.7). Eu uso 8 para fins de segurança ... de qualquer maneira
Atualize seu armazenamento de certificados:
então
adicione um novo valor nos seus parâmetros de inicialização
Para mim, a segunda entrada funcionou. Acho que, dependendo da versão do Talend Open Studio / TEnt + JVM, ele tem um nome de parâmetro diferente, mas procura o mesmo arquivo de armazenamento de chaves.
fonte
javax.net.ssl.trustAnchors
? Não é mencionado na documentação do JSSE.Para mim, isso foi causado pela falta de uma TrustCertEntry no armazenamento confiável.
Para testar, use:
Isso me dá:
Embora meu PrivateKeyEntry contenha uma CA, ele precisa ser importado separadamente :
Ele importa o certificado e, em seguida, a nova execução
keytool -list -keystore keystore.jks
agora fornece:Agora, ele possui um confiávelCertEntry e o Tomcat será iniciado com êxito.
fonte
Alguns lançamentos de fornecedores do OpenJDK causaram isso ao ter um
cacerts
arquivo vazio distribuído com o binário. O bug é explicado aqui: https://github.com/AdoptOpenJDK/openjdk-build/issues/555Você pode copiar para
adoptOpenJdk8\jre\lib\security\cacerts
o arquivo de uma instalação antiga, comoc:\Program Files\Java\jdk1.8.0_192\jre\lib\security\cacerts
.A versão com bug do AdoptOpenJDK é https://github.com/AdoptOpenJDK/openjdk8-releases/releases/download/jdk8u172-b11/OpenJDK8_x64_Win_jdk8u172-b11.zip
fonte
Se você experimentar isso no Ubuntu com JDK9 e Maven, poderá adicionar esta opção JVM - primeiro verifique se o caminho existe:
Se o arquivo estiver ausente, tente instalar o ca-certificates-java como alguém observou:
fonte
Eu tive essa mensagem de erro no Java 9.0.1 no Linux. Isso ocorreu devido a um bug conhecido do JDK, onde o arquivo cacerts está vazio no pacote binário .tar.gz (baixado de http://jdk.java.net/9/ ).
Consulte o parágrafo "problemas conhecidos" das Notas da Versão do JDK 9.0.1 , dizendo "TLS não funciona por padrão no OpenJDK 9".
No Debian / Ubuntu (e provavelmente em outras derivadas), uma solução simples é substituir o arquivo cacerts pelo arquivo do pacote "ca-certificates-java":
No Red Hat Linux / CentOS, você pode fazer o mesmo no pacote "ca-certificates":
fonte
Eu tive esse problema ao tentar usar o Maven 3, depois de atualizar o Ubuntu 16.04 LTS (Xenial Xerus) para o Ubuntu 18.04 LTS (Bionic Beaver).
A verificação de / usr / lib / jvm / java-8-oracle / jre / lib / security mostrou que meu arquivo cacerts era um link simbólico apontando para
/etc/ssl/certs/java/cacerts
.Eu também tinha um arquivo com nome suspeito
cacerts.original
.Eu mudei o nome
cacerts.original
paracacerts
, e isso corrigiu o problema.fonte
cacerts.original
arquivo estava nojks
formato e foi gerado com o Java 8 do Ubuntu 16.04, que usava esse formato como padrão. Ocacerts
arquivo estava nopkcs12
formato, gerado pelo Java 10 do Ubuntu 18.04, que usa esse formato como padrão. Conforme explicado em outra parte deste segmento, o novo formato requer que você passe a senha ao executável. Mas desde que você gere um novojks
cacerts
arquivo vazio ou copie um antigo, o próximo processo de geração de cacerts esvaziará o arquivo existente e o recarregará com os certificados de CA do sistema de arquivos.Também encontrei isso no OS X após atualizar o OS X v10.9 (Mavericks), quando o antigo Java 6 estava sendo usado e tentei acessar uma URL HTTPS. A solução foi o inverso de Peter Kriens; Eu precisava copiar o
cacerts
espaço 1.7 para o local vinculado pela versão 1.6:fonte
No meu caso, o arquivo JKS usado no aplicativo cliente foi corrompido. Criei um novo e importei os certificados SSL do servidor de destino. Em seguida, usei o novo arquivo JKS no aplicativo cliente como um armazenamento confiável, como:
Fonte: SSL Java e armazenamento de chaves do certificado
Eu uso a ferramenta (KeyStore Explorer) para criar o novo JKS. Você pode baixá-lo neste link, KeyStore Explorer .
fonte
Você também pode encontrar esse erro após atualizar para o Spring Boot 1.4.1 (ou mais recente) porque ele traz o Tomcat 8.5.5 como parte de suas dependências.
O problema é devido à maneira como o Tomcat lida com o armazenamento confiável. Se você especificou seu local de armazenamento confiável como o mesmo que seu keystore na configuração do Spring Boot, provavelmente receberá a
trustAnchors parameter must be non-empty
mensagem ao iniciar o aplicativo.Simplesmente remova a
server.ssl.trust-store
configuração, a menos que você saiba que precisa, nesse caso, consulte os links abaixo.Os seguintes problemas contêm mais detalhes sobre o problema:
fonte
Encontrei esse problema com o SDK do Android SDK. Para mim, esta solução funcionou:
/usr/lib/jvm/java-8-oracle/jre/lib/security/
cacert
porcacert.original
O
cacert
arquivo era pequeno (22B). Eu instalei aoracle-java8-installer
partir deppa:webupd8team/java
(de acordo com este manual: https://docs.nativescript.org/start/ns-setup-linux ).fonte
Para o registro, nenhuma das respostas aqui funcionou para mim. Minha compilação Gradle começou a falhar misteriosamente com esse erro, incapaz de buscar o HEAD da central do Maven para um arquivo POM específico .
Aconteceu que eu tinha JAVA_HOME definido para minha compilação pessoal do OpenJDK, que eu havia criado para depurar um problema javac. A configuração de volta ao JDK instalado no meu sistema foi corrigida.
fonte
No Red Hat Linux, resolvi esse problema importando os certificados para
/etc/pki/java/cacerts
.fonte
Você precisa adicionar as duas linhas acima ao seu código. Não é possível encontrar o armazenamento confiável.
fonte
java -Djavax.net.ssl.trustStore=/tmp/cacerts ...
ou se você deseja defini-las globalmente para todos os programas executados com um JDK, adicione a linha aomanagement.properties
arquivo do JDK .Eu enfrentei esse problema ao executar um conjunto específico de Android para testar no Ubuntu 14.04 (Trusty Tahr). Duas coisas funcionaram para mim, como sugerido por shaheen:
fonte
Nenhuma das soluções que encontrei na Internet funcionou, mas uma versão modificada da resposta de Peter Kriens parece fazer o trabalho.
Primeiro encontre sua pasta Java executando
/usr/libexec/java_home
. Para mim foi a1.6.0.jdk
versão. Em seguida, vá para alib/security
subpasta (para mim/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/security
).Em seguida, exclua o
cacerts
arquivo se já houver um e procure um no sistema comsudo find / -name "cacerts"
. Ele encontrou vários itens para mim, nas versões do Xcode ou outros aplicativos que eu havia instalado, mas também nos/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts
quais eu escolhi.Use esse arquivo e faça um link simbólico para ele (enquanto estava dentro da pasta Java de antes)
sudo ln -fsh "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/lib/security/cacerts"
, e ele deve funcionar.Eu tenho os dois - Java do download da Apple 2017-001 ( https://support.apple.com/kb/dl1572 - presumo que sejam esses os certificados corretos) e o Oracle instalado no Mac OS X v10.12 (Sierra) .
fonte
no ubuntu 14.04 com o openjdk 11 do ppa: openjdk-r / ppa funcionou para mim:
em java.security, altere o tipo de keystore para
então:
ao verificar se funcionou, verifique se não está usando nenhum daemon com o java antigo ainda em execução (por exemplo,
--no-daemon
opção para gradle)esse bug descreve tudo bem e ajuda você a entender o que está acontecendo https://bugs.launchpad.net/ubuntu/+source/ca-certificates-java/+bug/1739631
fonte
No Ubuntu 18.04, eu precisava usar o OpenJDK 1.7 para a manutenção de um projeto antigo. Eu baixei o pacote binário. Mas quando eu executei meu script, recebi o mesmo erro.
A solução foi remover o
cacerts
arquivo do JDK baixado najre/lib/security
pasta e, em seguida, criá-lo como link simbólico para ocacerts
arquivo de sistemas em/etc/ssl/certs/java/
:sudo ln -s /etc/ssl/certs/java/cacerts /path/to/downloaded/java/jre/lib/security/cacerts
fonte
Uma pequena chance de ajudar alguém, exceto ... para quem executa o Java 8 a partir de uma imagem do Docker em um Raspberry Pi (usando CPU AMD), obtive o seguinte Dockerfile para compilar e executar com êxito para mim
fonte