1
resposta

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

Ao executar o conteúdo da aula " Implementando a comunicação com o web service " , com o código abaixo:

package br.com.alura.screenmatch.principal;

import java.io.IOException; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse;

public class PrincipalComBusca { public static void main(String[] args) throws IOException, InterruptedException {

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://www.omdbapi.com/?t=matrix&apikey=19ba4e45"))
            .build();

    HttpResponse<String> response = client
            .send(request, HttpResponse.BodyHandlers.ofString());

    System.out.println(response.body());


}

}

Retornou a mensagem de erro abaixo:

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

Segui alguns tutoriais mas sem sucesso.

Alguém poderia me auxiliar?

1 resposta

Oii

Pode ser que o certificado do servidor não esteja na lista de Certificados de Autoridade de Certificação (CA) confiáveis do Java, ou o servidor tá usando um certificado autoassinado, essas paradas.

Uma saída pra esse pepino seria jogar o certificado do servidor na lista de certificados confiáveis do Java.

cê precisa baixar o certificado SSL do servidor. Pode ser pelo navegador, clicando no cadeado perto da URL e exportando o certificado, ou se quiser dar um trato pelo terminal, usa esse comando com openssl:

echo -n | openssl s_client -connect www.omdbapi.com:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/omdbapi.crt

Depois, cê joga esse certificado na lista de certificados do Java. O arquivo que tem essa lista geralmente é o cacerts e fica lá em /lib/security dentro do diretório de instalação do Java. Cê usa o comando keytool pra fazer isso:

sudo keytool -import -alias omdbapi -keystore /caminho/do/java/cacerts -file ~/omdbapi.crt

Ah, lembra de trocar /caminho/do/java pelo lugar onde o seu Java tá instalado. A senha padrão do cacerts é 'changeit', a menos que você tenha mudado.

É isso aí! Só mexe nesses certificados do Java se confiar mesmo no servidor que tá tentando conectar. Boa sorte nos estudos!