Certificados Digitais - NFe

115 respostas
J

Olá pessoal, estou implementando um módulo da Nota Fiscal Eletronica e tenho uma dúvida quanto ao acesso ao web service da receita federal.

  1. Como eu faço para aceitar o certificado digital da receita? Isso é no tomcat, no código da aplicação ou no sistema operacional?
  2. Como enviar o meu certificado digital para o web service da receita? É só configurar no tomcat?
    Existe algum tutorial? Não encontrei nada específico do certificado do cliente. Neste exato momento ainda não tenho o certificado, então ainda não tentei fazer a conexão.
    Valeu!

115 Respostas

J

Seguinte. Obtive o certificado digital válido para acessar a nota fiscal eletronica, mas o mesmo se encontra em um dispositivo eToken. Consegui assinar o xml com a chave do certificado. O problema é enviar o certificado para o servidor da receita validar o certificado do cliente (o meu). Coloquei isso no arquivo server.xml do tomcat:

Criei um web service cliente usando axis1 e o wizard do eclipse. Porém na hora de acessar o service da receita dá o seguinte erro:

AxisFault

faultCode: {<a href="http://schemas.xmlsoap.org/soap/envelope/">http://schemas.xmlsoap.org/soap/envelope/</a>}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:

{<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}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

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)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at projeto.com.br.nFEletronica.wsCliente.nfRecepcao.NfeRecepcaoSoapStub.nfeRecepcaoLote(NfeRecepcaoSoapStub.java:110)

at projeto.com.br.nFEletronica.ClienteWSTest.axis1ws(ClienteWSTest.java:23)

at projeto.com.br.servico.NFEService.getNotaFE(NFEService.java:138)

at projeto.com.br.servico.ProdutoNotaPedidoService.saveNotaFiscalEletronica(ProdutoNotaPedidoService.java:512)

at projeto.com.br.servico.ProdutoNotaPedidoService.save(ProdutoNotaPedidoService.java:521)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:353)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:201)

at projeto.com.br.servico.ProdutoNotaPedidoService$$FastClassByCGLIB$$916e9efe.invoke(<generated>)

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)

at projeto.com.br.servico.ProdutoNotaPedidoService$$EnhancerByCGLIB$$a8f31151.faturarPedido(<generated>)

at projeto.com.br.beans.distribuidor.financeiro.FaturamentoPedidoBean.faturarIntervalo(FaturamentoPedidoBean.java:154)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)

at javax.faces.component.UICommand.broadcast(UICommand.java:325)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Unknown Source)

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.validator.PKIXValidator.doBuild(Unknown Source)

at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)

at sun.security.validator.Validator.validate(Unknown Source)

at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)

at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(Unknown Source)

… 71 more

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)

at java.security.cert.CertPathBuilder.build(Unknown Source)

… 76 more
{http://xml.apache.org/axis/}hostname:JULIANO
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 org.apache.axis.AxisFault.makeFault(AxisFault.java:101)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:154)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at projeto.com.br.nFEletronica.wsCliente.nfRecepcao.NfeRecepcaoSoapStub.nfeRecepcaoLote(NfeRecepcaoSoapStub.java:110)

at projeto.com.br.nFEletronica.ClienteWSTest.axis1ws(ClienteWSTest.java:23)

at projeto.com.br.servico.NFEService.getNotaFE(NFEService.java:138)

at projeto.com.br.servico.ProdutoNotaPedidoService.saveNotaFiscalEletronica(ProdutoNotaPedidoService.java:512)

at projeto.com.br.servico.ProdutoNotaPedidoService.save(ProdutoNotaPedidoService.java:521)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:353)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:201)

at projeto.com.br.servico.ProdutoNotaPedidoService$$FastClassByCGLIB$$916e9efe.invoke()

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)

at projeto.com.br.servico.ProdutoNotaPedidoService$$EnhancerByCGLIB$$a8f31151.faturarPedido()

at projeto.com.br.beans.distribuidor.financeiro.FaturamentoPedidoBean.faturarIntervalo(FaturamentoPedidoBean.java:154)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)

at javax.faces.component.UICommand.broadcast(UICommand.java:325)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Unknown Source)

Caused by: 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)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)

at org.apache.axis.components.net.JSSESocketFactory.create(JSSESocketFactory.java:186)

at org.apache.axis.transport.http.HTTPSender.getSocket(HTTPSender.java:191)

at org.apache.axis.transport.http.HTTPSender.writeToSocket(HTTPSender.java:404)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:138)

 59 more

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.validator.PKIXValidator.doBuild(Unknown Source)

at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)

at sun.security.validator.Validator.validate(Unknown Source)

at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)

at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(Unknown Source)

 71 more

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)

at java.security.cert.CertPathBuilder.build(Unknown Source)

 76 more

Parece que o tomcat não está encontrando o caminho do certificado. Estranho que na hora de assinar o xml eu consigo acessar o dispositivo, mas tb eu especifico o local do arquivo de configuração. No caso do tomcat eu adicionei a linha security.provider.7=sun.security.pkcs11.SunPKCS11 /token.cfg no arquivo java.security e no token.config eu tenho name = eToken
library = C:\WINDOWS\system32\eTpkcs11.dll.
Alguem tem uma idéia do que pode ser esse problema?

O

Este erro dá porque o certificado do Web Service é auto-assinado, ou você não tem o certificado root que assinou este certificado.
Veja o tópico abaixo como configurar um trustStore com o certificado do servidor:
http://www.guj.com.br/posts/list/15/71969.java

J

valeu pela dica oyama. Consegui resolver o problema anterior. adicionei o certificado da receita na lista de certificados confiaveis do java. Fiz o que dizia nessa página: http://blogs.sun.com/andreas/entry/no_more_unable_to_find, parece que funcionou. Tive que mexer um pouco na classe dele.
Mas agora apareceu um outro erro. Pelo visto ele não encontrou o certificado que está dentro do dispositivo eToken. O erro é o seguinte:

AxisFault

faultCode: {<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}HTTP

faultSubcode:

faultString: (403)Forbidden

faultActor:

faultNode:

faultDetail:

{}:return code:  403

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a href="http://www.w3.org/TR/html4/strict.dtd">http://www.w3.org/TR/html4/strict.dtd</a>">

<HTML><HEAD><TITLE>The page requires a client certificate</TITLE>

<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">

<STYLE type="text/css">

BODY { font: 8pt/12pt verdana }

H1 { font: 13pt/15pt verdana }

H2 { font: 8pt/12pt verdana }

A:link { color: red }

A:visited { color: maroon }

</STYLE>

</HEAD><BODY><TABLE width=500 border=0 cellspacing=10><TR><TD>
<h1>The page requires a client certificate</h1>

The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server will recognize. The client certificate is used for identifying you as a valid user of the resource.

<hr>

<p>Please try the following:</p>

<ul>

<li>Contact the Web site administrator if you believe you should be able to view this directory or page without a client certificate, or to obtain a client certificate.</li>

<li>If you already have a client certificate, use your Web browser’s security features to ensure that your client certificate is installed properly. (Some Web browsers refer

to client certificates as browser or personal certificates.)</li>

</ul>

<h2>HTTP Error 403.7 - Forbidden: SSL client certificate is required.<br>Internet Information Services (IIS)</h2>

<hr>

<p>Technical Information (for support personnel)</p>

<ul>

<li>Go to <a href=“<a href="http://go.microsoft.com/fwlink/?linkid=8180">http://go.microsoft.com/fwlink/?linkid=8180</a>”>Microsoft Product Support Services</a> and perform a title search for the words <b>HTTP</b> and <b>403</b>.</li>

<li>Open <b>IIS Help</b>, which is accessible in IIS Manager (inetmgr),

and search for topics titled <b>About Certificates</b>, <b>Using Certificate Trust Lists</b>, <b>Enabling Client Certificates</b>, and <b>About Custom Error Messages</b>.</li>

</ul>

</TD></TR></TABLE></BODY></HTML>

{http://xml.apache.org/axis/}HttpErrorCode:403
(403)Forbidden

at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at projeto.com.br.nFEletronica.wsCliente.NfeRecepcaoSoapStub.nfeRecepcaoLote(NfeRecepcaoSoapStub.java:140)

at projeto.com.br.nFEletronica.ClienteWSTest.axis1ws(ClienteWSTest.java:26)

at projeto.com.br.servico.NFEService.getNotaFE(NFEService.java:138)

at projeto.com.br.servico.ProdutoNotaPedidoService.saveNotaFiscalEletronica(ProdutoNotaPedidoService.java:512)

at projeto.com.br.servico.ProdutoNotaPedidoService.save(ProdutoNotaPedidoService.java:521)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:353)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:201)

at projeto.com.br.servico.ProdutoNotaPedidoService$$FastClassByCGLIB$$916e9efe.invoke()

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)

at projeto.com.br.servico.ProdutoNotaPedidoService$$EnhancerByCGLIB$$e20d9c45.faturarPedido()

at projeto.com.br.beans.distribuidor.financeiro.FaturamentoPedidoBean.faturarIntervalo(FaturamentoPedidoBean.java:154)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)

at javax.faces.component.UICommand.broadcast(UICommand.java:325)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Unknown Source)

org.springframework.orm.hibernate3.HibernateTemplate@1bea611

org.springframework.orm.hibernate3.HibernateTemplate@1cf5ee4

18:30:45,750 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id5: -[telefone removido]

18:30:45,750 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id6: -[telefone removido]

18:30:45,812 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id33: -[telefone removido]

18:30:48,312 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid loginForm:_id0: -[telefone removido]

Logim bean

projeto.com.br.servico.exception.PessoaException

at projeto.com.br.servico.PessoaService.getPessoaLogin(PessoaService.java:309)

at projeto.com.br.servico.PessoaService$$FastClassByCGLIB$$2eead599.invoke()

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)

at projeto.com.br.servico.PessoaService$$EnhancerByCGLIB$$96870620.getPessoaLogin()

at projeto.com.br.servico.LoginDistribuidorService.getPessoaLogin(LoginDistribuidorService.java:29)

at projeto.com.br.beans.distribuidor.login.LoginDistribuidorBean.actionLogar(LoginDistribuidorBean.java:35)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)

at Util.filter.CommomFilter.processAction(CommomFilter.java:52)

at javax.faces.component.UICommand.broadcast(UICommand.java:332)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Unknown Source)

18:30:52,203 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid loginForm:_id0: -[telefone removido]

org.springframework.orm.hibernate3.HibernateTemplate@1bea611

org.springframework.orm.hibernate3.HibernateTemplate@1cf5ee4

18:30:57,328 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid fmr:_id4: -[telefone removido]

18:30:57,343 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid fmr:_id5: -[telefone removido]

18:30:57,359 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid fmr:_id58: -[telefone removido]

org.springframework.orm.hibernate3.HibernateTemplate@1bea611

org.springframework.orm.hibernate3.HibernateTemplate@1cf5ee4

18:31:14,859 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id5: -[telefone removido]

18:31:14,859 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id6: -[telefone removido]

18:31:14,906 ERROR HtmlGridRendererBase:85 - Wrong columns attribute for PanelGrid _id4:_id33: -[telefone removido]

AxisFault

faultCode: {<a href="http://xml.apache.org/axis/">http://xml.apache.org/axis/</a>}HTTP

faultSubcode:

faultString: (403)Forbidden

faultActor:

faultNode:

faultDetail:

{}:return code:  403

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a href="http://www.w3.org/TR/html4/strict.dtd">http://www.w3.org/TR/html4/strict.dtd</a>">

<HTML><HEAD><TITLE>The page requires a client certificate</TITLE>

<META HTTP-EQUIV="Content-Type" Content="text/html; charset=Windows-1252">

<STYLE type="text/css">

BODY { font: 8pt/12pt verdana }

H1 { font: 13pt/15pt verdana }

H2 { font: 8pt/12pt verdana }

A:link { color: red }

A:visited { color: maroon }

</STYLE>

</HEAD><BODY><TABLE width=500 border=0 cellspacing=10><TR><TD>
<h1>The page requires a client certificate</h1>

The page you are attempting to access requires your browser to have a Secure Sockets Layer (SSL) client certificate that the Web server will recognize. The client certificate is used for identifying you as a valid user of the resource.

<hr>

<p>Please try the following:</p>

<ul>

<li>Contact the Web site administrator if you believe you should be able to view this directory or page without a client certificate, or to obtain a client certificate.</li>

<li>If you already have a client certificate, use your Web browser’s security features to ensure that your client certificate is installed properly. (Some Web browsers refer

to client certificates as browser or personal certificates.)</li>

</ul>

<h2>HTTP Error 403.7 - Forbidden: SSL client certificate is required.<br>Internet Information Services (IIS)</h2>

<hr>

<p>Technical Information (for support personnel)</p>

<ul>

<li>Go to <a href=“<a href="http://go.microsoft.com/fwlink/?linkid=8180">http://go.microsoft.com/fwlink/?linkid=8180</a>”>Microsoft Product Support Services</a> and perform a title search for the words <b>HTTP</b> and <b>403</b>.</li>

<li>Open <b>IIS Help</b>, which is accessible in IIS Manager (inetmgr),

and search for topics titled <b>About Certificates</b>, <b>Using Certificate Trust Lists</b>, <b>Enabling Client Certificates</b>, and <b>About Custom Error Messages</b>.</li>

</ul>

</TD></TR></TABLE></BODY></HTML>

{http://xml.apache.org/axis/}HttpErrorCode:403
(403)Forbidden

at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:744)

at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:144)

at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)

at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)

at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)

at org.apache.axis.client.AxisClient.invoke(AxisClient.java:165)

at org.apache.axis.client.Call.invokeEngine(Call.java:2784)

at org.apache.axis.client.Call.invoke(Call.java:2767)

at org.apache.axis.client.Call.invoke(Call.java:2443)

at org.apache.axis.client.Call.invoke(Call.java:2366)

at org.apache.axis.client.Call.invoke(Call.java:1812)

at projeto.com.br.nFEletronica.wsCliente.NfeRecepcaoSoapStub.nfeRecepcaoLote(NfeRecepcaoSoapStub.java:140)

at projeto.com.br.nFEletronica.ClienteWSTest.axis1ws(ClienteWSTest.java:26)

at projeto.com.br.servico.NFEService.getNotaFE(NFEService.java:138)

at projeto.com.br.servico.ProdutoNotaPedidoService.saveNotaFiscalEletronica(ProdutoNotaPedidoService.java:512)

at projeto.com.br.servico.ProdutoNotaPedidoService.save(ProdutoNotaPedidoService.java:521)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:353)

at projeto.com.br.servico.ProdutoNotaPedidoService.faturarPedido(ProdutoNotaPedidoService.java:201)

at projeto.com.br.servico.ProdutoNotaPedidoService$$FastClassByCGLIB$$916e9efe.invoke()

at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)

at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:694)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)

at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)

at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)

at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:629)

at projeto.com.br.servico.ProdutoNotaPedidoService$$EnhancerByCGLIB$$e20d9c45.faturarPedido()

at projeto.com.br.beans.distribuidor.financeiro.FaturamentoPedidoBean.faturarIntervalo(FaturamentoPedidoBean.java:154)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)

at javax.faces.component.UICommand.broadcast(UICommand.java:325)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:180)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:158)

at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:329)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)

at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)

at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:96)

at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:220)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)

at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)

at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)

at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)

at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)

at java.lang.Thread.run(Unknown Source)

Como informei anteriormente configuei o ssl do tomcat na seguinte forma:

adicionei a seguinte linha no arquivo java.security:

security.provider.7=sun.security.pkcs11.SunPKCS11 /token.cfg

e no token.cfg eu tenho:

name = eToken
library = C:\WINDOWS\system32\eTpkcs11.dll.

O que há de errado com a configuração? Devo configurar o meu certificado no tomcat ou no código da aplicação? Alguem já trabalhou com certificados PKCS11 em dispositivos eToken? ou algo parecido?

T

Alguém tinha comentado que o certificado foi emitido errado (sem o bit “Client”) e por isso não tinha conseguido se conectar ao site https que requer Client Certificates.

J

O programa do eToken informa que o certificado é do tipo de autenticação de cliente e de autenticação de e-mail. tentei pegar o certificado pelo alias, mas tb não funcionou. Eu consigo pegar o certificado X509 e a chave do eToken no códio Java. Tem como colocar o certificado ou a chave na requisição por código?

J

Recebi outro certificado PKCS11 de uma outra empresa e está dando o mesmo problema. Agora mudei para axis2 e aparece o erro 403 forbiden. O pior é que ele está acessando o certificado na hora de chamar o service da receita. Comprovei isso passando um alias errado pra configuração do certificado no tomcat. Ele informou que o alias estava errado. Coloquei o alias certo e ele não reclamou. E e luz do eToken pisca na hora. Ou ele não está enviando o certificado na requisição ou o certificado é inválido. Comentaram que poderia ser que o bit “Client” estaria desativado, como faço pra verificar isso? No programa do eToken tem a declaração: Certificate Usage: Autenticação de cliente, Email seguro. Só que está em portugues mesmo.
Só mais uma duvida: na hora de chamar o service eu estou mandando duas strings vazias para o cabeçalo e pra nfe. Esse erro de 403 não seria pq ele estaria tentando validar a assinatura do xml? Não tentei colocar o xml certo pq achei que é um problema de acesso ao serviço e ia colocar as informações certas depois.
Alguem já passou por um problema parecido?

J

Boa tarde.
Estou tendo dificuldades para eviar um certificado digital para um web service da nota fiscal eletronica. Criei o web service cliente usando o axis2. Gostaria de saber como eu faço o envio de um certificado PKCS11 para um web service. Tentei setar o certificado da seguinte forma:

System.setProperty(“javax.net.ssl.keyStoreType”, “PKCS11”);

System.setProperty(“javax.net.ssl.keyStore”, “NONE”);

System.setProperty(“javax.net.ssl.keyStorePassword”, “safeweb”);

System.setProperty(“javax.net.ssl.keyStoreProvider”, “SunPKCS11-eToken”);

Não funcionou. retorna um HTML com o erro 403.7, certificado cliente requerido. Tb tentei colocar antes esse código:

System.setProperty(“java.protocol.handler.pkgs”, “com.sun,net.ssl.internal.www.protocol”);
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

Tb não funcionou. Tb estou tentando enviar o keystore de um outro certificado que tenho armazenado na máquina. Tb não funcionou. O erro é sempre o mesmo: retorna um HTML com o erro 403.7, certificado cliente requerido. Será que o certificado não é de cliente ou simplesmente não está sendo enviado? Se fosse erro no certificado acho que iria ser retornado um xml com o código do erro e não um html. Tenho 3 certificados aqui, sendo dois A3 e um A1, e nenhum funciona. Alguem pode me dar uma luz?

V

Boa noite

Para quem quiser saber, Juliano e eu conseguimos estabelecer a conexão no server.

O erro foi na hora de extrair o certificado no Internet Explorer, tem que escolher a opção “Sim, exportar a chave particular”, depois escolhemos “Troca de imformações pessoais PKCS n 12(*.pfx)” selecione “Ativar proteção de alta segurança”.
Na classe que chamamos o serviço:

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","caminho\\certificado.extensao_que_exportou");
	System.setProperty("javax.net.ssl.keyStorePassword", "Senha_do_certificado");

	System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	System.setProperty("javax.net.ssl.trustStore",	"caminho\\certificados_do_server");

Qualquer dúvida entrar em contato teremos prazer em ajudar(GRATUITAMENTE, SEM QUERER VENDER CONSUTORIA), pois não desejo que ninguem passe o que passamos para descobir esse detalhe.
[email removido], msn - [email removido]

