Web 客户端应用程序收到 "unable to find valid certification path to requested target"
Web Client Application receives a "unable to find valid certification path to requested target"
我通过创建自定义证书成功地在远程服务器上的我的 weblogic 上配置了 HTTPS。
在客户端(与 运行 weblogic 不同的计算机),我使用从互联网上获得的 InstallCert.java 资源文件安装了服务器证书。我将 jssecacerts 文件复制到我的 JAVA_HOME/jre/lib/security/ 文件夹中,并编写了一个简单的 JAX-WS 独立应用程序来测试它:
URL url = new URL("https://IP:Port/app/service?wsdl");
QName qname = new QName("http://service.org/", "queryservice");
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals(IP));
Service service = Service.create(url, qname);
QueryService port = service.getPort(QueryService.class);
而且成功了!伟大的。精彩的。所以我在我的 web 应用程序上实现了同样的东西,将它部署在我笔记本电脑上的 weblogic 服务器上,然后我尝试访问相同的 web 服务,就像我的独立应用程序一样,我不断收到 sun.security.provider.certpath.SunCertPathBuilderException:
无法找到请求目标的有效证书路径异常。
我检查了几个教程,他们一直在说同样的话:一旦我将 jssecacerts 文件放入 JAVA_HOME/jre/lib/security/ 中,一切都应该没问题。
有什么我遗漏的吗?
好的。事实证明,weblogic 客户端服务器仅将 JRE 中的 cacerts 视为已识别的密钥库,而不是 jssecacerts。我不得不从 jssecacerts 导出服务器证书并将其导入 cacerts - 我错过了一个重要的步骤。
这些是步骤:
- 从此处获取 InstallCert.java 文件后:https://github.com/escline/InstallCert、运行 java InstallCert [host]:[port](当您 运行 命令时,输入要添加到列表中的证书的给定列表编号 - 可能只是 1)
- 运行 命令,keytool -exportcert -alias [host]-1 -keystore jssecacerts -storepass changeit -file [host].cer
- 然后 运行 这个命令:keytool -importcert -alias [host] -keystore
[系统密钥库路径] -storepass changeit -file [host].cer
之后,你应该会没事的。您的系统密钥库应该是 cacerts。
我通过创建自定义证书成功地在远程服务器上的我的 weblogic 上配置了 HTTPS。
在客户端(与 运行 weblogic 不同的计算机),我使用从互联网上获得的 InstallCert.java 资源文件安装了服务器证书。我将 jssecacerts 文件复制到我的 JAVA_HOME/jre/lib/security/ 文件夹中,并编写了一个简单的 JAX-WS 独立应用程序来测试它:
URL url = new URL("https://IP:Port/app/service?wsdl");
QName qname = new QName("http://service.org/", "queryservice");
HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> hostname.equals(IP));
Service service = Service.create(url, qname);
QueryService port = service.getPort(QueryService.class);
而且成功了!伟大的。精彩的。所以我在我的 web 应用程序上实现了同样的东西,将它部署在我笔记本电脑上的 weblogic 服务器上,然后我尝试访问相同的 web 服务,就像我的独立应用程序一样,我不断收到 sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径异常。
我检查了几个教程,他们一直在说同样的话:一旦我将 jssecacerts 文件放入 JAVA_HOME/jre/lib/security/ 中,一切都应该没问题。
有什么我遗漏的吗?
好的。事实证明,weblogic 客户端服务器仅将 JRE 中的 cacerts 视为已识别的密钥库,而不是 jssecacerts。我不得不从 jssecacerts 导出服务器证书并将其导入 cacerts - 我错过了一个重要的步骤。
这些是步骤:
- 从此处获取 InstallCert.java 文件后:https://github.com/escline/InstallCert、运行 java InstallCert [host]:[port](当您 运行 命令时,输入要添加到列表中的证书的给定列表编号 - 可能只是 1)
- 运行 命令,keytool -exportcert -alias [host]-1 -keystore jssecacerts -storepass changeit -file [host].cer
- 然后 运行 这个命令:keytool -importcert -alias [host] -keystore [系统密钥库路径] -storepass changeit -file [host].cer
之后,你应该会没事的。您的系统密钥库应该是 cacerts。