CXF + Autenticação Mútua (Mutual Auth) [RESOLVIDO]  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Boa tarde,

Estou tentando utilizar o CXF para acessar um Web Service que está configurado para utilizar Autenticação mútua.
Mas não entendo o porque ele não está conseguindo capturar meu certificado.

Segue o fonte abaixo:


Gerou o seguinte erro:


Alguém saberia me dizer o que eu fiz de errado?

Ats,
Endrigo Antonini

This message was edited 2 times. Last update was at 12/08/2008 09:38:10


Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Bom, continuei pesquisando e encontrei meu problema.
Meu fonte estava correto o que eu estava precisando era registrar o certificado do servidor no Java. Lembre-se no Java, não basta apenas cadastrar o certificado no SO, isso fará com que os navegadores WEB não reclamem em relação a ele, mas a cadeia certificadora precisa ser cadastrada no Java.

Abaixo o link do passo a passo para fazer esse cadastramento.
http://blogs.sun.com/andreas/entry/no_more_unable_to_find

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
Luca
Moderador
[Avatar]

Membro desde: 06/09/2002 14:30:10
Mensagens: 5810
Localização: São Paulo/SP ou Paraty/RJ
Offline

Olá

Legal que colocou a solução aqui.

Obrigado

[]s
Luca

Dare Obasanjo (Program Manager at Microsoft)
"The folks I know from across the industry who have to build large scale Web services on the Web today at Google, Yahoo!, Facebook, Windows Live, Amazon, etc are using RESTful Web services. The only times I encounter someone with good things to say about WS-* is if it is their job to pimp these technologies or they have already "invested" in WS-* and want to defend that investment."


CEP, JMS, JMX e coisas afins (ou não)
http://lucabastos.blogspot.com/
[Email] [WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

E será que alguem já fez isso ai pra me falar como se faz?

Eu vi o exemplo, mas, tá em english e é pra chapeu-vermelho...

Eu importei o certificado que exportei da lista de certificados... Um da "VeriSign, Inc.", mas, ainda não tive exito...
Fiquei com o mesmo erro. [único detalhe é que não uso CFX]

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

proteus_adi, Qual a sua dúvida? Como "cadastrar" os certificados no Java?
Ou como fazer a conexão SSL Mutual Auth

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

Bem,
Hoje creio que meu problema seja ssl com autenticação mútua...

O erro :
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: 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
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace: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
aparece de maneira similar à sua antes...

Eu registrei o meu certificado no keyStore e tambem um certificado da "VeriSign, Inc" que exportei do keyStore do windows.

Detalhe é que eu NÃO uso cxf [ e nem consegui usar ].
O código é esse http://www.guj.com.br/posts/list/101258.java descrito no final;

Aceito qualquer ajuda ou oração...

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Bom,

Pelo que eu to vendo é o seguinte.. você esta tendo problema com o SSL mutual (essa foi fácil, você falou.. rss) e não conseguiu seguir os passos do site que passei.

Então vamos ver se consigo te ajudar.

Copie o fonte da URL: http://blogs.sun.com/andreas/resource/InstallCert.java

e execute da seguinte forma:

exemplo:


Fazendo isso ele irá gerar um arquivo JKS em algum diretório (seria legal mexer no fonte pra ver onde ele está criando) com toda a cadeia certificadora desse domínio.

Outra coisa interessante a se fazer e ir no site da Sun e baixar o JCE Unlimeted, isso irá ajudar bastante.

Avisa ae se conseguiu.

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Outra coisa que acabei de lembrar, é bom você adicionar a cadeia certificadora do teu certificado dentro de teu JKS. Agora não lembro direito como faz isso, mas da pra "Googlar" isso e é bem provavel que você encontre.

Isso é necessário porque o certificado que você está usando é gerado "abaixo" do ICP Brasil, certo? mas no meio existem outras entidades envolvidas.

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

Auauaa,,,

Boum...
Eu não sei se tou lá no meu dia de sorte...
Pra rodar eu precisei mudar o "InputStream in = new FileInputStream(file);" pra um "FileInputStream in = new FileInputStream(file);" [Parte do InstallCert]

E fiz a chamada...


E a resposta...
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
aparece pra assustar... rs**

Dai ele me mostrou uma lista de 4 certificados...
Por via das dúvidas... botei logo os 4...

Dai, ele salvou...

Mudei as linhas de properties pra

E tive uma resposta nova:
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.SocketException: Default SSL context init failed: PKIX not found
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.SocketException: Default SSL context init failed: PKIX not found


E agora?! PKIX é o certificado deles, correto? O meu está em JKS, certo? [incluí no keystore.jks via keytool]
Será que tou enviando o certificado errado?
Algum parâmetro adicional?

This message was edited 1 time. Last update was at 28/08/2008 13:30:48


"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Tá.. vamos detalhar um pouco mais então....

Instalou o JCE Unlimited?

Você vai rodar esse fonte ali.. Coloque apenas o domínio para rodar.. e não a URL toda... ele irá gerar uma mensagem de output dizendo os certificados que está importando.
No seu fonte de SSL, não mude nada, continue referenciado para seu jks que contem seu certificado digital e sua chave pública. se mesmo assim dar erro, é necessário você procurar no Google dae como se faz para importar para o JKS a "Cadeia Certificadora", isso quer dizer, você comprou o certificado de uma entidade, que esta registrada em outra que está em outra e asssim por diante. Essa informação também é muito necessária para que o Servidor da outra ponta veja seu certificado e diga que ele é válido.

Outra coisa, seu certificado foi gerado por uma AC (Autoridade Certificadora) válida? ou é um gerado através de programas? Lembre-se que para aceitarem seu certificado ele deve ter sido gerado por uma AC cadastrada no ICP Brasil, caso contrário você não tem como garantir que seu certificado é válido.

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

Estou evoluindo, penso... [risada]

Bom...
Consegui uma mensagem do tipo :
faultString: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure



Acho que isso quer dizer que o servidor recusou meu certificado, confere?
Seria isso mesmo?

Eu tenho um certificado bonitão. A1 da Caixa "AC CertSign" 'num sei das quanta'.
Boum...
Eu exportei meu certificado do repositório do windows no formato pfx, e no formato cer; [Um com a particular outra sem].
Eu consigo usar a pfx pra assinaturas, mas, não consegui importa-la via keytool. Dai importei a cer.

Que guerra...
=],,,

