Acessar webservice com HTTPS

Ola,

Estou acessando um webservice https. E para isso antes de fazer a chamada ao webservice chamo a seguinte linha de comando:

System.setProperty(“java.protocol.handler.pkgs”, “com.sun.net.ssl.internal.www.protocol”);
System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);
System.setProperty(“javax.net.ssl.trustStore”, “c:\certificado.keystore”);

Até ai funcionou muito bem, o problema é q hoje o certificado passou a dar o seguinte problema:

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

Para resolver precisei gerar novamente o keystore e funcionou. Aparentemente eu suponho q o problema é q o certificado antigo tenha expirado, porém não sei como fazer para ter certeza disso, o fato é q depois q eu gerei novamento o certificado ai funcionou.

Alguem poderia me ajudar a identificar o q aconteceu, para que esse problema nao se repita mais?!

Não sei se ajuda mas estou gerando o keystore com uma classe java pronta q eu peguei na internet:

Agradeço a atenção de todos.
Abs

Felipe Regalgo

Posso estar errado e falando, mas tentar explicar o que acho que aconteceu.

Primeiro você não pode acessar nenhuma url https em código java sei que você a jvm que esta URL é confiável,
para um webservice ou site funcionar com https ele tem que possuir um certificado digital é através que é criptografado
as informações.

Você JVM que a url é de confiança gerando um arquivo com as classes que postou,
em seguida você diz a JVM para utilizar o seu arquivo de url de confiança não o que vem com ela.
Com as seguintes linhas:


System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "c:\\certificado.keystore"); 

Note a propriedade: trustStore algo mais ou menos como repositório de confiança.

O certificado do servidor do webservice deve ter vencido, por isso ele deve ter trocado o mesmo.
Como no arquivo trustStore armazena o certificado usado pelo url, bastou você atualizar seu arquivo
Keystore.

Não tem como evitar que isto aconteça a não ser que o servidor tenha adotado um certificado sem validade.

Entendi.

Vou conversar com o pessoal do webservice para verificar a possibilidade de eles adotarem um certificado sem validade.

Caso isso não seja possivel como devo proceder para conseguir acessar esse webservice? Devo criar uma rotina no java para verificar com antecedencia q o certificado esta para vencer e com isso gerar novo certificado? Como isso é feito normalmente?

[]´s
Felipe Regalgo

Eu acho que certificado sem validade acho que não é possível. Peça para o servidor do webService gerar um certificado com uma validade grande.
No webService que eu fiz a validade era de 10 anos… =)

Ola,

Tem esses links aqui para ajudar quem tiver com esse problema:


[]´s