Estou iniciando um projeto de NF-e, e no momento tento consultar o status do serviço do ambiente de homologação do SEFAZ-RS.
Já instalei o .PFX no navegador, e consigo acessar o WSDL por ele.
com.sun.xml.ws.client.ClientTransportException: The server sent HTTP status code 403: Forbidden
at com.sun.xml.ws.transport.http.client.HttpClientTransport.checkResponseCode(HttpClientTransport.java:232)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:149)
at com.sun.xml.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:86)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.client.Stub.process(Stub.java:248)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:135)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:109)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:89)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:118)
at $Proxy28.nfeStatusServicoNF(Unknown Source)
at nfe.ws.WsNfe.statusServico(WsNfe.java:28)
at nfe.Main.main(Main.java:27)
Porém, o autor do post diz:
Esse arquivo .pfx que tenho é exportado. Executando o mesmo código, porém com um arquivo original, não tenho problema.
Alguém tem idéia de como proceder para o .pfx exportado?
Bom…o que nosso amigo julianomatias disse, não procede, talvez ele tenha tido outro problema.
O que vc esta fazendo não é setar o keystore, e sim o proprio PFX. Existem as duas forma de vc consumir os WS com SSL, usando da forma que vc fez, mas mudando alguns parametros ou melhor ainda passando direto o Keysote. Neste link em meu blog, http://mateusprado.com/blog/?p=12, varias pessoas do proprio GUJ ja usaram e tiveram sucesso.
Para setar o keysote em sua classe, vc pode usar da seguinte forma:
Bem, eu incluí o .pfx (exportado) no .jks que estava utilizando anteriormente, e não obtive sucesso. Realizei a configuração via código, já que ainda não estou trabalhando no servidor. O erro é o mesmo.
Porém, executei os mesmos procedimentos para o tal certificado “original”, que citei no primeiro post. Funcionou novamente!
Resumindo, o arquivo original funciona para ambos os casos, e o exportado, em nenhum.
Já estaria a ponto de dizer que há algo de errado com o exportado, mas a empresa possui um componente em Delphi que consegue utilizá-lo normalmente.
[quote=juliogalvaofilho]Mateus, obrigado pela resposta!
Bem, eu incluí o .pfx (exportado) no .jks que estava utilizando anteriormente, e não obtive sucesso. Realizei a configuração via código, já que ainda não estou trabalhando no servidor. O erro é o mesmo.
Porém, executei os mesmos procedimentos para o tal certificado “original”, que citei no primeiro post. Funcionou novamente!
Resumindo, o arquivo original funciona para ambos os casos, e o exportado, em nenhum.
Já estaria a ponto de dizer que há algo de errado com o exportado, mas a empresa possui um componente em Delphi que consegue utilizá-lo normalmente.[/quote]
juliogalvaofilho, estou com o mesmo problema que vc. Conseguiu resolver o seu?
Baixei a cadeia de certificados do site da Sefaz Virtual RS (https://nfe.sefazvirtual.rs.gov.br/). Estou “empacotando” tudo em um .jks e adicionando o certificado do cliente por últimos, e não consigo consultar status do serviço, sempre me retorna o erro 403 Forbiden.
Alguem tem alguma idéia do que pode ser?
No meu caso, tive que trabalhar manualmente sobre o certificado.
Primeiro, mandei instalar novamente no navegador, permitindo que a cadeia de certificados seja exportada; Então, mandei exportar pelo navegador, incluindo toda a cadeia. Funcionou normalmente.
Isso tá longe do ideal, sei que os clientes vão querer passar o certificado e pronto, o sistema que se vire… Mas por enquanto foi o que consegui fazer, para trabalhar mais em cima da montagem do xml da nota.
[quote=juliogalvaofilho]No meu caso, tive que trabalhar manualmente sobre o certificado.
Primeiro, mandei instalar novamente no navegador, permitindo que a cadeia de certificados seja exportada; Então, mandei exportar pelo navegador, incluindo toda a cadeia. Funcionou normalmente.
Isso tá longe do ideal, sei que os clientes vão querer passar o certificado e pronto, o sistema que se vire… Mas por enquanto foi o que consegui fazer, para trabalhar mais em cima da montagem do xml da nota.[/quote]
ta, mas o navegador exporta em crt ou cer. Vc então usa o keytool para transformar isso em .jks?
[quote=juliogalvaofilho]No meu caso, tive que trabalhar manualmente sobre o certificado.
Primeiro, mandei instalar novamente no navegador, permitindo que a cadeia de certificados seja exportada; Então, mandei exportar pelo navegador, incluindo toda a cadeia. Funcionou normalmente.
Isso tá longe do ideal, sei que os clientes vão querer passar o certificado e pronto, o sistema que se vire… Mas por enquanto foi o que consegui fazer, para trabalhar mais em cima da montagem do xml da nota.[/quote]
Outra dúvida, acho q vc pode me ajudar: pra SEFAZ VIRTUAL RS quais certificado devo anexar no keytool para poder fazer a comunicação? Já baixei a cadeia de certificado da Sefaz Virtual RS mas não funciona! Meu cliente é de SC.
Para importar no keyStore programaticamente eu uso o .pfx mesmo… exporto o certificado completo, com as cadeias, em PKCS12.
Quanto ao JKS, pra importar no trustStore, eu instalo a chave pública do SEFAZ RS (um arquivo .p7b), exporto o .cer e jogo em um .jks pelo keytool mesmo.
Mas se o teu erro é 403 creio que seja alguma coisa no cliente, conforme já vi em outros posts por aqui… Quando o problema é quanto ao certificado do servidor, você recebe uma “SSL Handshake Exception” ou algo do tipo.
Para importar no keyStore programaticamente eu uso o .pfx mesmo… exporto o certificado completo, com as cadeias, em PKCS12.
Quanto ao JKS, pra importar no trustStore, eu instalo a chave pública do SEFAZ RS (um arquivo .p7b), exporto o .cer e jogo em um .jks pelo keytool mesmo.
Mas se o teu erro é 403 creio que seja alguma coisa no cliente, conforme já vi em outros posts por aqui… Quando o problema é quanto ao certificado do servidor, você recebe uma “SSL Handshake Exception” ou algo do tipo.[/quote]
é, meu erro é um 403.7 Forbidden… pior q o cliente ta usando o mesmo certificado .pfx no emissor da Sefaz e ta transmitindo normalmente as notas.
Pois é, meu problema foi semelhante, já que o componente Delphi que a empresa testou funcionava normalmente.
Resumindo, a solução foi obter um certificado contendo toda a cadeia.
Como que eu faço para gerar um arquivo.jks?
Estou tentando assinar uma NFe usando um certificado PFX. Já consegui fazer toda a aplicação usando o token, mas não estou sabendo usar com o PFX. Os exemplos passados aqui no foram me ajudaram, mas so não estou sabendo como criar um jks.
Estou voltando ao projeto do NFe e me fizeram uma pergunta que eu não soube responder, sobre certificados digitais.
Quando eu criei o sistema eu fiz da seguinte maneira.
O keystore foi gerado da seguinte maneira, download dos certificados publicos no site do SEFAZ, instala, exporta a chave no InternetExplores e cria o keystore com o keytool.
A PERGUNTA É: todo esse trabalho do keystore é realmente necessário? Eu respondi que sim… Ai me perguntaram mas como que o software fornecido pela receita funciona e la você não precisa de nada além do certificado da empresa?
Não sei a resposta…
Alguem aqui sabe como fazer apenas com o certificado da empresa sem precisar se preocupar com o certificado publico???
O software da receita, se funciona, é porque ele tem o certificado em algum lugar, e \ ou tem a chave pública
para que é necessário o certificado “truststore” para poder autenticar as respostas dadas pela receita federal
e evitar que um hacker possa enviar respostas falsas da receita federal
queria aproveitar para fazer uma pergunta =o
eu ainda não consegui fazer a comunicação com o webservice da receita
estou desenvolvendo o meu trabalho de diplomação sobre isso
então, você poderia me mostrar, ou me falar qual é a sequência necessária para conseguir, ou qual tecnologia java eu poderia usar?
[list]Baixei a cadeia de certificados daqui: https://homologacao.nfe.sefaz.rs.gov.br/Certificado_AC_NFE.SEFAZ.RS.p7b[/list]
[list]Importei utilizando o mmc ou o internet Explorer, tanto faz[/list]
[list]Exportei cada um dos três certificados (Autoridade Certificadora do SERPRO Final v2, Autoridade Certificadora Raiz Brasileira v1 e Autoridade Certificadora SERPRO v2) respectivamente nfe01.cer, nfe02.cer e nfe03.cer utilizando a opção X.509 codificado na base 64(*.cer) [/list]
[list]keytool.exe -import -alias nfe -keystore c:\nfe\nfe.ks -file c:\nfe\nfe01.cer (nesse momento foi solicitado uma senha para o keystore)[/list]
[list]keytool.exe -import -alias nfe01 -keystore c:\nfe\nfe.ks -file c:\nfe\nfe02.cer[/list]
[list]keytool.exe -import -alias nfe02 -keystore c:\nfe\nfe.ks -file c:\nfe\nfe03.cer[/list]
Utilizo o seguinte código para a consulta status serviço:
NfeStatusServico2 service = new NfeStatusServico2();
NfeStatusServico2Soap port = service.getNfeStatusServico2Soap12();
NfeDadosMsg nfeDadosMsg = new NfeDadosMsg();
NfeCabecMsg nfeCabecMsg = new NfeCabecMsg();
nfeCabecMsg.setCUF("43");
nfeCabecMsg.setVersaoDados("2.00");
nfeDadosMsg.getContent().add(new ObjectFactory().createNfeCabecMsg(nfeCabecMsg));
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "C:\\nfe\\CERT.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:\\nfe\\nfe.ks");
NfeStatusServicoNF2Result result = port.nfeStatusServicoNF2(nfeDadosMsg);
e obtenho o erro:
Exception in thread “main” com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 403: Forbidden
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:196)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:168)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy30.nfeStatusServicoNF2(Unknown Source)
at br.com.imdt.portalfiscal.nfe.ConsultaStatus.main(ConsultaStatus.java:104)
Agora meu problema é outro, no retorno da chamada a consulta de status de serviço obtenho o seguinte
[[retConsStatServ: null]]
E pra esse eu ainda não encontrei solução, estou pensando em abandonar o AXIS…[/quote]
O Axis ja abandonei tem tempo. Estou usando o JAX-WS. Quando vc usa o Netbeans para fazer o parse do wsdl para classe, vc tem que realizar algumas modificações.
Ai fiz essas modificações, tomei uma surra violenta para assinar a diaba da nota e quando envio a mesma, tenho esse retorno de null.
Nao sei mais o que faço. Ja entreguei para Deus!!!
Não retorna erro, somente null.
[list]Baixei a cadeia de certificados daqui: https://homologacao.nfe.sefaz.rs.gov.br/Certificado_AC_NFE.SEFAZ.RS.p7b[/list]
[list]Importei utilizando o mmc ou o internet Explorer, tanto faz[/list]
[list]Exportei cada um dos três certificados (Autoridade Certificadora do SERPRO Final v2, Autoridade Certificadora Raiz Brasileira v1 e Autoridade Certificadora SERPRO v2) respectivamente nfe01.cer, nfe02.cer e nfe03.cer utilizando a opção X.509 codificado na base 64(*.cer) [/list]
[list]keytool.exe -import -alias nfe -keystore c:\nfe\nfe.ks -file c:\nfe\nfe01.cer (nesse momento foi solicitado uma senha para o keystore)[/list]
[list]keytool.exe -import -alias nfe01 -keystore c:\nfe\nfe.ks -file c:\nfe\nfe02.cer[/list]
[list]keytool.exe -import -alias nfe02 -keystore c:\nfe\nfe.ks -file c:\nfe\nfe03.cer[/list]
Utilizo o seguinte código para a consulta status serviço:
NfeStatusServico2 service = new NfeStatusServico2();
NfeStatusServico2Soap port = service.getNfeStatusServico2Soap12();
NfeDadosMsg nfeDadosMsg = new NfeDadosMsg();
NfeCabecMsg nfeCabecMsg = new NfeCabecMsg();
nfeCabecMsg.setCUF("43");
nfeCabecMsg.setVersaoDados("2.00");
nfeDadosMsg.getContent().add(new ObjectFactory().createNfeCabecMsg(nfeCabecMsg));
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "C:\\nfe\\CERT.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "123456");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "C:\\nfe\\nfe.ks");
NfeStatusServicoNF2Result result = port.nfeStatusServicoNF2(nfeDadosMsg);
e obtenho o erro:
Exception in thread “main” com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 403: Forbidden
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.checkStatusCode(HttpTransportPipe.java:196)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:168)
at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
at com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
at com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
at $Proxy30.nfeStatusServicoNF2(Unknown Source)
at br.com.imdt.portalfiscal.nfe.ConsultaStatus.main(ConsultaStatus.java:104)
Alguém pode me ajudar?
Obrigado![/quote]
Olá, desculpe voltar nesse assunto, mas como você gerou essa classe NfeStatusServico2 e NfeStatusServico2Soap? A partir de qual WSDL?
Já conseguiu resolver seu problema? Sinto não poder ajudar, ainda, mas estou na parte de verificar o status do serviço ainda.