Acessoando Web Service https do Jboss 6.1 com certificado inválido

Olá pessoal depois de muitas pesquisas no google há dias , não consegui chegar a solução.

O problema é o seguinte:
Tenho uma aplicação rodando no Jboss 6.1 com o protocolo HTTPS .

Porém é usado um certificado digital inválido, criado pelo keytool.

Quando tento acessar o web service, dá um erro

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
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)

Alguém já passou por isso ? Ou conhece alguma solução ?

Olá

Provavelmente isso está acontecendo porque o lado do servidor mudou os certificados.

Para resolver esse problema, importe o certificado do servidor para uma trust store e em seguida, configure o cliente para usar essa trust store.

O seguinte comando pode ser usado para importar o certificado do servidor para uma trust store.

O local de armazenamento da trust store pode ser definido globalmente usando a opção JVM abaixo (que pode ser definido no arquivo bin/run.conf):

Também pode ser uma maneira específica para definir quais truststore o cliente deve usar dependendo do framework (Spring, Apache Axis, etc) usado ou da aplicação em si.

Bom eu aconselho você habilitar o DEBUG, como abaixo:

E executar o seguinte comando:

Essa é uma maneira simples te testar…

Espero que tenha ajudado… até mais… tá corrido hj hehe

Abraços

Olá Mauricio, obrigado por responder

Voce tem algum exemplo ou modelo que eu possa seguir, como não tenho muito conhecimento nisso, nao sei se estou no caminho certo.

Olá Albama.

O Tuelho escreveu um post interessante sobre certificados…

Acho que pode ajudar :slight_smile:

é bem simples o seu problema é só importar… leia esse post que eu acho que vc consegue resover o problema…

Se nao rolar podemos ir testando juntos :slight_smile:

Abraços

Obrigado mais uma vez Mauricio

Em relação aos certificados criei e adicionei nas configuraçoes do jboss

Segui vários artigos, mas o que está me ajudando nesse momento são esses:

Artigo1
http://adventuresofajavadeveloper.blogspot.com.br/2011/11/ejb3-web-service-over-ssl-with-jboss.html

Artigo2
http://www.cic.unb.br/~pedro/trabs/ssl_jsse.html

Com o artigo 2 consegui fazer funcionar no “dos” ( windows) , porém estou tentando colocar para o eclipse para depois ajustar para o meu web service

Porém no dos eu uso assim java -Djavax.net.ssl.trustStore=kservidor ClienteSimplesSSL localhost

Você sabe como eu faço no eclipse para executar o main com esses parametros : java -Djavax.net.ssl.trustStore=kservidor

Continuando as minhas tentativas

alguém sabe como passar esses parâmetros no eclipse para executar o main ???

Via DOS está funcionando , preciso reproduzir na ide eclipse

Tentei colocar na VM arguments do eclipse

Mas ao executar dá esse erro :

javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(Unknown Source) at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source) at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source) at sun.nio.cs.StreamEncoder.implFlushBuffer(Unknown Source) at sun.nio.cs.StreamEncoder.implFlush(Unknown Source) at sun.nio.cs.StreamEncoder.flush(Unknown Source) at java.io.OutputStreamWriter.flush(Unknown Source)

Na verdade o comando completo é esse