São essas emoções que fazem com que nosso trabalho nunca caia na rotina...
rs**

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Hehehehe... verdade.. e bota emossão...

Cara.. existe uma ferramenta chamada Portecle que gera um único JKS contendo a chave pública e privada.

Quanto ao erro, se eu não me engano ele recusou seu certificado, porque deu erro no processo de handshake que é o processo da "troca de certificados" na conexão SSL Mutual Auth.

E em relação ao JCE? conseguiu instalar?

Vou ver se lembro aqui como fiz para colocar a minha cadeia certificadora dentro do JKS.

O que uso é assim: tenho um JKS que tem minha chave pública, chave privada, e certificados da minha cadeia certificadora. Com todas essas informações consigo ter acesso a Sefaz sem problemas algum.

Tenta esses passos:
Baixa aquela feramenta:
- Cria um novo JKS
- Importa os certificados (Publico e Privado)
- Altera aquele fonte que te passei, para gerar a cadeia certificadora dentro desse teu JKS.

Tenta isso e me diz se deu certo, se eu não me engano foi assim que fiz... faz tanto tempo que não lembro.

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

Nossa Senhora APARECIDA abençoa esse moleque e o google...

Minha chave importada apartir de um cer tava dando erro mesmo...

Baixei o aplicativo : http://yellowcat1.free.fr/keytool_iui.html e, seguindo sua dica, gerei uma nova keystore...

<?xml version="1.0" encoding="UTF-8"?>
<retConsStatServ versao="1.07" xmlns="http://www.portalfiscal.inf.br/nfe">
<tpAmb>2</tpAmb>
<verAplic>1.07</verAplic>
<cStat>107</cStat>
<xMotivo>Servico em operacao</xMotivo>
<cUF>31</cUF>
<dhRecbto>2008-08-28T15:43:15</dhRecbto>
<tMed>3</tMed>
</retConsStatServ>


Aleluia Aleluia...


---------------------------
Repassando os passos pra quem não tiver afim de ler tanta coisa
1) Rodar o InstallCert e importar os certificados do servidor [da receita estadual, no meu caso] : trustStore;
2) Recriar a keystore com o aplicativo acima : keyStore
3) Correr pro abraço...

hehehe

Agora começa a etapa Delphi do meu projeto, penso... ou não, né,
Agora que consegui colocar a keyStore no repositório, acho que vou mudar a parte da assinatura pra pegar da keystore... pra ficar bonitinho... padronizado...

Obrigado pela ajuda com os certificados...

NFe parte 2, A missão...

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
antonini
Debugger

Membro desde: 12/02/2007 15:05:44
Mensagens: 68
Localização: Joinville SC
Offline

Hehehehehe...

De nada cara... já me bati muitoo com essa coisa de Assinatura Digital e SSL com Autenticação Mútual por causa do projeto NF-e...

Mas me responde uma coisa por curiosidade... parte Delphi? Como assim? Seu ERP é em Delphi?

Ats,
Endrigo Antonini

Endrigo Antonini
Sun Certified Java Programmer (SCJP) 5.0

http://www.endrigoantonini.com.br/
[WWW]
proteus_adi
JavaGuru
[Avatar]

Membro desde: 24/11/2004 10:05:10
Mensagens: 237
Localização: Belo Horizonte -
Offline

Sim...

Um sistema ENORME [ como todo ERP costuma ser] e pesado feito um elefante... Em delphi com modificações até no VCL do delphi. N Camadas dom DCom...

Dai, simplesmente agente precisa da tal NFe, e, o danadinho do delphi num faz essas coisas com facilidade...
Não que seja facil fazer em Java, claro... Mas é um ambiente feito pra isso...

Projetos Desktop são TODOS Delphi... Web são oracle[webtool kit] ou java;

JNI, pensei na hora...
Menor impacto na arquitetura desse elefante...
Menos problemas a tratar...

Bom...
Essa foi minha aposta...

abs
Wellingthon Araújo

"Remember Yesterday and think about tomorrow... but you have to live today"

Existe vitória e existe derrota.
O segundo lugar é o primeiro dos que perderam.
[Email] [MSN]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team