- 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/42126193/
我收到以下错误。我将发布我正在做的代码明智的事情,然后将发布堆栈跟踪,我一直在努力寻找足够的信息来修复。我正在使用自签名证书。 SSLContext sslContext = null;
我拿了以下BalusC kickoff example并通过添加提交按钮和其他 h:messages 并删除 f:ajax 对其进行了修改。来自 h:inputSecret's (由于某种原因删除了
从星期一开始,我面临与sun.security.ValidatorException相关的问题。在上周一之前,一切正常。 异常(exception)是: 配置根项目“CoreApp”时发生问题。 Co
当我使用 Primefaces Maven 存储库时出现以下异常 mvn clean spring-boot:run [ERROR] Failed to execute goal on project
我正在尝试在 Ubuntu 16.04 上使用 sbt,但是在尝试运行它时出现错误。我进行了全新安装,然后完全按照 the sbt site 中的说明进行操作。 ,但是当我做 sbt 时得到以下信息:
我正在使用gradle构建springboot项目,但是gradle负载依赖性始终不好。错误如下: FAILURE: Build failed with an exception. * What we
我正在使用 REST Assured,但是当我尝试发送请求时,出现以下错误:- javax.net.ssl.SSLHandshakeException:sun.security.validator.V
我有一个用 Java 编写的 RESTful 客户端,用于使用 SSL 的 Web 服务。该应用程序已经运行了几个星期。突然之间,所有与 Web 服务进行交易的尝试都会导致以下异常: sun.secu
我目前代表一位正在度假的同事。他负责的一个应用这几天一直报如下错误。 Error: IOException sun.security.validator.ValidatorException: PKI
我正在研究中央认证系统 (jasig.org) 以实现单点登录功能对于我的 Intranet Web 应用程序。我有两个 tomcat 实例在我的同一台机器(windows)上运行。两个 tomcat
为了对我的 xmpp 堆栈进行集成测试,我在本地主机上设置了一个 vysper 服务器 (0.7)。现在我想使用版本 4.0.2 中的 smack-core 和 smack-tcp 连接到服务器。 问
我低于异常 sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.ce
以前,我可以成功地向 Web 服务发送请求并接收响应,但它现在返回以下异常。根据其他答案,我需要更新证书,但我需要知道为什么我现在收到此异常。另一个问题是,我可以找到我的 java_home 的地址,
创建了一台 Azure SQL Server 计算机,我能够进行 rdp 并通过本地 SQL Server Mgt Studio 客户端进行连接。 但是,我无法使用下面的连接字符串通过 Java 代码
DataGrip 无法连接到我的 Postgres 实例,但我可以通过终端上的 psql 正常连接: psql -h dbhost.com reps username >Password for us
我已经使用此命令创建了 CSR 请求: openssl req -out certificatecsr.csr -new -newkey rsa:2048 -keyout certificatekey
我们所处的场景是,公司代理正在解密所有 HTTPS 流量,并使用 Java 不信任的 CA ROOT 对其进行重新签名。 我们还面临无法修改 Java 目录中的 cacerts 文件的情况。 我们在许
org.apache.axis2.AxisFault:sun.security.validator.ValidatorException:PKIX 路径构建失败:sun.security.provid
我在服务器上安装了 apache、Tomcat7,我的请求从 apache 重定向到 tomcat。我在 apache 上安装了 SSL。我在我的应用程序中使用 goole api 进行一些身份验证。
我的公司运行一个用 ColdFusion MX7.0.2 构建的旧应用程序,运行 Java 1.4.2。我无法升级 ColdFusion,因为 CyberSource 不支持任何高于 MX7 的版
我是一名优秀的程序员,十分优秀!