Boa tarde pessoal,
Estou desenvolvendo a nf-e para os clientes que utilizam nosso sistema que é desktop, e o funcionamento seria o seguinte: o sistema envia o arquivo xml já assinado para uma aplicação em java que está hospedada em um servidor web (é feito assim por que nosso sistema é em Visual Fox e não tem suporte para webservices). Na aplicação java deve ser feita a autenticação mútua entre cliente e servidor através de certificados digitais. Nós adquirimos um certificado do tipo A1 válido e exportamos pelo IE para um arquivo .pfx e nesse arquivo já foi exportada a chave privada e a cadeia de certificação. Estou usando o seguinte código para realizar a autenticação:
System.setProperty("javax.net.debug", "ssl");
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
// Keystore com o certificado do cliente
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "/home/sisacessoteste/nfe/Certificado_A1_Decisao.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "xxxxxxx");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "/home/sisacessoteste/nfe/Keystore_Ginfes.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "xxxxxx");
cheguei nesse código pesquisando sobre o assunto aqui no forum e onde o arquivo pfx é o certificado da nossa empresa e o arquivo jks é um keystore com o certificado e a cadeia de certificação do webservice.
Só que dessa forma não está funcionando, não autentica para eu poder realizar o envio ao webservice. Todos os exemplos que vi aqui relacionado a isso, as aplicações que faziam a autenticação não estavam em um servidor web como é o meu caso e queria saber se o problema pode ser alguma coisa relacionada a isso, tem que fazer alguma configuração no servidor, verificar a versão do java que está instalado?
alguem que saca de certificados digitais, autenticação ou já passou por isso que tivesse uma idéia ia ajudar bastante pq realmente não sei o que pode ta acontecendo de errado…
Posta a exceção por favor.
A exceção retornada é essa:
javax.servlet.ServletException: java.lang.RuntimeException: Default SSL context init failed: null (HTTP Error: 0 )(-10001)
at Sdtbr_com_ginfes_homologacao_ServiceGinfesImplService.recepcionarloterpsv3(Sdtbr_com_ginfes_homologacao_ServiceGinfesImplService.java:2096)
at anfeteste_impl.webExecute(anfeteste_impl.java:47)
at com.genexus.webpanels.GXWebObjectBase.doExecute(Unknown Source)
at anfeteste.doExecute(anfeteste.java:19)
at com.genexus.webpanels.GXWebObjectStub.callExecute(Unknown Source)
at com.genexus.webpanels.GXWebObjectStub.doPost(Unknown Source)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:169)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at br.com.locaweb.tomcat.LocaWebValve.invoke(LocaWebValve.java:101)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Galera fiquei com outra dúvida aqui: pra eu conseguir autenticar eu teria que realizar alguma configuração no tomcat? li outros tópicos no fórum e vi que o certificado deve ser importado para o arquivo cacerts do java e o arquivo server.xml do tomcat editado para que funcione. Isso é correto mesmo ou só referenciando o certificado no código com o trecho:
System.setProperty("javax.net.debug", "ssl");
System.setProperty("java.protocol.handler.pkgs","com.sun.net.ssl.internal.www.protocol");
java.security.Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
// Keystore com o certificado do cliente
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "/home/sisacessoteste/nfe/Certificado_A1_Decisao.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "xxxxxxx");
System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "/home/sisacessoteste/nfe/Keystore_Ginfes.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "xxxxxx");
já teria que funcionar?