Aqui todos se ajudam.

M

Parabéns!!! Vcs estão ajudando varios desenvolvedores… Agora lendo essas dicas, comecei a achar a luz no fim do tunel. Valeu…

J

Olá Pessoal
bom, como todos desse tópico estou com o processo de nota fiscal eletrônica.
O Michel Valentin me ajudou muito, e pediu que postasse aqui as soluções que eu encontrasse
pois já havia ajudado diversas pessoas e empresas, sem cobrar nada, pedindo apenas que postassem aqui as soluções
e como podemos ver ninguém retribuiu, então vamos lá a algumas considerações.

CERTIFICADO DIGITAL CLIENTE. Se você está tentando transmitir, e está recebendo uma msg com o código 403.7 no corpo da resposta então o problema é o certificado cliente. Se você está na máquina que solicitou o certificado pela internet sem problemas, mas se não você deve ter recebido do seu cliente um disquete com um certificado .pfx e este deve ser instalado no seu IE. Na sua aplicação, ao apontar o KeyStore, indique diretamente o arquivo do disquete, não instale e exporte que não dará certo.
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
  System.setProperty("javax.net.ssl.keyStore","caminho\\certificado.extensao_que_exportou"); //Este deve ser o arquivo .pfx original
  System.setProperty("javax.net.ssl.keyStorePassword", "Senha_do_certificado");

CERTIFICADO DO SERVIDOR.

Se está dando uma exceção parecida com :
faultDetail: 
	{http://xml.apache.org/axis/}stackTrace:javax.net.ssl.SSLHandshakeException
ou 

at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
então seu problema é com certeza o certificado do servidor. Se seu caso for para o RS, fique tranquilo, no site da SEFA do RS tem muita informação útil No meu caso, estou implementando para o PR, e tive dificuldades em conseguir qual era a unidade certificadora mas depois de conversar com uma pessoa da Celepar (Pa...), que teve a boa vontade de me atender fiquei sabendo que é a "CertSign", e os certificados necessários são: 1 - ICP-Brasil 2 - CertiSign Multipla 3 - CertiSign Multipla V3 e podem ser encontrados no site http://www.iti.gov.br/twiki/bin/view/Certificacao/RepositoriodaACRaiz Esses certificados devem ser instalados, e depois de instalados deve ser "empacotados" com o keytool esse arquivo empacotado, gerado pelo keytool será informado no seguinte código.
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
  System.setProperty("javax.net.ssl.trustStore", "caminho\\arquivo_gerado_pelo_keytool");

Bom gente, espero ter ajudado, e caso tenham alguma dúvida podem entrar em contato
pelo email julianomatias.grupos @ gmail.com
com o assunto NOTA FISCAL ELETRONICA
terei o maior prazer em ajudar, assim como fui ajudado pelo Michel.
e quem tiver soluções, poste por favor, ajude também.

[]´s

Juliano Matias

J
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
 System.setProperty("javax.net.ssl.trustStore", "caminho\\arquivo_gerado_pelo_keytool");
developermaster

Cara, como que faz pra empacotar os certificados no keytool???

V

Bom dia

Cara também não sabia direito, li um tópico de um castelhano e consegui resolver todas minhas dúvidas.
Ai o site: http://www.programacion.net/java/tutorial/apachesoap/3/

igor.montezano
keytool -import -alias nfe -keystore <caminho_para_o_keystore> -file <caminho_completo_para_o_cert>

Assim o KeyTool vai importar o teu certificado para dentro do keystore que tu acaba de criar. Ele vai pedir uma nova senha para o novo keystore.

O caminho para o KeyStore vai ser usado no segundo trecho de código passado pelo julianomatias.

System.setProperty("javax.net.ssl.trustStore", "caminho\\arquivo_gerado_pelo_keytool");
developermaster

Se eu entendi certo, esse keystore já deve existir previamente, certo? Só que o certificado que possuo não gerei ele pelo keytool, peguei de uma Entidade certificadora, com o formato .p12…

igor.montezano

Cara… se ele não existir, o keytool vai criar. Te pedindo uma nova senha para este NOVO keystore.

Se ele já existir, vai te pedir a senha dele, para poder importar o certificado para dentro dele.

Nunca usei para este tipo de certificado. Neste caso específico, foi para o ACCertiSignMultipla_2004.crt disponível no site do ITI o qual o link está no post do juliano.

developermaster

Então, resumindo, pra ver se eu entendi:

  • Eu tenho que pegar o meu certificado, no formato p12, e setar o keystoretype;
  • Eu tenho que pegar o certificado do servidor, no formato .crt, ou .cer, que estiver no link do ITI e exportar prum arquivo .keystore.

É isso, resumidamente?

igor.montezano

Não cara…

tu só vai usar o KeyTool para o certificado do server. Como eu te demostrei.
E apontar para o keystore via java.

O teu certificado tu vai apontar direto para ele via java.

Exatamente como foi explicado pelo julianomatias no post dele nesta mesma thread do fórum.

R

Bom dia a todos,

Estou tentando comunicar com o Web Service  NFE, estou tentando inicialmente verificar o status do serviço, alguem já conseguiu fazer este processo ?

 Vou descrever as etapas que eu utilizei, talvez esteja fazendo alguma coisa errada:

1º Instalei o “NF-e CERTIFICADO.pfx”, abri o IE e exportei o “(x) X.509 Binário codificado DER (*.cer)”
2º Gerei o .jks usando o código: “keytool -import -alias nfe -keystore nfe.jks -file c:\cer_nfe.cer”
3º Importei o wsdl “nfeStatusServicoNF.wsdl” no eclipse, onde foi gerado todas as classes do wsdl.
4º No metodo main() criei o código abaixo:

public class StatusNFE {

public static void main(String[] args) {
	// TODO Auto-generated method stub

	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", "a:\\NF-e CERTIFICADO.pfx"); // Arquivo Original
	System.setProperty("javax.net.ssl.keyStorePassword", "xxxx");

	System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	System.setProperty("javax.net.ssl.trustStore","c:\\nfe.jks");

	System.out.println("Verificado status...");

	NfeStatusServico_Service hService = new NfeStatusServico_ServiceLocator();
	System.out.println("Criou hService");
	try {
		NfeStatusServico_PortType port = hService.getNfeStatusServico();
		System.out.println("Criou port");
		try {
			System.out.println(port.nfeStatusServicoNF("1.02", "STATUS"));
			System.out.println("verificou status");
		} catch (RemoteException e) {
			System.out.println("-------------------------------------");
			System.out.println(e.getMessage());
			System.out.println("-------------------------------------");
			e.printStackTrace();
		}

	} catch (ServiceException e1) {
		e1.printStackTrace();
	}
}

}

Ao rodar o código acima, sempre esta retornando a mensagem de erro abaixo:

; nested exception is:
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

Alguem já passou por este problema, será que estou fazendo algum processo errado na geração do .jks ???

me ajudem por favor ??

igor.montezano

Cara…

isso me acontece quando ele não consegue encontrar os arquivos de certificado e JKS… dá uma revisada se está tudo certo.
Pra ter certeza… pode tentar criar um new File(path) para ver se tu não recebe um FileNotFoundException.

No mais… tá tudo igual o meu código que está funcionando.

R

Igor, acho que acabei de conseguir resolver o problema, entrei no site do ICP-Brasil e baixei o https://www.icpbrasil.gov.br/CertificadoACRaiz.crt e gerei meu .jks com o comando: “keytool -import -alias nfe -keystore nfe1.jks -file c:\CertificadoACRaiz.cer” ai agora a aplicação abaixo esta retornando a mensagem:

Verificado status…
Criou hService
Criou port

<?xml version="1.0" encoding="UTF-8"?> 242 Rejeicao: Cabecalho - Falha no Schema XML verificou status

vc já teve problema com esse tipo de mensagem de cabeçalho ??

Programa:
public class StatusNFE {

public static void main(String[] args) {
	// TODO Auto-generated method stub

	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:\\NF-e CERTIFICADO.pfx"); // Arquivo Original
	System.setProperty("javax.net.ssl.keyStorePassword", "xxxx");

	System.setProperty("javax.net.ssl.trustStoreType", "JKS");
	System.setProperty("javax.net.ssl.trustStore","c:\\nfe1.jks");

	System.out.println("Verificado status...");

	NfeStatusServico_Service hService = new NfeStatusServico_ServiceLocator();
	System.out.println("Criou hService");
	try {
		NfeStatusServico_PortType port = hService.getNfeStatusServico();
		System.out.println("Criou port");
		try {
			System.out.println(port.nfeStatusServicoNF("1.2", "STATUS"));
			System.out.println("verificou status");
		} catch (RemoteException e) {
			System.out.println("-------------------------------------");
			System.out.println(e.getMessage());
			System.out.println("-------------------------------------");
			e.printStackTrace();
		}

	} catch (ServiceException e1) {
		e1.printStackTrace();
	}
}

}

igor.montezano

Cara… ele está reclamando que tu mandou parâmetros errados, fora dos padrões estabelecidos… isto é, não é um XML formatado segundo o manual.

Dá uma olhada no Manual item 4.6.1
http://www.nfe.fazenda.gov.br/portal/docs/Manual_de_Integracao_Contribuinte_versao_204_2007_12_26.pdf

R

Igor, como vc esta fazendo p/ gerar o XML para consulta do status do serviço ? vc está gerando eles via código usando DOM ?

R

Boa tarde a todos,

 consegui efetuar a conexão com o Web Service da NFe e verificar o status do serviço, agora estou tentando assinar um XML mas não estou conseguindo, alguem  conseguiu assinar o XML da NFe ?, como funciona a parte do certificado ? achei um código no forum [url]http://www.guj.com.br/posts/list/83758.java[/url] mas nele tem uma codificação que não estou entendendo, a mesma esta abaixo:
String configName = “/token.cfg”;

Provider p = new sun.security.pkcs11.SunPKCS11(configName);

Security.addProvider§;

char[] pin = { ‘s’, ‘a’, ‘f’, ‘e’, ‘w’, ‘e’, ‘b’ };
No meu código de conexão com o web-server não tem nada de PKCS11, segue abaixo o código:

[b]

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”, verConf.getPathKeyPFX());

