3
respostas

Erro ao compilar

códigoMas ao compilar estou enfrentando o seguinte erro:

"C:\Program Files\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.3\lib\idea_rt.jar=57110:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\screenmatch\out\production\screenmatch br.com.alura.principal.PrincipalComBusca
Exception in thread "main" javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.net.http/jdk.internal.net.http.HttpClientImpl.send(HttpClientImpl.java:578)
    at java.net.http/jdk.internal.net.http.HttpClientFacade.send(HttpClientFacade.java:123)
    at br.com.alura.principal.PrincipalComBusca.main(PrincipalComBusca.java:19)
Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:131)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:378)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:321)
    at java.base/sun.security.ssl.TransportContext.fatal(TransportContext.java:316)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(CertificateMessage.java:1351)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(CertificateMessage.java:1226)
    at java.base/sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(CertificateMessage.java:1169)
    at java.base/sun.security.ssl.SSLHandshake.consume(SSLHandshake.java:396)
    at java.base/sun.security.ssl.HandshakeContext.dispatch(HandshakeContext.java:480)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1277)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask$DelegatedAction.run(SSLEngineImpl.java:1264)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:712)
    at java.base/sun.security.ssl.SSLEngineImpl$DelegatedTask.run(SSLEngineImpl.java:1209)
    at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
    at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.lambda$executeTasks$3(SSLFlowDelegate.java:1118)
    at java.net.http/jdk.internal.net.http.HttpClientImpl$DelegatingExecutor.execute(HttpClientImpl.java:157)
    at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.executeTasks(SSLFlowDelegate.java:1113)
    at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate.doHandshake(SSLFlowDelegate.java:1079)
    at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader.processData(SSLFlowDelegate.java:484)
    at java.net.http/jdk.internal.net.http.common.SSLFlowDelegate$Reader$ReaderDownstreamPusher.run(SSLFlowDelegate.java:268)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$LockingRestartableTask.run(SequentialScheduler.java:205)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:149)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$TryEndDeferredCompleter.complete(SequentialScheduler.java:347)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$CompleteRestartableTask.run(SequentialScheduler.java:151)
    at java.net.http/jdk.internal.net.http.common.SequentialScheduler$SchedulableTask.run(SequentialScheduler.java:230)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at java.base/sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:439)
    at java.base/sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:306)
    at java.base/sun.security.validator.Validator.validate(Validator.java:264)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:285)
    at java.base/sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:144)
3 respostas

Baixe o certificado SSL acessando o servidor pelo navegador e exportando o certificado e tentei executar o código abaixo e deu o erro: erro

Olá Milena! Tudo bem?

Pelo erro que você está enfrentando, parece que o problema está relacionado à validação do certificado SSL durante a tentativa de estabelecer uma conexão segura com um servidor HTTPS.

O erro javax.net.ssl.SSLHandshakeException: PKIX path building failed indica que o Java não conseguiu validar o certificado do servidor porque não encontrou um caminho de confiança para a certificação do certificado. Isso geralmente ocorre quando o certificado do servidor não é confiável ou quando o certificado raiz correspondente não está presente no keystore de confiança do Java.

Aqui estão algumas soluções que você pode tentar para resolver esse problema:

  1. Adicionar o Certificado ao Keystore de Confiança do Java: Se você confia no certificado do servidor, uma solução é adicionar o certificado (ou a cadeia de certificados) ao keystore de confiança do Java. Você pode fazer isso usando a ferramenta keytool que vem com o JDK. Aqui está um exemplo de como fazer isso:

    keytool -import -alias "server" -file server.crt -keystore path/to/cacerts -storepass changeit
    

    Substitua "server.crt" pelo arquivo de certificado do servidor e "path/to/cacerts" pelo caminho para o keystore de confiança do Java, que geralmente é algo como jre/lib/security/cacerts.

  2. Desativar a Verificação de SSL: Como uma medida temporária (não recomendada para produção), você pode desativar a verificação de SSL para contornar o problema. Isso pode ser feito configurando o HttpClient para confiar em todos os certificados, independentemente de sua validade. Aqui está como você pode fazer isso:

    HttpClient client = HttpClient.newBuilder()
        .sslContext(SSLContext.getInstance("TLSv1.3"))
        .build();
    

    No entanto, isso deve ser usado com cautela, pois torna sua aplicação vulnerável a ataques man-in-the-middle.

  3. Atualizar o Java: Certifique-se de que você está usando uma versão atualizada do Java, pois versões mais novas podem ter o keystore atualizado com certificados mais recentes.

  4. Verificar o URL e o Certificado: Verifique se o URL que você está tentando acessar está correto e se o certificado do servidor é válido. Você pode fazer isso acessando o URL em um navegador e examinando as informações do certificado.

Espero que essas sugestões ajudem a resolver o problema que você está enfrentando. Se precisar de mais assistência, sinta-se à vontade para perguntar.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Tentei desativar a verificação do SSL e retornou o seguinte erro:

O que pode ser feito?

erro