Java 带证书的Https
我无法使用以下代码调用https URL:Java 带证书的Https,java,https,Java,Https,我无法使用以下代码调用https URL: try (CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(getRequestConfig()) .setSSLSocketFactory(SSLConnectionSocketFactory.getSystemSocketFactory()) .setDefaultCredentialsProvider(cred
try (CloseableHttpClient httpclient = HttpClients.custom().setDefaultRequestConfig(getRequestConfig())
.setSSLSocketFactory(SSLConnectionSocketFactory.getSystemSocketFactory())
.setDefaultCredentialsProvider(credsProvider).setRoutePlanner(getRoutePlanner()).build()) {
...
...
我得到:
sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我已经在我的jre和重启服务器的cacert中添加了证书,但我的客户端已经显示了此消息,我可以检查什么?日志查看客户端是否使用我的cacert文件
编辑1
在ssl通信过程中,我在末尾看到了这一点:
Invalidated: [Session-17, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384]
http-nio-8080-exec-10, SEND TLSv1.2 ALERT: fatal, description = certificate_unknown
http-nio-8080-exec-10, WRITE: TLSv1.2 Alert, length = 2
在此之前,我可以在日志中看到我的证书
谢谢PKIX路径构建失败意味着您使用HTTP客户端成功访问了您尝试调用的服务器,服务器正在发回自己的证书,在客户端验证过程中,验证失败,因为它仍然不信任它。您提到您已经在cacerts(信任库)中导入了它,但请确保在该机器上有多个java版本的情况下,您将其导入了正确的机器。检查您的客户端使用的确切jdk,并重新检查cacerts,确保您需要信任的证书在那里。您如何运行应用程序?是通过IDE吗?通过Maven?格拉德尔?插件?纯java从终端?@SofoGial-its-throughtomcat@IoanM:在启动java#u home时,我会按此路径在jre/lib/security/cacerts中将带有keytool的证书添加到cacert,请参见我的编辑#1PKIX路径构建失败意味着使用HTTP客户端,您成功访问了尝试调用的服务器,服务器正在发回自己的证书,在客户端的验证过程中,验证失败,因为它仍然不信任它。您提到您已经在cacerts(信任库)中导入了它,但请确保在该机器上有多个java版本的情况下,您将其导入了正确的机器。检查您的客户端使用的确切jdk,并重新检查cacerts,确保您需要信任的证书在那里。您如何运行应用程序?是通过IDE吗?通过Maven?格拉德尔?插件?纯java从终端?@SofoGial-its-throughtomcat@IoanM:在显示启动java#U home时,我按此路径将带有keytool的证书添加到jre/lib/security/cacerts中的cacert,请参见我的编辑#1