Resolvendo javax.net.ssl.SSLHandshakeException

Instrodução

Neste artigo vamos aprender como solucionar a seguinte Exception Java:
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

Normalmente acontece quando você precisa se comunicar com alguma aplicação web (HTTPS) através de uma aplicação Java (Web ou Desktop). Acontece no momento que a aplicação JAVA tenta se comunicar com o site usando HTTPS, e o Java gera a Exception pois não tem o certificado SSL instalado localmente na base de certificados do JRE. Portanto, para resolver essa Exception será necessário fazer o download do certificado SSL e instalá-lo na base local. (cacerts)

Este artigo foi especialmente escrito para Java 7. Caso esteja usando Java 6, provavelmente alguns comandos terão que ser diferentes. Neste caso, peço que avalie o link de referência que consta no final deste artigo.

Fazendo o Download do Certificado

O primeiro passo é fazer o download do certificado SSL do site desejado, ou seja, do site no qual deseja se conectar através do java usando HTTPS. O download do certificado pode ser feito facilmente através de um navegador. No caso, eu uso e indico o firefox. Com o Firefox aberto no site do certificado, siga as seguintes instruções:

Clique no Ícone do cadeado localizado na barra de navegação. Depois Next-Next em:

  • Mais informações
  • Exibir Certificado
  • Detalhes
  • Exportar

Após seguir o processo, salve o certificado (.crt) em um diretório local.

Instalando o certificado dentro do cacerts

O próximo passo é instalar o certificado dentro da base local de certificados do java. Normalmente localizado em: <JAVAHOME>/jre7/lib/security/cacerts

Caso esteja trabalhando no Windows, será necessário executar o cmd.exe no modo administrador, para dar continuidade neste processo.

Abra o terminal de linha de comando e execute:

keytool –importcert –trustcacerts –alias <apelido> -file <caminho para o certificado .crt> -keystore <caminho para o cacerts> -storepass changeit

Observações

  • O comando keytool é distribuído junto com o pacote JRE
  • <apelido>: Nome qualquer para identificar o certificado a ser instalado na base
  • <caminho para o certificado .crt>: Caminho onde foi salvo o certificado (Ver 1 passo)
  • -keystore <caminho para o cacerts>: Localizado em <JAVAHOME>/jre7/lib/security/cacerts
  • <-storepass changeit>: “changeit” é a senha padrão para manipulação da base de certificados java (cacerts)

Após a execução e confirmação do comando anterior, o certificado estará instalado na base local de certificados do Java. Neste momento, teoricamente, você já resolveu o Exception citado no início deste artigo. Caso houver ainda algum problema relacionado, por favor, sinta-se livre para comentar.

Referências


http://stackoverflow.com/questions/9619030/resolving-javax-net-ssl-sslhandshakeexception-sun-security-validator-validatore

Please follow and like us:

Comments

    • mm By Douglas V. Pasqua

Follow

Get every new post on this blog delivered to your Inbox.

Join other followers: