CXF + Autenticação Mútua (Mutual Auth) [RESOLVIDO]

Estou evoluindo, penso… [risada]

Bom…
Consegui uma mensagem do tipo :

[quote]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[/quote]

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**

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

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…

[quote]<?xml version="1.0" encoding="UTF-8"?>

2
1.07
107
Servico em operacao
31
2008-08-28T15:43:15
3
[/quote]

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…

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

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

Proteus_adi, segui teus passos, juntamente com as dicas do amigo que te ajudou.
Tudo certo com a importacao dos certificados.
No meu caso que uso A3, nao posso importar a minha Pk para um JKS. Mas isso nao
importa, visto o sistema estar acessando certinho o token.

O problema que me retorna e’ 403 Forbidden.
Passou por isso? Ou alguem da lista?

Grato pela atencao.

é…
nesse caso, o passo 3 [correr pro abraço] que é o mais importante… não acontece…

Vejamos…

  1. Importar os certificados é importante…
  2. Enviar o certificado também…

O envio do seu certificado está ok?

[quote=proteus_adi]

  1. Importar os certificados é importante…
  2. Enviar o certificado também…

O envio do seu certificado está ok?[/quote]

Bem, ai a resposta fica dificil :slight_smile:
Uso um A3. Como saber se meu certificado esta sendo enviado corretamente?
Consigo acessar a site com ele normal (?wsdl, por exemplo).

Alguma dica de verificacao?

Grato pela atencao

:frowning:

O meu é A1,

e suspeito que o código abaixo é responsável pela mágica da autenticação

[code] 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”, trustStore);
System.setProperty(“javax.net.ssl.trustStorePassword”, pin);

        System.setProperty("javax.net.ssl.keyStoreType", "jks");
        System.setProperty("javax.net.ssl.keyStore", keyStore);
        System.setProperty("javax.net.ssl.keyStorePassword", pin);[/code]

onde keyStore é o caminho da minha keyStore…

Sendo assim… casos diferentes imagino…

Conta ai pagente como é que tá a parte de envio da requisição…
=]

Li em outro post que somente de um IP cadastrado os servicos podem ser acessados.
Isto confere? Se sim, deve ser este o problema de 403 Forbidden. Estou na minha software house e nao no cliente contribuinte.

Alencar

Cadastrar IPs é meio sem nexo, neh?!
Imagina um cliente com um serviço de banda larga que usa DHCP… Fudeooo pro coitado… rs**
Muito dificilmente isso é verdadeiro… [ eu sei que eu não tive que cadastrar meu IP não…]

Você deve cadastrar o seu CNPJ, isso sim…
Mas, a mensagem que aparece é mensagem de resposta de erro do serviço…
E não um 403 do HTTP…

Pra la de sem nexo!
Mas minha peleia contiua.

Baixei o validador/assinador da sefaz, pra testar um simples xml de
consulta de status e o bicho me diz q o layout nao esta certo!
Veja isso. Será que estou cego?
O validador alega nao ter informacao sobre a tag …

<?xml version="1.0" encoding="UTF-8"?> 2 43 STATUS

[code] String cabecMsg =
“<?xml version=\"1.0\" encoding=\"UTF-8\"?>” + "<cabecMsg xmlns=“http://www.portalfiscal.inf.br/nfe” " +
“versao=“1.02”>” + “1.07” +
“”;

    String consStatServ = 
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.07\" >" + 
        "<tpAmb>2</tpAmb>" + "<cUF>13</cUF>" + "<xServ>STATUS</xServ>" + 
        "</consStatServ>";[/code]

Oia o meu ai…
O consStatServ tá faltando só o xmlns…
Agora… o cabecMsg é importante também…
Ele que recebe a versão do corpo…

Opa…
Validador???

Cara…
O validador só lê leiaute 1.07, num é isso?!
Dai tem que conferir no manual 1.07 pra ver se tem alguma informação faltando ou sobrando…
e, essa coisa [ validador/assinador] não foi nada eficiente pra mim… mas, cada caso é um caso…