System.setProperty(“javax.net.ssl.keyStorePassword”, “xxxx”);
System.setProperty(“javax.net.ssl.trustStoreType”, “JKS”);

System.setProperty(“javax.net.ssl.trustStore”,verConf.getPathKeyJKS());

[/b]
V

Sr. reinaldoaraujo

Esse codigo que você viu neste topico que mostrou é de meu colega juliano, exatamente da forma que conseguimos assinar o xml.
Hj este metodo esta assinando os xml dos clientes que temos em todo o pais. Todos os estados.

Da uma validada no teu certificado se vc esta com a chave privada do certificado caso contrario ira dar erro de assinatura.

Sds

R

Pessoal,

Importei o WSDL de status de serviço do estado de Minas Gerais por exemplo no Netbeans, agora estou com uma dúvida como alterar o [b]wsdl:address[/b] para outro estado uma vez que nele  tem um valor fixo por exemplo: "https://nfe.fazenda.mg.gov.br/nfe/services/NfeConsulta", gostaria de mudar este valor em tempo de execução, alguem  passou por este tipo de problema e possa por favor me dar uma ajuda ?

Obrigado.

nandobgi

Primeiramente gostaria de parabenizar o pessoal que está ajudando toda a comunidade com a maior boa vontade.
Eu estou tentando fazer alguns testes de conexão com o WebService de MT, estou um pouco perdido na verdade.
Estou tentando me comunicar utilizando o exemplo dos amigos.

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:/vale.pfx"); 
		 System.setProperty("javax.net.ssl.keyStorePassword", "xxx");

		 System.setProperty("javax.net.ssl.trustStoreType", "JKS");
		 System.setProperty("javax.net.ssl.trustStore","C:/nfe.jks");

		 System.out.println("Verificado status...");
		 
		NfeStatusServicoNF servico = new NfeStatusServicoNF();
		
		servico.setNfeCabecMsg("");
		servico.setNfeDadosMsg("");
		
		NfeStatusServicoNFResponse response;
		NfeStatusServicoStub stub = new NfeStatusServicoStub();
		response = stub.nfeStatusServicoNF(servico);
		System.out.println(response.getNfeStatusServicoNFResult());

Recebo a seguinte mensagem

Exception in thread "main" org.apache.axis2.AxisFault: Connection reset by peer: connect
	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
	at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
	at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:364)
	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:208)
	at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:448)
	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401)
	at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
	at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
	at br.com.sensatta.ws.NfeStatusServicoStub.nfeStatusServicoNF(NfeStatusServicoStub.java:183)
	at br.com.sensatta.util.StatusNFE.main(StatusNFE.java:37)

Alguém poderia me ajudar por favor.

[ ]'s

R

nandobgi, vc esta usando qual IDE, Eclipse ou Netbeans ? não sei se é esse o problema, mas as minhas declarações de comunicação estão um pouco diferente.

fiz testes nas duas IDEs, e as declarações é um pouco diferente:

Eclipse:

NfeStatusServico_Service hService = new NfeStatusServico_ServiceLocator();

NfeStatusServico_PortType port = hService.getNfeStatusServico();

String retConsStatServ = port.nfeStatusServicoNF(XML de Cabeçalho, XML de Consulta Status);
Netbeans:

NfeStatusServico_Service srv = new NfeStatusServico_Service();

NfeStatusServico srvSend = srv.getNfeStatusServico();

String retConsStatServ = srvSend.nfeStatusServicoNF(XML de Cabeçalho, XML de Consulta Status);
nandobgi

reinaldoaraujo de que Estado é o WebService que você esta consumindo?
Será que pode haver diferenças nos métodos conforme o Estado?

Valeu

R

Estado de Minas, ainda não testei em outros estados, não tenho certeza se pode ter diferença.

developermaster

Esse erro, connection reset by peer, significa que ele nao achou o web service ou vc estava desconectado da internet.

farzac

Pessoal

Preciso desenvolver um sistema de nota fiscal eeltronica para substituir o sitema que a empresa alugou, porem eu tenho um prazo de 5 meses para desenvolver este sistema para substituir o outro sistema.

Por onde devo começar, alguem pode me dar uma luz?

jluizsc

nandobgi:
Primeiramente gostaria de parabenizar o pessoal que está ajudando toda a comunidade com a maior boa vontade.
Eu estou tentando fazer alguns testes de conexão com o WebService de MT, estou um pouco perdido na verdade.
Estou tentando me comunicar utilizando o exemplo dos amigos.

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:/vale.pfx"); 
		 System.setProperty("javax.net.ssl.keyStorePassword", "xxx");

		 System.setProperty("javax.net.ssl.trustStoreType", "JKS");
		 System.setProperty("javax.net.ssl.trustStore","C:/nfe.jks");

		 System.out.println("Verificado status...");
		 
		NfeStatusServicoNF servico = new NfeStatusServicoNF();
		
		servico.setNfeCabecMsg("");
		servico.setNfeDadosMsg("");
		
		NfeStatusServicoNFResponse response;
		NfeStatusServicoStub stub = new NfeStatusServicoStub();
		response = stub.nfeStatusServicoNF(servico);
		System.out.println(response.getNfeStatusServicoNFResult());

Recebo a seguinte mensagem

Exception in thread "main" org.apache.axis2.AxisFault: Connection reset by peer: connect
	at org.apache.axis2.AxisFault.makeFault(AxisFault.java:430)
	at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:193)
	at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:364)
	at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:208)
	at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:448)
	at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:401)
	at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:228)
	at org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
	at br.com.sensatta.ws.NfeStatusServicoStub.nfeStatusServicoNF(NfeStatusServicoStub.java:183)
	at br.com.sensatta.util.StatusNFE.main(StatusNFE.java:37)

Alguém poderia me ajudar por favor.

[ ]'s

vc esta usando JAXB?
usei e nao gerou esse “NfeStatusServicoStub”

sabem se posso usar JAXB para consumir servicos de NFE?

Valeu

GRÁTIS é POUCO: http://www.gratisepouco.com.br

mateusprado

o certificado deve ser passado como Argumento na hora de rodar a classe ou direto no tom cat, no arquivo catalina.sh(.bat)

T

Estou vendo op pessoal falar em exportar a chave privada e tal… Mas e se a chave privada não for passível de exportação??? Alguém ja teve que lidar com isso??? Comsegui acessar o leitor de smartCard via API, porém preciso configurar um interceptor do CXF para trabalhar com pkcs#11… Alguém conseguiu?

[]´s

mateusprado

Uma pergunta antes de responder a sua, qual modelo de certificado vc esta usando ? A1, A3 ?

L

Boa tarde a todos,

Gostaria de saber como vcs fizeram para criar a classe: NfeStatusServico_Service.

muito obrigado.

T

SmartCard = A3!
pkcs#11 = A3

certo?

T

A pergunta é… Como algo tão utilizado e tão mal documentado como o WSS4J trabalha com A3 em pkcs11?

philler

No meu caso, que uso A3, nao habilita o Exportar a chave particular e nem o padrao PKCS n 12(*.pfx).

Estou tendo problemas de conexao com o ws da Sefaz, 403 Forbidden.
Exportei o certificado para um JKS e configurei o prg como vc comentou, mas nao conecta.
Seria o certificado desapropriado para conexao ssl?

Grato

Alencar
P.S.: Pensei em enviar email direto, mas creio ser mais instrutivo ficar em lugar publico.

T

Isso é pq vc não precisa colocar o certificado exportado em um JKS e nem precisa exportá-lo. Para usar o A3 vc precisa acessar o dispositivo leitor do smartcard e o tipo é PKCS#11. para tanto vc precisará da DLL do driver da leitora.

philler

Ola, agradeco pela atencao.
Sim, conheco o uso do A3. Tenho instalado o drive correto e ja o uso para assinar os xml.

Meu problema esta na conexao ssl mutua, onde me retorna 403 Forbidden.
Por isso estou testando com o certificado exportado em JKS, o que tambem facilitaria para
o cliente que quisesse só acessar (buscar retorno, etc…). Nestes casos nao precisaria do
token espetado.

Mas enfim. O problema é de conexao ssl… Se tiver alguma dica, agradeco muitissimo.

T

não, vc não pode fazer isso, a meu ver… No caso da conexão SSl depende muito de qual framework vc está utilizando como stack de ws… qual é?

philler

Por partes: exportar o certificado é possivel sim. O que nao pode exportar de A3 é a PK.

Uso axis (org.apache.axis).
Me codigo de chamada (System.out.println somente para meu teste)

