2
respostas

Erro RestTemplate com certificado digital?

Boa tarde

Amigos, estou tentando mandar uma nfe usando código abaixo:

Aparentemente meus certificados estão instalados pois mando tb sped reinf onde gera e assina xml e não da erro.

Erro: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

Agradeço desde de já.

KeyStore clientStore = KeyStore.getInstance("PKCS12");
            clientStore.load(new FileInputStream("/discos/teste.pfx"), "99999".toCharArray());
            SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
            sslContextBuilder.loadKeyMaterial(clientStore, "99999".toCharArray());
            sslContextBuilder.loadTrustMaterial(new TrustSelfSignedStrategy());
            SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(
                    sslContextBuilder.build());
            CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(sslConnectionSocketFactory)
                    .build();

            HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(
                    httpClient);
            requestFactory.setConnectTimeout(10000); // 10 seconds
            requestFactory.setReadTimeout(10000); // 10 seconds
             
            RestTemplate restTemplate = new RestTemplate(requestFactory);

            XMLSignatureFactory fac = XMLSignatureFactory.getInstance("DOM");

            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            Document document = dbf.newDocumentBuilder().parse(new FileInputStream("/nfe/" + "A-9999.xml"));

            String arquivoXML = converter(document);
            
            Envelopar envelopar = new Envelopar();
            
            String arquivoXML2 = envelopar.EnveloparXML();
             
            String resourceUrl = "https://homologacao.nfe.fazenda.sp.gov.br/ws/nfeautorizacao4.asmx";
            //String resourceUrl = "https://reinf.receita.economia.gov.br/recepcao/lotes";
            
            String retornoEnvio = "";

            HttpHeaders headers = new HttpHeaders();
            headers.add("Content-Type", "application/xml; charset=utf-8");

            try {
 
                HttpEntity<String> entity = new HttpEntity<String>(arquivoXML2, headers);

                ResponseEntity<String> response = restTemplate.exchange(resourceUrl, HttpMethod.POST, entity,String.class);

                retornoEnvio = response.getBody();

                retornoJson = XML.toJSONObject(retornoEnvio);
                                
                if (response.getStatusCode() == HttpStatus.OK) {
                    System.out.println("Request Successful.");
                } else if (response.getStatusCode() == HttpStatus.CREATED) {

                    System.out.println(response.getStatusCode() == HttpStatus.CREATED) ;
 
 
                } else {

                    System.out.println("Request Failed");
                
                }
                 

            } catch (Exception e) {
                // TODO: handle exception
                
                
                retornoEnvio = e.getMessage();

                System.out.println(e.getMessage());
        }
        
        return retornoMensagem.toString();

    }

2 respostas

Olá Flavio, tudo bem?

Pelo que entendi, você está tentando enviar uma NFe usando um certificado digital, mas está recebendo um erro de "PKIX path building failed". Esse erro ocorre quando o certificado digital não é reconhecido pelo sistema.

Uma possível solução seria adicionar o certificado digital à lista de certificados confiáveis do sistema. Você pode fazer isso seguindo os passos descritos neste tutorial: https://www.sslsupportdesk.com/add-certificates-to-java-keystore/

Outra opção seria verificar se o certificado digital está configurado corretamente no código. Verifique se o caminho do arquivo está correto e se a senha está correta.

Espero ter ajudado e bons estudos!

Bom dia Matheus.

Primeiramente gostaria de agradecer a atenção.

Esse link que vc me passou não consigo acessar pela politica da empresa , será vc teria outro.

agradeço desde de já.