- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
编辑: 我试图在我的 blog 中以更形象的方式格式化问题和接受的答案。 .
这是原始问题。
我收到这个错误:
detailed message sun.security.validator.ValidatorException: PKIX pathbuilding failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable tofind valid certification path to requested targetcause javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException: PKIX path buildingfailed: sun.security.provider.certpath.SunCertPathBuilderException:unable to find valid certification path to requested target
我使用 Tomcat 6 作为网络服务器。我在同一台机器上的不同端口上的不同 Tomcat 上安装了两个 HTTPS Web 应用程序。说 App1(端口 8443)和 App2(端口 443)。 App1 连接到 App2。当 App1 连接到 App2 时,出现上述错误。我知道这是一个非常常见的错误,因此在不同的论坛和网站上遇到了许多解决方案。我在两个 Tomcat 的 server.xml
中都有以下条目:
keystoreFile="c:/.keystore"
keystorePass="changeit"
每个站点都说 app2 提供的证书不在 app1 jvm 的受信任存储中的相同原因。当我尝试在 IE 浏览器中访问相同的 URL 时,这似乎也是正确的(随着变暖,该网站的安全证书存在问题。在这里我说继续访问该网站)。但是当 Java 客户端(在我的例子中)访问相同的 URL 时,我得到了上面的错误。所以为了把它放在信任库中,我尝试了这三个选项:
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
在环境变量下面设置
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
在环境变量下面设置
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
但没有任何效果。
最后起作用的是执行 How to handle invalid SSL certificates with Apache HttpClient? 中建议的 Java 方法通过 Pascal Thivent,即执行程序 InstallCert。
但这种方法适用于 devbox 设置,但我不能在生产环境中使用它。
我想知道为什么当我通过设置在 App2 服务器的 server.xml
中提到相同的值并在信任库中提到相同的值时,上面提到的三种方法不起作用
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") 和 System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
在 App1 程序中。
有关更多信息,这就是我建立连接的方式:
URL url = new URL(urlStr);
URLConnection conn = url.openConnection();
if (conn instanceof HttpsURLConnection) {
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();
conn1.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
reply.load(conn1.getInputStream());
最佳答案
您需要将 App2 的证书添加到所用 JVM 的信任库文件中,该文件位于 $JAVA_HOME\lib\security\cacerts
.
首先,您可以通过运行以下命令检查您的证书是否已在信任库中:keytool -list -keystore "$JAVA_HOME/jre/lib/security/cacerts"
(不需要提供密码)
如果您的证书丢失,您可以通过使用浏览器下载并使用以下命令将其添加到信任库中来获取它:
keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>
示例:
keytool -import -noprompt -trustcacerts -alias myFancyAlias -file /path/to/my/cert/myCert.cer -keystore /path/to/my/jdk/jre/lib/security/cacerts/keystore.jks -storepass changeit
导入后您可以再次运行第一个命令来检查您的证书是否已添加。
可以找到Sun/Oracle 信息here .
关于java - 解决 javax.net.ssl.SSLHandshakeException : sun. security.validator.ValidatorException : PKIX path building failed Error?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53149846/
我已将所有插件设置为与 Maven 一起使用,但是当我尝试编译我的 Maven 项目时 使用以下命令 mvn clean install -Dmaven.test.skip=true 我在 cmd
我正在构建一个必须调用两个网络服务的服务器。 Web 服务具有相同的 CA 证书 (PKCS12)。 第一个通过 GET 接收请求,另一个通过 SOAP 调用接收请求。 遵循为 GET 请求创建连接的
我正在尝试使用java通过gmail发送邮件但我遇到了一些异常(exception)代码如下: public static void send_java_mail() throws IOExcept
这个问题在这里已经有了答案: Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorExce
我今天注意到,我的服务拒绝 API 证书。它不是自签名证书,而是 let's encrypt 颁发的证书。我发现它在浏览器和一些在线证书检查工具中看起来不错。它上周一直运行良好 - 但不知何故在周末停
我正在尝试用 Java 下载 https url 的内容,但什么时候出现此错误。 PKIX path building failed: sun.security.provider.certpath.S
我们运行标准的 Linux、Apache、Tomcat、Java 堆栈。 一个多月前,我们遇到了一个问题,我们连接的其中一项服务在一夜之间更新了他们的数字证书,这打破了信任链。我们收到错误消息 sun
在此先感谢您的帮助。 我针对部署到非安全内部 QA 环境的 API 在 Java TestNG 中开发了一套 API 测试。最近,这个应用程序被重新部署到一个新的、安全的环境中。发生这种情况时,我开始
我刚刚为我们的域购买了一个新的通配符 ssl 证书,因为我们的旧证书即将到期。我已将它安装在我们的 cas 服务器和我们的应用程序服务器上,但是我在我们的应用程序服务器上得到以下堆栈跟踪: Messa
很抱歉打开另一个相同主题的问题,但我认为这个子问题会使 other one 膨胀被遗忘。 我遇到了提到的错误消息,它非常不具体(至少对我而言)。调试输出显示证书已加载,然后仅显示提到的错误。我用自己的
报错问题如图: 仔细看报错问题后发现,这个错误的主要原因是: ValidatorException:PKIX path building failed : sun.security.provi
我一直在寻找关于 的一些解决方案javax.net.ssl.SSLHandshakeException:PKIX 路径构建失败:sun.security.provider.certpath.SunCe
我正在运行 wso2 中的 Playground2 示例 post ,当我提交获取访问 token 的表单时出现以下错误 javax.net.ssl.SSLHandshakeException: su
我正在尝试使用 jhipster 生成基于角度的应用程序,但当我尝试运行 ./mvnw 时,PKIX 路径构建失败。下面我附上了我的应用程序生成步骤和错误日志。我使用的是 macOS Mojave,节
我正在尝试 flutter 和 react-native(我是初学者开发人员),我必须为我的公司构建一个小型原型(prototype),但我无法通过“运行我的第一个应用程序”这一步由于证书错误(详见下
我突然遇到一个问题场景是我在 selenium 中有 TestNG 项目,当我在执行测试用例后执行测试用例时,我使用 gmail smpt 和端口 465 调用在另一个类“SendMail.java”
我有一组用 Java 编写的“包装器”服务,运行在 AWS 上的 Tomcat 8 上,它们调用客户端的一组 MIME 服务。当我尝试调用他们的服务时,我得到一个 SSLHandshakeExcept
在将我的应用程序从 Windows 2000 迁移到 Windows 2008 R2 Server 后,我花了将近一周的时间才让我的应用程序正常运行。 过程: 已安装 Java JDK 1.7.0_2
我目前正在尝试将我的 spring boot 微服务连接到 keycloak,以验证来自前端的所有 token 并验证用户。为此,我将 keycloak 适配器用于 spring boot。这是我第一
我正在使用 Liferay 和 eclipse,并使用加密套接字 (SSL) 运行客户端/服务器模型。 目前,当我以批处理模式运行应用程序时,我的应用程序运行客户端/服务器连接正常,但是当我尝试在 E
我是一名优秀的程序员,十分优秀!