Eu tenho um cliente Java tentando acessar um servidor com um certificado autoassinado.
Quando tento postar no servidor, recebo o seguinte erro:
incapaz de encontrar o caminho de certificação válido para o destino solicitado
Depois de fazer algumas pesquisas sobre o assunto, fiz o seguinte.
- Salvei o nome de domínio dos meus servidores como um
root.cer
arquivo. - No JRE do meu servidor Glassfish, executei o seguinte:
keytool -import -alias example -keystore cacerts -file root.cer
- Para verificar se o certificado foi adicionado ao meu cacert com êxito, fiz o seguinte:
keytool -list -v -keystore cacerts
Posso ver que o certificado está presente. - Reiniciei o Glassfish e aposentei o 'post'.
Ainda estou recebendo o mesmo erro.
Sinto que isso ocorre porque meu Glassfish não está realmente lendo o arquivo cacert que eu alterei, mas talvez outro.
Algum de vocês já teve esse problema e pode me levar na direção certa?
Respostas:
Infelizmente - pode haver muitas coisas - e muitos servidores de aplicativos e outros 'invólucros' de java tendem a brincar com propriedades e com sua própria 'visão' de chaveiros e o que não. Portanto, pode estar olhando algo totalmente diferente.
Com falta de treliça - eu tentaria:
para ver se isso ajuda. Em vez de 'all', também é possível configurá-lo como 'ssl', gerenciador de chaves e gerenciador de confiança - o que pode ajudar no seu caso. Configurá-lo para 'ajuda' listará algo como abaixo na maioria das plataformas.
Independentemente disso - certifique-se de entender completamente a diferença entre o keystore (no qual você possui a chave privada e o certificado com os quais você comprova sua própria identidade) e o armazenamento confiável (que determina em quem você confia) - e o fato de que sua própria identidade também tem uma 'cadeia' de confiança na raiz - que é separada de qualquer cadeia em uma raiz, você precisa descobrir 'em quem' você confia.
Fonte: # Consulte http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug
fonte
Aqui está a solução, siga o link abaixo passo a passo:
http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/
ARQUIVO JAVA: que está faltando no blog
fonte
public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0];}
Você precisa configurar as Propriedades do sistema JSSE, apontar especificamente para o armazenamento de certificados do cliente.
Via linha de comando:
ou via código Java:
Para mais informações, consulte os detalhes no site RedHat .
fonte
(repost da minha outra resposta )
Use o utilitário cli keytool da distribuição de software java para importar (e confiar! ) os certificados necessários
Amostra:
De cli altere dir para jre \ bin
Verifique o keystore (arquivo encontrado no diretório jre \ bin)
keytool -list -keystore .. \ lib \ security \ cacerts A
senha foi alterada
Faça o download e salve todos os certificados em cadeia do servidor necessário.
Adicione certificados (antes de precisar remover o atributo "somente leitura" no arquivo ".. \ lib \ security \ cacerts"), execute: keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore .. \ lib \ security \ cacerts -file "r: \ root.crt "
acidentalmente encontrei uma dica tão simples. Outras soluções requerem o uso de InstallCert.Java e JDK
fonte: http://www.java-samples.com/showtutorial.php?tutorialid=210
fonte
Eu tive o mesmo problema com o sbt .
Ele tentou buscar dependências do repo1.maven.org pelo ssl,
mas disse que "não conseguiu encontrar o caminho de certificação válido para o URL de destino solicitado".
então segui esta postagem e ainda não consegui verificar uma conexão.
Então, li sobre o assunto e descobri que o
certificado raiz não é suficiente, como sugerido pela publicação, então - o que funcionou para mim foi importar os certificados CA intermediários para o keystore .
Na verdade, adicionei todos os certificados da cadeia e funcionou como um encanto.
fonte
Solução ao migrar do JDK 8 para o JDK 10
certs
JDK 10
JDK 8
Etapas para corrigir
jlink
como/opt/jdk/bin/jlink \ --module-path /opt/jdk/jmods...
Então, aqui estão os diferentes caminhos e a sequência dos comandos ...
fonte
Estou trabalhando em um tutorial para serviços web REST em www.udemy.com (Java Web Services REST). O exemplo no tutorial dizia que, para ter SSL, precisamos ter uma pasta chamada "trust_store" no projeto eclipse "client" que deve conter um arquivo "key store" (tivemos um projeto "client" para chamar o serviço e projeto "service" que continha o serviço da web REST - 2 projetos no mesmo espaço de trabalho do eclipse, um no cliente e outro no serviço). Para simplificar, eles disseram para copiar "keystore.jks" do servidor de aplicativos glassfish (glassfish \ domínios \ domínio1 \ config \ keystore.jks) que estamos usando e colocá-lo nesta pasta "trust_store" que eles me pediram para criar o projeto do cliente. Isso parece fazer sentido: os certificados autoassinados no servidor ' s key_store corresponderia aos certificados no cliente trust_store. Agora, ao fazer isso, estava recebendo o erro mencionado na postagem original. Pesquisei isso no Google e li que o erro ocorre devido ao arquivo "keystore.jks" no cliente que não contém um certificado confiável / assinado, que o certificado encontrado é autoassinado.
Para manter as coisas claras, deixe-me dizer que, como eu o entendo, o "keystore.jks" contém certificados autoassinados e o arquivo "cacerts.jks" contém certificados de autoridade de certificação (assinados pela autoridade de certificação). O "keystore.jks" é o "keystore" e o "cacerts.jks" é o "armazenamento confiável". Como "Bruno", um comentarista, diz acima, "keystore.jks" é local e "cacerts.jks" é para clientes remotos.
Então, eu disse a mim mesmo: ei, o glassfish também tem o arquivo "cacerts.jks", que é o arquivo trust_store do glassfish. O cacerts.jsk deve conter certificados de CA. E, aparentemente, eu preciso da minha pasta trust_store para conter um arquivo de armazenamento de chaves que tenha pelo menos um certificado de CA. Portanto, tentei colocar o arquivo "cacerts.jks" na pasta "trust_store" que eu havia criado, no meu projeto do cliente, e alterar as propriedades da VM para apontar para "cacerts.jks" em vez de "keystore.jks". Isso se livrou do erro. Acho que tudo o que precisava era de um certificado da CA para funcionar.
Isso pode não ser ideal para produção, ou mesmo para desenvolvimento, além de apenas conseguir algo para funcionar. Por exemplo, você provavelmente poderia usar o comando "keytool" para adicionar certificados da CA ao arquivo "keystore.jks" no cliente. Mas, de qualquer forma, espero que isso pelo menos restrinja os possíveis cenários que poderiam estar acontecendo aqui para causar o erro.
TAMBÉM: minha abordagem parecia útil para o cliente (certificado de servidor adicionado ao cliente trust_store), parece que os comentários acima para resolver a postagem original são úteis para o servidor (certificado de cliente adicionado ao servidor trust_store). Felicidades.
Configuração do projeto Eclipse:
--- cacerts.jks --- keystore.jks
Snippet do arquivo MyClientProject.java:
fonte
Meu problema foi que um NetSkope, um Agente de Segurança para Acesso à Nuvem, foi instalado no meu laptop de trabalho por meio de uma atualização de software. Isso estava alterando a cadeia de certificados e eu ainda não consegui me conectar ao servidor através do meu cliente java depois de importar toda a cadeia para o meu keystore cacerts. Desativei o NetSkope e consegui me conectar com sucesso.
fonte
No meu caso, eu estava enfrentando o problema porque, no meu processo de tomcat, o keystore específico foi fornecido usando
Onde eu estava importando o certificado para o cacert de JRE / lib / security e as mudanças não estavam refletindo. Então eu fiz abaixo do comando onde /tmp/cert1.test contém o certificado do servidor de destino
Podemos verificar se a importação do certificado foi bem-sucedida
e veja se o seu servidor de taget é encontrado no apelido rapidssl-myserver
fonte
Verifique se o arquivo
$JAVA_HOME/lib/security/cacerts
existe! No meu caso, não era um arquivo, mas um link para/etc/ssl/certs/java/cacerts
e também era um link para si mesmo (O QUE ???), portanto, devido a isso, a JVM não pode encontrar o arquivo.Solução: Copie o arquivo cacerts real ( você pode fazê-lo de outro JDK ) no
/etc/ssl/certs/java/
diretório e ele resolverá o seu problema :)fonte
rm -f /opt/jdk-minimal/jre/lib/security/cacerts ; ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts
Digamos que você esteja usando variáveis de caminho de classe como $ {JAVA_HOME} no pom.xml.
Nos objetivos, adicione as variáveis do caminho de classe. ou seja, -DANT_HOME, -DJAVA_HOME
fonte