HttpClient オブジェクトを使用してWebサイトに接続しようとしています。私たちが通常使用しているWebサイト(Googleのように)では問題なく機能します。しかし、ウェブサイトがあります。接続しようとすると、プログラムでこのエラーが発生します。
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
ブラウザからこのURLにアクセスしようとすると、続行をクリックする必要があります。そうでない場合、ブラウザはページをロードしません。 プライバシーエラーがあなたの接続はプライベートではないと言っています。
Java application ..?)でこの問題を解決するにはどうすればよいですか?エラーや確認を求めずにソフトウェアをそのURLに接続します。
TrustSelfSignedStrategy オブジェクトを HttpClient への信頼マテリアルとして使用したときに問題が解決しました。
httpClient = HttpClients.custom()
.setSSLSocketFactory(new SSLConnectionSocketFactory(SSLContexts.custom()
.loadTrustMaterial(null, new TrustSelfSignedStrategy())
.build()
)
).build();
私が使用したコードは上に示されています。
HttpClient4.xの場合、以下はすべてを信頼します
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);
}