TECNOLOGIA – Funções HTTP – Erro ao executar requisição HTTP - PKIX path building failed
Incidente
Na utilização de funções da Tecnologia para requisições HTTP (exemplo: HTTPGet, HTTPPost), ao efetuar a chamada a um determinado Servidor/API ocorre a mensagem:
Erro ao executar requisição HTTP (GET/POST):
[Exceptio] java.ws.rs.ProcessingException
ExceptionMessage: javax.net.ssl.SSLHanshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Causa
Essa mensagem é apresentada, pois o parâmetro 'Habilitar uso de rotinas auxiliares'/'Habilitar protocolos TLS 1.2 e 1.3 em aplicativos WIN32(G5)' está ativado, na aba Conexões da rede, sub-aba Acesso à internet, seção Requisições REST do SeniorConfigCenter; e o certificado do servidor que está atendendo a requisição não foi considerado válido pelo Java utilizado pelo sistema para fazer a requisição.
Solução
Importante:
Os procedimentos descritos nesse artigo devem ser executados por um profissional que tenha conhecimento em certificado digital e Java, bem como tenha domínio do ambiente/servidor onde as aplicações estão instaladas.
Para executar o processo, o Aplicativo Portecle será utilizado (aplicativo é em inglês). É de responsabilidade do responsável pelo ambiente/servidor garantir a correta execução desse aplicativo no ambiente (pode ser necessária a instalação do JavaWebStart e ainda a adição do endereço de acesso ao aplicativo na Lista de Exceções de Sites do Java.
Para que a mensagem não seja apresentada nas requisições HTTP, realize os passos a seguir:
1. Acesse o endereço que você deseja fazer a chamada via HTTP através de um navegador da Web e acesse o certificado digital do endereço:
2. Salve o certificado digital acessando a opção Copiar para Arquivo da guia Detalhes:
3. Selecione a opção X.509 binário codificado por DER (*.cer) no momento de salvar o arquivo do certificado:
4. Abra o aplicativo Portecle (ele está disponível em http://portecle.sourceforge.net/webstart/portecle.jnlp) e acesse a opção Open Keystor File do menu File:
5. Abra o arquivo cacerts que fica armazenado no diretório de instalação dos sistemas da Senior. Exemplo de diretório: C:\Senior\java\jre\lib\security. A senha padrão para abrir o arquivo é changeit;
6. Acesse a opção Import Trusted Certificate do menu Tools:
7. Selecione o certificado .CER salvo durante a execução do passo 2;
8. Confirme a instalação do certificado digital selecionado (várias mensagens de confirmação pode ser exibidas). Será solicitado o apelido (alias) para o certificado. Sugerimos deixar o apelido sugerido pelo Portecle;
9. Ao final do processo de importação a mensagem abaixo será exibida e o certificado digital deverá aparecer na listagem de certificados:
10. Acesse a opção Save Keystore do menu File para salvar o arquivo cacerts:
11. Reinicialize a aplicação da Senior que precisa efetuar a chamada HTTP. Caso a chamada esteja sendo realizada a partir do Middleware Senior, o Middleware deverá ser reiniciado.
Observação
Os procedimentos descritos acima devem ser repetidos em outros servidores de aplicação/Middleware/Estação que por ventura façam chamadas para o endereço HTTP em questão.
Exemplo: se existem três servidores de Middleware diferentes fazendo a execução de uma regra via processo agendado, cada um dos servidores de Middleware deverá ter o arquivo cacerts atualizado conforme esse procedimento.
Para facilitar o processo, o arquivo cacerts atualizado poderá ser copiado de um servidor para outro, não precisando efetuar o procedimento pelo Portecle novamente.
Importante
Caso a parametrização acima for realizada e o incidente continuar acontecendo ou ocorrendo, é necessário analisar as definições do ambiente pois pode haver bloqueio de rede/firewall, fazendo com que o sistema não consiga enxergar a extensão do certificado no momento da requisição.