Olá pessoal,
Estou com uma dúvida sobre a conexão Https no java, eu estou utilizando HttpsUrlConnection para fazer está conexão.
O certificado que eu estou utilizando é auto assinado gerado utilizando as ferramentas keytool e openSSL, o https do jboss já está funcionando eu instalei o meu certificado no browser e a comunicação funcionou normal. O problema é que na minha aplicação desktop está dando erro na hora de fazer o handshake, o erro que ocorre é o seguinte:
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
eu achei no google pessoas que tiveram o mesmo problema e resolveram inicializando o SSLContext com um trust manager vazio TrustManager[], mas está solucção não funcionou para mim.
Alguem sabe como resolver esse problema?
Instalei na jvm mas o erro persiste, mas alguem pode ajudar?
Tem um programinha que eu baixei no site da sun que da o mesmo problema, mas te da a opção de adicionar o certificado do servidor na lista de certificados verdadeiros, eu usei ele e ele adicionou, mas mesmo assim minha aplicação rodando na mesma JVM não consegue encontrar o certificado.
Alguem já passou por este problema?
[Editado]
Baixei um programa no site da sun que trabalhar com certificado SSL, é uma classe que pega o certificado do servidor e salva em um arquivo na máquina. Este programa consegue fazer o handshake do ssl sem problemas.
Usei o mesmo código no meu programa e da erro no handshake do HttpsUrlConnection, alguem sabe como resolver?
Ola pessoal!
Consegui resolver é que eu estava setando o defaultSSLSocketFactory depois de instânciar
URL page = new URL(url);
HttpsURLConnection connection = (HttpsURLConnection) page.openConnection();
conn.setDefaultSSLSocketFactory(this.getContext().getSocketFactory());
fiz assim e funcionou
URL page = new URL(url);
HttpsURLConnection.setDefaultSSLSocketFactory(this.getContext().getSocketFactory());
HttpsURLConnection connection = (HttpsURLConnection) page.openConnection();
Agora é só testar se os dados estão criptografados.