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

6 respostas
A

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 ?

6 Respostas

J

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

A

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.

J

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

A

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

A

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)

A

Na verdade o comando completo é esse

Criado 11 de julho de 2012
Ultima resposta 13 de jul. de 2012
Respostas 6
Participantes 2