1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Problema conexão SSL (ValidatorException: PKIX path building failed) com IMAP e NFe

Estou tendo um problema em um processo que estou realizando, o processo faz uma conexão com o IMAP do gmail (imap.gmail.com, 993), o processo conecta tranquilamente.

Ao termino deste processo é realizado uma consulta de NFe na Sefaz, porém quando ele irá realizar a consulta realiza a exceção:

org.apache.axis2.AxisFault: 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.axis2.AxisFault.makeFault(AxisFault.java:430)
    at org.apache.axis2.transport.http.AxisRequestEntity.writeRequest(AxisRequestEntity.java:98)
    at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:499)
    at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114)
    at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096)
    at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
    at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
    at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
    at org.apache.axis2.transport.http.AbstractHTTPSender.executeMethod(AbstractHTTPSender.java:621)
    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:404)
    at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
    at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
    at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
    at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
    at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
    at br.com.organo.monitor.wsdl.SendNFeStub.nfeReturn(SendNFeStub.java:144)
    at br.com.organo.monitor.wsdl.ConsultStatusNFE.getRetConsSit(ConsultStatusNFE.java:108)
    at br.com.organo.monitor.wsdl.ConsultStatusNFE.send(ConsultStatusNFE.java:71)
    at br.com.organo.monitor.send.SendConsSit.send(SendConsSit.java:82)
    at br.com.organo.monitor.send.SendConsSit.saveDocument(SendConsSit.java:48)
    at br.com.organo.monitor.send.SendConsSit.write(SendConsSit.java:66)
    at br.com.organo.monitor.send.SendConsSit.start(SendConsSit.java:120)
    at br.com.organo.monitor.process.ConsultNFe.execute(ConsultNFe.java:36)
    at br.com.organo.monitor.MonitorProcess.process(MonitorProcess.java:44)
    at br.com.organo.monitor.process.ConsultNFe.main(ConsultNFe.java:69)

Procurei sobre este erro, todos foram referente a problema no "cacerts", porém se eu realizar o mesmo processo sem estabelecer conexão IMAP a consulta com a Sefaz sem problema e consulta minha Nota, este problema só ocorre quando realizo a conexão IMAP.

Tentei avaliar se quando eu estabeleço a conexão IMAP o processo adiciona alguma propriedade no sistema que interfere na conexão com a Sefaz, mas não faz nenhuma modificação.

Os meu certificados, tanto o PFX e CACERTS estão corretos, queria saber se alguém tem ideia do que a conexão IMAP (SSL) do gmail está interferindo.

Estou utilizando as seguintes ferramentas:

  • JavaMail 1.4.3
  • Axis2 1.6

Parte utilizada para conexão IMAP

// Conexão IMAP
Properties properties = System.getProperties();
Session session = Session.getDefaultInstance(properties, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", 993, "meu-email@dominio.com.br", "minha-senha");
store.close();

/*
 * Processo de sonsulta NFe
 *
ConsultNFe c  = new ConsultNFe();
c.process(null);

Adicionando certificados na consulta:

System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol");
System.setProperty("sun.security.ssl.allowUnsafeRenegotiation", "true");
@SuppressWarnings("restriction")
com.sun.net.ssl.internal.ssl.Provider provider = new com.sun.net.ssl.internal.ssl.Provider();
Security.addProvider(provider);

System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
System.setProperty("javax.net.ssl.keyStore", "/path/to/cert.pfx");
System.setProperty("javax.net.ssl.keyStorePassword", "passPFX");

System.setProperty("javax.net.ssl.trustStoreType", "JKS");
System.setProperty("javax.net.ssl.trustStore", "/path/to/cacerts");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java ssl ou faça a sua própria pergunta.