E tem que ver qual versão é aceita pelo servidor também…

[quote=proteus_adi]Opa…
Validador???

Cara…
O validador só lê leiaute 1.07, num é isso?!
Dai tem que conferir no manual 1.07 pra ver se tem alguma informação faltando ou sobrando…
e, essa coisa [ validador/assinador] não foi nada eficiente pra mim… mas, cada caso é um caso…

E tem que ver qual versão é aceita pelo servidor também…[/quote]

A versao do laioute atual é a PL_005a, da qual vem junto com o validador os xsd’s.
Esta versao saiu da PL_003b e entro em vigencia 01/01/2008, cfe manual.

Voce poderia mostrar um xml de solicitacao de status que vc usa?
Pode ver se esta diferente do meu?

Grato pela atencao.

Alencar

“Feliz aquele que transfere o que sabe
e aprende o que ensina” Cora Coralina

[quote=proteus_adi][code] String cabecMsg =
“<?xml version=\"1.0\" encoding=\"UTF-8\"?>” + "<cabecMsg xmlns=“http://www.portalfiscal.inf.br/nfe” " +
“versao=“1.02”>” + “1.07” +
“”;

    String consStatServ = 
        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<consStatServ xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.07\" >" + 
        "<tpAmb>2</tpAmb>" + "<cUF>13</cUF>" + "<xServ>STATUS</xServ>" + 
        "</consStatServ>";[/code]

Oia o meu ai…
O consStatServ tá faltando só o xmlns…
Agora… o cabecMsg é importante também…
Ele que recebe a versão do corpo…[/quote]

rs**
Uso esse ai…
=]

[code] String ws =
https://hnfe.fazenda.mg.gov.br/nfe/services/NfeStatusServico”;
try {
ws = APPSet.getProperty(“ws_status”);
} catch (Exception e) {
}

    try {
        return simpleRequest(ws, "nfeStatusServicoNF", 
                             new String[] { cabecMsg, consStatServ }, 
                             new String[] { "nfeCabecMsg", 
                                            "nfeDadosMsg" });
    } catch (Exception e) {
        return e.getMessage();
    }

[/code]

Onde o simpleRequest é um carinha que apenas faz as requisições

Opa. Ai valeu. Faltava o ns mesmo.

Agora me explica melho este cabecalho…
Sao dois parametros na chamada do servico?
Um xml de cabec e outro de consStaus?

Vlw

[quote]Área de Cabeçalho ? estrutura XML padrão para todas as mensagens de chamada
e retorno de resultado dos Web Services disponibilizados pelas Secretarias de
Fazenda Estaduais ou Secretaria da Receita Federal, que contém os dados de
controle da mensagem. A área de cabeçalho está sendo utilizada para armazenar a
versão do leiaute da estrutura XML informado na área de dados.
pag 21, manual de integração [/quote]

Algo assim…

[quote=proteus_adi][quote]Área de Cabeçalho ? estrutura XML padrão para todas as mensagens de chamada
e retorno de resultado dos Web Services disponibilizados pelas Secretarias de
Fazenda Estaduais ou Secretaria da Receita Federal, que contém os dados de
controle da mensagem. A área de cabeçalho está sendo utilizada para armazenar a
versão do leiaute da estrutura XML informado na área de dados.
pag 21, manual de integração [/quote]

Algo assim…[/quote]

Muito bom. Eu nao estava atento a este segundo parametro.
Estou com respostas em outro forum (Certificados Digitais - NFe) no GUJ, onde postei meu codigo.

Devo estar chamando o servico errado ou de forma errada…
O forbidden permanece :frowning:

Cara…

Seguinte…
vc é de que estado?

Abre o seu Internet Explorer e chama o endereço do WSDL…
deve ser o endereço do webservice com ?WSDL na frente…

Dai vc diz oq acontece…
=]