private String chamaWebService() throws Exception {
	String result = null;
	URL endpoint = new URL(this.url);
	String nomeMetodo = extraiNomeMetodo(this.metodo); System.out.println(nomeMetodo);
	String nomeArgumento = extraiNomeArgumento(this.metodo); System.out.println(nomeArgumento);
	StringBuilder cabec = new StringBuilder();
	cabec.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
	cabec.append("<cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.02\">" );
	cabec.append("<versaoDados>"+this.layoutDados+"</versaoDados>");
	cabec.append("</cabecMsg>");  System.out.println(cabec.toString());
	
	try {
		org.apache.axis.client.Service servico = new Service();
		org.apache.axis.client.Call chamada = (Call) servico.createCall();
		
		chamada.setTargetEndpointAddress(endpoint); 			
		chamada.setOperationName(new QName(this.ns, nomeMetodo));
		chamada.addParameter("nfeCabecMsg", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		chamada.addParameter(nomeArgumento, org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		chamada.setReturnType(org.apache.axis.Constants.XSD_STRING);
		
		result = (String) chamada.invoke( new Object[] {cabec.toString(), this.xml} );
	} catch (Exception e) {
		result = "ERRO:" + e.getMessage();
	}
	
	return result;
}
T

Oq falei é que não é possível extrair do A3

philler

Sim, amigo. Entendi. E te respondi que é possivel sim extrair de A3 o
certificado.
Só nao consegue extrair a chave privada.

Creio que a chave publica tb seja possivel exportar de A3.

T

não, a chave privada não é exportável… (VIAJEI quando liseu post…) A pública é exportável sim…

proteus_adi

String configName = "/token.cfg"; Provider p = new sun.security.pkcs11.SunPKCS11(configName); Security.addProvider(p); char[] pin = { 's', 'a', 'f', 'e', 'w', 'e', 'b' };

tá faltando algo desse tipo…
[eu pelo menos num vi]

http://www.guj.com.br/posts/list/83758.java

philler

proteus_adi:
String configName = "/token.cfg"; Provider p = new sun.security.pkcs11.SunPKCS11(configName); Security.addProvider(p); char[] pin = { 's', 'a', 'f', 'e', 'w', 'e', 'b' };

tá faltando algo desse tipo…
[eu pelo menos num vi]

http://www.guj.com.br/posts/list/83758.java

Pessoal, beleza. Pesquisando num forum da Sun (http://forums.sun.com/thread.jspa?threadID=5265597)
consegui resolver o problema de conexao.
La explica direitnho como proceder para uso de A3 (PKCS11).

Bem, vamos adiante: a resposta agora nao é mais 403 Forbidden (ufa).
Eia a nova: ERRO:Server did not recognize the value of HTTP Header SOAPAction: .

Pelo codigo que postei, alguem saberia (ou ja passou por isso)?

T

tenta imprimir o conteúdo do HTTP Request… Dá pra ajudar melhor

philler

Respondendo a mim mesmo, para que fique registrado:
O SOAPAction deve ser setado para cada servico. O Consulta status do servico é este:

soapAction: http://www.portalfiscal.inf.br/nfe/wsdl/NfeStatusServico/nfeStatusServicoNF

Muitissimo grato a todos que ajudaram ate aqui.
Estou a disposicao para ajudar outros dentro dos meus conhecimentos (Java).

Alencar

philler

Continuando a peleia.

Apos conseguir acesso, estou na tentativa de usar o servico status do servico.

XML cabec:
“<?xml version="1.0" encoding="UTF-8"?>243STATUS”

XML dados:
“<?xml version="1.0" encoding="UTF-8"?>243STATUS”

E o bicho reclama (bonito que nao diz nada de mais)

<?xml version="1.0" encoding="utf-8"?> 2 RS20080807095546 243 [b]Rejeicao: XML Mal Formado[/b] 0 2008-10-30T14:35:20 1
philler

philler:
Continuando a peleia.

Apos conseguir acesso, estou na tentativa de usar o servico status do servico.
[…]
Rejeicao: XML Mal Formado
0
2008-10-30T14:35:20
1

Pessoal, suspeito que nao seja o xml em si, porque esta dando o mesmo erro no envio de lote.
Ou é alguma coisa no cabecalho ou na maneira de envio (protocolo).

Em anexo, o cabecalho do envio e o corpo.

Aguardo ajuda de quem puder…

philler

Uma perguntinha (besta, eu acho): o xml da solicitacao de status nao precisa ser assinado, certo?
Pelo menos nao consta no schema…

Eis o result do validador:

OPERAÇÃO: Validação de SCHEMA e assinatura Xml.


Nome do Arquivo: corpo.xml

PARSER XML: OK
TIPO DE MENSAGEM: Consulta do Status do Serviço
SCHEMA: OK
ASSINATURA XML:

Mensagem não assinada

Tempo de duração do processo: 00:00:00.3125000

Processo de validação de SCHEMA e assinatura Xml completo.

philler

Tecnoage:
tenta imprimir o conteúdo do HTTP Request… Dá pra ajudar melhor

Amigo, voce passou por este problema de xml mal formado, sendo que os xmls
estao ok?
Aparentemente o problema esta em outro lugar.

Grato novamente pela ajuda.

Alencar

proteus_adi

Passamos todos… rs**
Mas, muito mais no envio de lote…

Possivelmente vc está fazendo uma requisição com os padrâmetros errados…

Poderia mostrar o código da requisição com a formação dos parâmetros?

philler

proteus_adi:

Possivelmente vc está fazendo uma requisição com os padrâmetros errados…
Poderia mostrar o código da requisição com a formação dos parâmetros?

Vamos la: Metodo que recebe a solicitacao com o nome do xml (em disco)

public boolean statusServico(String nomeXML) {
	String xmlRetorno = null;
	
	this.url = this.config.getURL() + this.config.getStatusServicoURL();
	this.ns = this.config.getStatusServicoNS();
	this.metodo = this.config.getStatusServicoMetodo();
	this.soapAction = this.config.getStatusServicoSOAPAction();
	this.layoutDados = "1.07";
	
	try {
		this.xml = Utils.readFile(nomeXML);
	} catch (Exception e) {
		Utils.gravaLog("Status do servico. Erro ao ler xml ("+nomeXML+"): "+e.getMessage());
		return false;
	}
	
	try {
    xmlRetorno = this.chamaWebService();
} catch (Exception e) {
	Utils.gravaLog("Erro solicitando status do servico: "+e.getMessage());
	xmlRetorno = "";
}

System.out.println(xmlRetorno);
return true;
}

Metodo de chamada do ws:

private String chamaWebService() throws Exception {
	String result = null;
	URL endpoint = new URL(this.url);
	String nomeMetodo = extraiNomeMetodo(this.metodo);
	String nomeArgumento = extraiNomeArgumento(this.metodo);

	String cab = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>";
	cab += "<cabecMsg xmlns=\"http://www.portalfiscal.inf.br/nfe\" versao=\"1.02\">";
	cab += "<versaoDados>"+this.layoutDados+"</versaoDados>";
	cab += "</cabecMsg>";
	Utils.saveFile("cabec.xml", cab);        // salvei em disco para avaliar o xml do cabecalho
	Utils.saveFile("corpo.xml", this.xml);  // salvei em disco para avaliar o xml do corpo
	
	try {
		Service servico = new Service();
		Call chamada = (Call) servico.createCall();
		
		chamada.setTargetEndpointAddress(endpoint); 			
		chamada.setOperationName(new QName(this.ns, nomeMetodo));
		chamada.setSOAPActionURI(this.soapAction);
		chamada.addParameter("nfeCabecMsg", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		chamada.addParameter(nomeArgumento, org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
		chamada.setReturnType(org.apache.axis.Constants.XSD_STRING);
		
		result = (String) chamada.invoke( new Object[] {cab, this.xml} );
	} catch (Exception e) {
		result = "ERRO:" + e.getMessage();
	}
	
	return result;
}
proteus_adi
QName servico = new QName(endpoint, nomeServico);

            Service service = new Service();
            Call call = (Call)service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(endpoint));

            call.setOperationName(servico);

            for (int i = 0; i < paramValue.length; i++) {
                call.addParameter(paramName[i], XMLType.XSD_STRING, 
                                  ParameterMode.IN);
            }
            call.setReturnType(XMLType.XSD_STRING);

            String ret = (String)call.invoke(paramValue);
            return ret;

Conceitualmente... tá igual ao meu...
Só tem o "chamada.setSOAPActionURI(this.soapAction); " que não tem no meu...

Tenta rever o local onde vc preenche os nomes dos parâmetros...
"nfeCabecMsg", "nfeDadosMsg"

philler

proteus_adi:

Só tem o "chamada.setSOAPActionURI(this.soapAction); " que não tem no meu…

Tenta rever o local onde vc preenche os nomes dos parâmetros…
“nfeCabecMsg”, “nfeDadosMsg”

Estamos com os mesmos codigos.
Só pra confirmar, poderia mostrar como voce montou os dois arrays paramValue e paramName?

philler

Pessoal, quero agradecer a todos pela atencao dispensada durante os meus percalços.
Ja estou em producao com a NFe.

O ultimo problema que tinha era no cliente do servico, o qual resolvi gracas ao link
http://www.guj.com.br/posts/list/30/72325.java

Qualquer ajuda que eu possa retransmitir, estou a disposicao.

Alencar

proteus_adi

rs**
Demorei…

=]

Parabens, cara…

R

Amigos,

Boa tarde!

1-Criei um empresakeystore pelo keytool (Chave Privada)
2-Criei através do empresakeystore o empresa.csr
3-Enviei o csr para o Serasa criar o meu certificado
4-Recebi do Serasa o certificado empresa.cer (Certificado do Tipo A1 Servidor )
5-Instalei no Internet Explorer e FireFox
6-Inserir o certificado empresa.cer e suas CA (ITI.cer, SerasaACP.cer, SerasaCD.cer ) dentro do empresakeystore

Dúvidas: Após todo esse caminho que fiz e lendo várias opiniões e sugestões do fórum, verifiquei que para minha situação em nenhum momento
tenho o arquivo empresa.pfx, gostaria se possível saber dos srs, se com essa forma que relatei acima conseguirei fazer funcionar a NF-e, pois, com tudo
isso que fiz dar erro no internet explorer e firefox , o erro de 403.7 (Ao verificar o webservices via browser)

Para Sefaz enviei os .CER (Recebido pelo Serasa) que é a chave pública, será que esse erro é devido que somente hoje enviei esses arquivos para credenciar lá e os mesmos não estão habilitados ainda no servidor Sefaz Virtual RS?

Agradeço pela ajuda de todos.

Abraços,

Revelino

philler

revelinosantos:
Amigos,

Boa tarde!

1-Criei um empresakeystore pelo keytool (Chave Privada)
2-Criei através do empresakeystore o empresa.csr
3-Enviei o csr para o Serasa criar o meu certificado
4-Recebi do Serasa o certificado empresa.cer (Certificado do Tipo A1 Servidor )
5-Instalei no Internet Explorer e FireFox
6-Inserir o certificado empresa.cer e suas CA (ITI.cer, SerasaACP.cer, SerasaCD.cer ) dentro do empresakeystore

Dúvidas: Após todo esse caminho que fiz e lendo várias opiniões e sugestões do fórum, verifiquei que para minha situação em nenhum momento
tenho o arquivo empresa.pfx, gostaria se possível saber dos srs, se com essa forma que relatei acima conseguirei fazer funcionar a NF-e, pois, com tudo
isso que fiz dar erro no internet explorer e firefox , o erro de 403.7 (Ao verificar o webservices via browser)

Amigo, nao entendi muito bem este seu caminho. Mas pelo pouco que captei, voce fez um certificado para servidor e
nao um eCNPJ.
Para a NFe, somente um eCNPJ do CNPJ base da empresa emitente é válido.

Se nao entendi bem e falei bobagem, me desculpe pela intromissão.

Alencar

R

Este certificado que adquiri do SERASA é um certificado do tipo A1 Servidor pronto NF-e, recebi o arquivo empresa.cer, contudo, aqui
fala muito do .pfx.

Instalei no Internet Explorer e no FireFox, sem sucesso de acessar o web-services…mesmo direto pelo https:, ocorre o erro 403.7

Além disso tenho a dúvida sobre a situação, se para conseguir acessar o web-servicees direto pelo browse é necessário lá na SEFAZ Virtual está com as minhas informações (os .CER ).

Obrigado pela resposta.

R

Pessoal, vou colocar a minha situação passo a passo, pode ser que eu esteja equivado, há dois dias que me bato com isso, agradeço a colaboração de todos

Situação:
1-Adquirir um certificado Serasa A1 NF-e Servidor
2-Eles me mandaram o certificado empresa.cer, ITI.cer, SerasaACP.cer e SerasaCD.cer
3-Baixei todos e coloquei na mesma pasta onde está o meu keystore
4-Instalei um a um no IE
5-Ao acessar algum https: de web-services do Sefaz Virtual RS ou qualquer outro estado, ocorre o erro de 403.7
URL: https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?WSDL
Erro: HTTP Error 403.7 - Forbidden: SSL client certificate is required.
6-Lendo o post, verifiquei que todos os membros falam do .PFX que é o certificado cliente
7-Pelo que entendi, esse .PFX é um arquivo que contém a chave privada ( keystore ), empresa.cer e as CA’S (ITI.cer, SerasaACP.cer e SerasaCD.cer)
8-Contudo, o Serasa não enviou esse arquivo para mim !? ou se estou equivocado, quem gera esse .PFX é eu mesmo ?
9-Continuando, fiquei me batendo para gerar esse .PFX, não sei se estou no rumo certo…mas fiz as importações das CA’S , empresa.cer para dentro
do keystore.
10-Depois utilizei um programa chamado KEYMAN (IBM) e criei um arquivo PCKS12 (.PFX) e importe esse keystore
11-Instalei o .PFX ,só que quando vejo a data de validade é 28/10/2008 (Quando gerei a minha private key) até 26/01/2008, e tem um erro
que a autoridade raiz não é confiável ou não existe algo assim.
12-Quando vou em Caminho de Certificação: aparece com um X vermelho o nome do meu keystore empresakeystore e informando que não tem uma autoridade Raiz

Obrigado à todos.

R

revelinosantos:
Pessoal, vou colocar a minha situação passo a passo, pode ser que eu esteja equivado, há dois dias que me bato com isso, agradeço a colaboração de todos

Situação:
1-Adquirir um certificado Serasa A1 NF-e Servidor
2-Eles me mandaram o certificado empresa.cer, ITI.cer, SerasaACP.cer e SerasaCD.cer
3-Baixei todos e coloquei na mesma pasta onde está o meu keystore
4-Instalei um a um no IE
5-Ao acessar algum https: de web-services do Sefaz Virtual RS ou qualquer outro estado, ocorre o erro de 403.7
URL: https://homologacao.nfe.sefazvirtual.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx?WSDL
Erro: HTTP Error 403.7 - Forbidden: SSL client certificate is required.
6-Lendo o post, verifiquei que todos os membros falam do .PFX que é o certificado cliente
7-Pelo que entendi, esse .PFX é um arquivo que contém a chave privada ( keystore ), empresa.cer e as CA’S (ITI.cer, SerasaACP.cer e SerasaCD.cer)
8-Contudo, o Serasa não enviou esse arquivo para mim !? ou se estou equivocado, quem gera esse .PFX é eu mesmo ?
9-Continuando, fiquei me batendo para gerar esse .PFX, não sei se estou no rumo certo…mas fiz as importações das CA’S , empresa.cer para dentro
do keystore.
10-Depois utilizei um programa chamado KEYMAN (IBM) e criei um arquivo PCKS12 (.PFX) e importe esse keystore
11-Instalei o .PFX ,só que quando vejo a data de validade é 28/10/2008 (Quando gerei a minha private key) até 26/01/2008, e tem um erro
que a autoridade raiz não é confiável ou não existe algo assim.
12-Quando vou em Caminho de Certificação: aparece com um X vermelho o nome do meu keystore empresakeystore e informando que não tem uma autoridade Raiz

Obrigado à todos.

Pessoal, favor desconsiderar este problema acima, o que ocorreu é que o certificado estava com server/client ativado, não serve para a situação da
NF-e, desta forma já solicitei outro PJ Client ativado.

Obrigado pelo empenho de todos.

nandobgi

Para o pessoal que está em produção, vocês estão gerando o arquivo *.jks na mão utilizando a ferramenta Keytool?
Estou pergutando isso pois alguns clientes meus estão resistindo ao fornecer o certificado para a geração do arquivo.
Gostaria de saber como o Emissor da SEFAZ-SP faz pois nele só é preciso apontar onde está o seu certificado *.pfx.

Qual o procedimento que os amigos tem seguido?

[ ]'s

T

Vc pode apontar para um pfx sim, se não me engano utilizando o tipo PKCS#12 do keystore.

nandobgi

Obrigado pela resposta Tecnoage, você saberia me dizer como posso fazer isso?

Grato

T

OPA…

quando vc vai fazer a importação dos certificados digitais, vc troca o tipo do store de “JKS” para “PKCS12”. melhorou? rs

nandobgi

Atualmente estou gerando um arquivo jks com o CertificadoACRaiz e depois importando no mesmo arquivo o certificado do cliente, dessa forma que você falou eu não preciso do certificado raiz?
Poderia setar diretamente o do cliente no código?

Grato

T

Não sei se entendi nmuito bem o que vc
quiz dizer, então se eu falar merda me desculpe… Vc pode ter um certificado raiz encapsulado em um jks e o certificado cliente fora dele sim…

nandobgi

Era essa a dúvida Tecnoage, pois hoje empacoto tudo usando o keytool, CertificadoRaiz + Certificado Cliente.
Usando o certificado do cliente fora do jks eu preciso informar a senha dele toda vez que for assinar ou transmitir?

Grato

T

Precisa sim, da mesma maneira… (pelo pouco que sei)

leocomelli

nandobgi,

Poderia me dizer como esta fazendo para empacotar o certificado raiz e o certicado do cliente utilizando o keytool?

Obrigado.

abs

nandobgi

Opa blz leocomelli,

Utilizo primeiro o keytool para gerar o arquivo jks com o certificado AC Raiz.

keytool -importcert -trustcacerts -alias raiz -file CertificadoACRaiz.cer -keystore arquivo.jks

O próximo passo é adicionar o certificado do cliente no seu arquivo jks gerado, para isso utilizo os recursos de Java Web Services Developer Pack (jwsdp)

pkcs12import.bat -file "Certificado do cliente.pfx" -alias cliente -keystore arquivo.jks

[ ]'s

philler

leocomelli:
nandobgi,
Poderia me dizer como esta fazendo para empacotar o certificado raiz e o certicado do cliente utilizando o keytool?
Obrigado.
abs

Metendo pitaco onde nao fui chamado: uso o SSKeytool, que faz a administracao de jks de forma visual.
Caso queira mais infos, me avise.

Alencar

nandobgi

Blz philler?

  • Qual a vantagem do uso dessa ferramenta?
  • Onde posso baixa-la?

[ ]'s

T

philler:
leocomelli:
nandobgi,
Poderia me dizer como esta fazendo para empacotar o certificado raiz e o certicado do cliente utilizando o keytool?
Obrigado.
abs

Metendo pitaco onde nao fui chamado: uso o SSKeytool, que faz a administracao de jks de forma visual.
Caso queira mais infos, me avise.

Alencar

uow uow uow… que isso, seja sempre bem vindo… Boas opiniões nunca são demais :wink:

philler

nandobgi:
Blz philler?

  • Qual a vantagem do uso dessa ferramenta?
  • Onde posso baixa-la?

[ ]'s

Opa. É visual. Todos os cmds em cima do jks em telas (GUI feito em java).
O fabricante é a Southgate Software Ltd.
Veja detalhes em http://java.sun.com/products/jfc/tsc/sightings/S11.html

Procurei no site do fabricante para baixar, mas nao encontrei mais.
http://www.southgatesoftware.com/products/sskeytool

Se quiser testar, me passe um email pra enviar.

Alencar

leocomelli

Eu estou fazendo de uma maneira diferente…

Adicionei o certificado raiz e os demais necessários…

keytool -import -trustcacerts -alias root -file AC_Raiz_V1.cer -keystore nfe-client.jks
keytool -import -trustcacerts -alias cs -file AC_Certisign_G3.cer -keystore nfe-client.jks
keytool -import -trustcacerts -alias scg -file AC_SINCOR_G2.cer -keystore nfe-client.jks

Depois eu inclui o certificado do meu cliente

keytool -import -alias client-nfe -file nfe-client.cer -keystore nfe-client.jks

Consigo visualizar os 4 certificados dentro do .jks (veja anexo)

Fiz o mesmo passo com o certificado do governo…

Quando tento acessar o webservice …

System.setProperty("javax.net.ssl.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", "nfe-client.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "xxx123");

        System.setProperty("javax.net.ssl.keyStoreType", "JKS");
        System.setProperty("javax.net.ssl.keyStore", "nfe-governo.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "xxx123");

O seguinte erro…

(403)Forbidden


T

esse 403 ainda quer dizer que vc não tem acesso… vc tem algum código de como vc está tentando acessar o ws? Vc já cadastrou seu certificado cliente no sefaz? O acesso já foi liberado?

mateusprado

Olha o intruso…rss

Bom, nao existe Tenoage, nenhuma liberacao junto a qualquer WebService de qualquer SEFAZ, liberacao para acesso. Afinal o certificado, a funcao dele e’ lhe dar acesso ao servico especifico.

Posta uma parte do seu condigo de consumo ao web service que esta lhe retornando o 403, erro de permissao.

[ ]s,

mateusprado

nandobgi:
Blz philler?

  • Qual a vantagem do uso dessa ferramenta?
  • Onde posso baixa-la?

[ ]‘s


Legal a ferramenta, nao conhecia. Mas nao vejo vantagen, afinal quem gera o certificado e’ o desenvolvedor da app. No entando que via comand line, vc pode implementar uma criacao em lote de jks.

  • Estou lhe devendo o codigo Fernando(puxao de orelha)rss
leocomelli

Estou tentando consumir o ws dessa maneira…

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.trustStoreType", "JKS");
        System.setProperty("javax.net.ssl.trustStore", "nfe-gov.jks");
        System.setProperty("javax.net.ssl.trustStorePassword", "xxx123");

        System.setProperty("javax.net.ssl.keyStoreType", "JKS");
        System.setProperty("javax.net.ssl.keyStore", "nfe-client.jks");
        System.setProperty("javax.net.ssl.keyStorePassword", "xxx123");		
		
	NfeStatusServico service = new NfeStatusServicoLocator();  
	try {  
		NfeStatusServicoSoap nfeStatus = service.getNfeStatusServicoSoap();
		System.out.println(nfeStatus.nfeStatusServicoNF(nfeCabecMsg, nfeDadosMsg));
	} catch (Throwable e1) {  
		e1.printStackTrace();  
	}

Em relação ao cadastro no SEFAZ não sei te dizer ao certo… Tem uma forma de validar isso? Atualmente estou usando esse certificado com o software “Emissor NFe”, e funciona sem problemas…

Estava com problemas para acessar a URL do Webservice via browser, o erro era o mesmo. Depois de instalar toda a cadeia certificadora no Internet Explorer eu passei a acessar…

Obrigado pela ajuda

mateusprado

BOm, eu nao consumo ws dessa forma. Eu apenas gero um JKS. Dentro um pfx do meu cliente e o .cer(por exemplo) da unidade certificado, Seraza, Certisign, etc.

[ ]s

leocomelli

Mateus,

Poderia me passar como esta consumindo o ws?

Vc esta gerando o jks da mesma maneira do nando?

Obrigado…

Abs.

T

Olha o intruso…rss

Bom, nao existe Tenoage, nenhuma liberacao junto a qualquer WebService de qualquer SEFAZ, liberacao para acesso. Afinal o certificado, a funcao dele e’ lhe dar acesso ao servico especifico.

Posta uma parte do seu condigo de consumo ao web service que esta lhe retornando o 403, erro de permissao.

[ ]s,

Opa, ae entramos em discórdia hehehe… Somente empresas autorizadas e com registro do seu certificado junto ao SEFAZ podem conectar-se. Seria uma puta falta de segurança qqer certificado digital bater lá e ser aceito certo?
O certificado digital é parte constituinte do tunelling SSL, logo, deve ser de conhecimento do servidor qual certificado está usando seus “clientes”. Por exemplo, tente usar um certificado de alguma empresa não obrigada ao convênio de ICMS, (acredite, o tontão aqui tentou fazer isso hehehe, antes de conhecer toda a burocracia da receita.) Não vai funfar…

mateusprado

Sim.

O Fernando foi cliente meu na consultoria de NFe.

leocomelli

Bom, se eu consigo acessar a URL via browser e atualmente utilizo o software “Emissor NFe”… Acredito que o meu certificado esteja ok, certo?

Acredito que o problema esteja na hora de gerar o jks “certificado cliente” + “certificado emissores” ou jks do governo.

Obrigado.

abs.

T

leocomelli:
Bom, se eu consigo acessar a URL via browser e atualmente utilizo o software “Emissor NFe”… Acredito que o meu certificado esteja ok, certo?

Acredito que o problema esteja na hora de gerar o jks “certificado cliente” + “certificado emissores” ou jks do governo.

Obrigado.

abs.

Neste caso SIM… É o teste mais rápido a ser feito…

T

leocomelli:
Bom, se eu consigo acessar a URL via browser e atualmente utilizo o software “Emissor NFe”… Acredito que o meu certificado esteja ok, certo?

Acredito que o problema esteja na hora de gerar o jks “certificado cliente” + “certificado emissores” ou jks do governo.

Obrigado.

abs.

Agora, o caminho para o seu certificado está certo? Estou vendo que vc não faz nenhuma declaração de path para o seu arquivo dos certificados… Ele está dentro do jar? Minha sugestão é testar apontando fisicamente para um arquivo com seus certificados e a cadeia. Coloque seus arquivos em C:\nfe, por exemplo e aponte desta maneira o caminho, para ter certeza que seus certificados foram importados.

nandobgi

Blz leocomelli ,

Eu estava tendo um problema parecido alguns dias atrás, consegui resolve-lo fazendo da seguinte maneira.

  1. Criei um arquivo jks com o keytool inicialmente com o certificado AC Raiz.
  2. Utilizando o keytool empacotei no mesmo jks o certificado da SEFAZ do estado. (No caso foi o certificado do Estado de Rondonia)
  3. Utilizando JWSDP adicionei o certificado do cliente no mesmo jks.

Funcionou normal…

Não sei o porque, aproveitando alguém teria uma explicação?

[ ]'s

philler

nandobgi:
Blz leocomelli ,

Eu estava tendo um problema parecido alguns dias atrás, consegui resolve-lo fazendo da seguinte maneira.

  1. Criei um arquivo jks com o keytool inicialmente com o certificado AC Raiz.
  2. Utilizando o keytool empacotei no mesmo jks o certificado da SEFAZ do estado. (No caso foi o certificado do Estado de Rondonia)
  3. Utilizando JWSDP adicionei o certificado do cliente no mesmo jks.

Funcionou normal…

Não sei o porque, aproveitando alguém teria uma explicação?

[ ]'s

Isso é assim mesmo. Na hora da conexao, o certificado da SEFAZ deve ser conferido atraves da sua cadeia de certificacao.
Creio que isso seja nativo da seguranca em java.

Alencar

leocomelli

Pessoal,

Consegui!!! Mas não dá maneira que estava tentando… Fiz o seguinte…

  1. Gerei o JKS do governo usando o InstallCert (http://blogs.sun.com/andreas/resource/InstallCert.java);
  2. Importei o certificado + a cadeia certificadora para o Firefox e exportei tudo (backup all) no formato .p12;
  3. Fiz a seguinte alteração no meu código:
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.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "jssecacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "cliente.p12");
System.setProperty("javax.net.ssl.keyStorePassword", "xxxxxx");

Obrigado pela ajuda!

Abs.

alexegidio

Olha o bico…
Tô acompanhando a discussão a bastante tempo, já consegui gerar o xml, assiná-lo, estou conversando com o webservice normalmente,
mas não consegui ainda validar meu xml.
Utilizei um código do post http://www.guj.com.br/posts/list/70552.java#370575.
Criei um código próprio e sempre me dá o mesmo erro:
Cannot find then declaration of element ‘enviNFe’,
Sei que é uma das coisas mais básicas :oops: e que o mais difícil já fiz mas não tô saindo do ZERO, com isso. Onde posso tá vacilando
Quem tiver o caminho das pedras, por favor me ajude!

aix

To precisando muito de vcs amigos

fiz todos os passos descritos aqui e em outros posts mas não estou tendo sucesso na comunicação, ja tentei exportando o certificado de varias formas pelo I.E ou firefox, se alguem pude me ajudar fico grato, abraços.

fiz da seguinte forma:

keytool -import -alias nfe -keystore k:\testacertificado\nfe.jks -file k:\testacertificado\certificado.cer

[code]

esse é o erro quando tento solicitar o status do serviço.

Porta SOAP que está sendo invocada: JAX-WS RI 2.1.1 in JDK 6: Stub for https://nfe.sefaz.rs.gov.br/ws/nfestatusservico/NfeStatusServico.asmx
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
        at com.sun.xml.internal.ws.transport.http.client.HttpClientTransport.getOutput(HttpClientTransport.java:119)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:128)
        at com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:74)
        at com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:581)
        at com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:540)
        at com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:525)
        at com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:422)
        at com.sun.xml.internal.ws.client.Stub.process(Stub.java:235)
        at com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:120)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:230)
        at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:210)
        at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:103)
        at $Proxy28.nfeStatusServicoNF(Unknown Source)
        at nfeWebService.NfeStatusClient.teste(NfeStatusClient.java:44)
        at nfeWebService.Main.main(Main.java:22)
