2015-05-06 19 views
6

Próbuję połączyć się z witryną za pomocą obiektu HttpClient. Działa dobrze na stronach internetowych, z których zwykle korzystamy (np. Google). Ale nie jest to strona internetowa, gdy próbuję się połączyć, mój program daje ten błąd ..Nie można znaleźć poprawnej ścieżki certyfikacji do żądanego celu - java

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) 
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1917) 
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:301) 
at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:295) 
at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1369) 
.................... 
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 sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387) 
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292) 
at sun.security.validator.Validator.validate(Validator.java:260) 
............... 

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 
at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:145) 
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131) 
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280) 
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382) 
... 27 more 

Kiedy staram się iść do tego adresu URL z przeglądarki, muszę kliknąć kontynuować anyway. W przeciwnym razie przeglądarka nie załaduje strony. Daje to prywatność błąd twoje połączenie nie jest prywatne.

Jak mogę rozwiązać ten problem w mojej aplikacji java ..? Chcę, aby moje oprogramowanie łączyło się z tym adresem URL bez żadnego błędu lub bez pytania o potwierdzenie.

Odpowiedz

9

Problem został rozwiązany, gdy użyłem obiektu TrustSelfSignedStrategy jako materiału zaufania do HttpClient.

 httpClient = HttpClients.custom() 
      .setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom() 
        .loadTrustMaterial(null, new TrustSelfSignedStrategy()) 
        .build() 
       ) 
      ).build(); 

Kod Kiedyś pokazano powyżej ..

2

Dla HttpClient4.x dodaje zaufa wszystkie

public static HttpClientBuilder createTrustAllHttpClientBuilder() { 
    SSLContextBuilder builder = new SSLContextBuilder(); 
    builder.loadTrustMaterial(null, (chain, authType) -> true);   
    SSLConnectionSocketFactory sslsf = new 
    SSLConnectionSocketFactory(builder.build(), NoopHostnameVerifier.INSTANCE); 
    return HttpClients.custom().setSSLSocketFactory(sslsf); 
} 
Powiązane problemy