Caused by: java.net.SocketException: java.security.NoSuchAlgorithmException: Error constructing implementation (algorithm: Default, provider: SunJSSE, class: com.sun.net.ssl.internal.ssl.DefaultSSLContextImpl)
philler

Parece estar faltando bibliotecas…
Se nao me engano, ´.jar necessario é sunpkcs11.jar

Alencar

aix

philler:
Parece estar faltando bibliotecas…
Se nao me engano, ´.jar necessario é sunpkcs11.jar

Alencar

vc nao sabe aonde consigo essa informação?, tenho pouca experiencia com webservices, e ja estou a 2 dias nesse problema, abraços.

philler

aix:

vc nao sabe aonde consigo essa informação?, tenho pouca experiencia com webservices, e ja estou a 2 dias nesse problema, abraços.

Qual informacao? Nao entendi?
Voce deve verificar se o sunpkcs11.jar esta visivel a sua aplicacao.
Só nao tenho certeza se isso é a solucao para o teu problema.
Vale tentar.

Alencar

philler

[quote=aix]

philler:
Parece estar faltando bibliotecas…
Se nao me engano, ´.jar necessario é sunpkcs11.jar

Alencar

Esta biblioteca tb pode estar faltando na sua aplicacao: sunjce_provider.jar

Alencar

aix

[quote=philler]

aix:
philler:
Parece estar faltando bibliotecas…
Se nao me engano, ´.jar necessario é sunpkcs11.jar

Alencar

Esta biblioteca tb pode estar faltando na sua aplicacao: sunjce_provider.jar

Alencar

acho que naum é isso manu, acho que é referente ao certificado, mas não sei o que é to usando Netbeans com JAX-WS, abraços.

TecnoSpeed

Conheça os produtos da TecnoSpeed para NF-e.

Tem componentes, soluções para sistemas legados, gerenciador de notas e um programa emissor de nfe.
Integração com arquivo texto bem simples e fornecem atualizações e suporte técnico.

Os produtos tem ótima relação custo x benefício e são compatíveis com todos os estados brasileiros. A TecnoSpeed é especializada em NF-e.

Confira a demo em nossa área de download:
http://www.tecnospeed.com.br/index2.php?pg=produtos&id=16

Obrigado!

fbarreto

TecnoSpeed:
Conheça os produtos da TecnoSpeed para NF-e.

Tem componentes, soluções para sistemas legados, gerenciador de notas e um programa emissor de nfe.
Integração com arquivo texto bem simples e fornecem atualizações e suporte técnico.

Os produtos tem ótima relação custo x benefício e são compatíveis com todos os estados brasileiros. A TecnoSpeed é especializada em NF-e.

Confira a demo em nossa área de download:
http://www.tecnospeed.com.br/index2.php?pg=produtos&id=16

Obrigado!

Me parece que isto eh pra delphi ou estou enganada,tem nfe pra java ai?
Obrigada.

philler

fbarreto:

Me parece que isto eh pra delphi ou estou enganada,tem nfe pra java ai?
Obrigada.

A Philler Informatica comercializa o driver para NFSe, feito em java, no formato parceria
com a sua software house, interligando ao seu ERP atraves de arquivos XML.

Caso tenha interesse, favor entrar em contato privado.

Alencar

philler

Temos algum colega de MG neste forum?
Se sim, poderia me mandar uma msg em private?

Grato

Alencar

S

Galera alguem poderia me ajudar, estou com um problema em me conectar com um webservice via https, não é o da NFe mas com o conhecimento adquiridos aqui, creio que poderão me ajudar.

Primeiramente o endereço do wsdl é https://qualidade.gps-pamcary.com.br/pamcardbrvisa/services/WSPamcard?wsdl alem do endereço do wsdl recebi 2 arquivos.

um dos arquivos com o nome clientkeystore.properties com os seguintes valores dentro:

keyStorePath=keystore/pamcard_914460000150c.ks
keyStore=keystore/pamcard_914460000150c.ks
keyStorePassword=kkkkk
keyStoreType=JKS

pamcard.prop.keystore.client.keystore.path=C:/Arquivo/keystore/pamcard_914460000150c.ks
pamcard.prop.keystore.client.keystore.pass=kkkkkk
trustStore=C:“Program Files”\Java\jre6\lib\security\cacerts
trustStorePassword=kkkkk
trustStoreType=JKS

o segundo arquivo com o nome pamcard_914460000150c.ks acho ser o certificado, abrindo este arquivo no keystore, vejo que ele não possui uma chave privada apenas a chave publica, onde consigo obte-la via java.

Qual o procedimento necessario para conseguir conectar ao webservice? Consigo me conectar normalmente a um WS normal, mas não sei o que fazer para me conectar a um via https.

Obrigado!

S

Galera peguei o meu certificado, e exporte um novo certificado, depois adicionei este certificado no cacerts dentro da pasta java, adicionei ele no condigo e tah funcionando sem dar erro de certificação. Segue o codigo

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", "JKS");
            System.setProperty("javax.net.ssl.keyStore", "C:/arquivo/pamcard_914460000150c.ks");
            System.setProperty("javax.net.ssl.keyStorePassword", "****");

            System.setProperty("javax.net.ssl.trustStoreType", "JKS");
            System.setProperty("javax.net.ssl.trustStore", "C:/Program Files (x86)/Java/jdk1.6.0_05/jre/lib/security/cacerts");
            System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
            
            //monto meu soap aqui

            URL url = new URL(endereco);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.addRequestProperty("Request-Method", "POST");
            connection.addRequestProperty("Content-Type", "text/xml");
            connection.addRequestProperty("SOAPAction", SOAPAction);
            connection.addRequestProperty("Content-Length", soap.length() + "");
            connection.setDoOutput(true);
            connection.setDoInput(true);
            OutputStream out = connection.getOutputStream();
            out.write(soap.getBytes());
            out.flush();
            connection.connect();
            if (connection.getResponseCode() == HttpURLConnection.HTTP_OK || connection.getResponseCode() == HttpURLConnection.HTTP_ACCEPTED) {
                BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                StringBuffer newData = new StringBuffer();
                String s = "";
                while (null != ((s = br.readLine()))) {
                    newData.append(s);
                }
                br.close();
                System.out.println(new String(newData));
            } else {
                System.out.println(connection.getResponseCode() + "/" + connection.getResponseMessage());
            }
            connection.disconnect();

ao montar meu soap de acordo com o arquiv wsdl, ele pede a seguinte tag, <certificate xsi:type=“xsd:anyType”> se eu comento esta tag, é retornodado do ws a mensagem dizendo que falta especificar o certificado, se eu coloco ela e jogo qualquer coisa lah pq nao sei o que colocar , da um retorno 500 do ws erro interno.

Alguem poderia me dar uma dica do que falta ser feito para que isso de certo? Obrigado!

G

oi pessoal estou com o mesmo problema, nao consigo acessar o web service, obrigado

M

ola
estou com essa duvida
e o email do juliano esta retornando
alguem pode ajudar
obrigado

chicocx

A quem interessar, consegui resolver o problema e postei na thread:

http://www.guj.com.br/java/238251

Também pode ser visto em:
http://a4t.in/xwiki/bin/view/Blog/ForbiddenNFe

Espero ter ajudado

philler

Repassando mensagem que enviei em outro tópico, mas que tem a ver com este:

Pessoal, me deparei com algumas cadeias de certificação diferentes, começando pelas da Raiz Brasileira
que agora tem a v2 e a v3.
Como dica fica o alerta: se a cadeia não estiver correta (com todas as letras) os acessos podem falhar, ok?
Para quem interessar: http://www.iti.gov.br/twiki/bin/view/Certificacao/RepositoriodaACRaiz

Aproveitando, pergunto: alguém sabe dizer o porque o certificado da “Autoridade Certificadora Raiz Brasileira v3”
não é auto-assinado?
Os demais são corretamente pois eles são seus próprios emissores, portanto o v3 também deveria ser.

Mandei um email para [email removido] perguntando. Se alguém souber algo, por favor, nos informe.

Alencar

philler

Pessoal, estou com problemas em alguns certificados da CEF da cadeia v2.
Tudo bem configurado como todos os outros. Cadeia correta e tals.
Testado com acesso ao site da receita.fazenda e o site do FGTS (solicitado pelo
suporte da CEF). Tudo funcionando.

Porém, ao tentar consumir serviços da SEFAZ/RS com este A3, retorna Forbidden (403.16)
alegando ser um certificado cliente inválido.
To pirando com esta maluquice. E o pior, não é o único A3 com este galho.

Por favor, qualquer luz no fim do túnel é bem vinda.

Alencar

philler

philler:
Pessoal, estou com problemas em alguns certificados da CEF da cadeia v2.
Tudo bem configurado como todos os outros. Cadeia correta e tals.
Testado com acesso ao site da receita.fazenda e o site do FGTS (solicitado pelo
suporte da CEF). Tudo funcionando.

Porém, ao tentar consumir serviços da SEFAZ/RS com este A3, retorna Forbidden (403.16)
alegando ser um certificado cliente inválido.
To pirando com esta maluquice. E o pior, não é o único A3 com este galho.

Por favor, qualquer luz no fim do túnel é bem vinda.

Alencar

Só complementando: no ambiente de homologação o certificado funciona. No produção da forbidden.
Outra informação relevante: estou testando via IE 8.0, acessando os wdsl de status serviço de ambos os
ambientes. Portanto, nada tem a ver com configuração de sistema, versão do java, etc…

Por favor, qualquer informação é bem vinda.

Alencar

yano

Olá,

Vejo que esse tópico é antigo, porém estou tentando fazer uma coisa que parece relativamente simples. Tanto no site da Receita Federal quanto no site da Certisign quando se tenta acessar uma página que precisa de um certificado no cliente o browser abre um "pop-up" para digitar a senha do e-token e escolher o certificado.

Procurei na internet por um bom tempo e não consegui descobrir como faço para o browser abrir esse "pop-up" e o cliente escolher o certificado de autenticação que está no e-token.

Alguém sabe como se faz isso?

Atenciosamente,
Alberto Yano

Criado 7 de fevereiro de 2008
Ultima resposta 12 de fev. de 2012
Respostas 115
Participantes 28