编辑: -尝试格式化问题并在我的博客中以更明显的方式接受答案
这是原始问题.
我收到此错误:
详细消息sun.security.validator.ValidatorException:PKIX路径构建失败:
sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径导致javax.net.ssl.SSLHandshakeException:sun.security.validator.ValidatorException:PKIX路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到所请求目标的有效证书路径
我使用Tomcat 6作为网络服务器.我有两个HTTPS Web应用程序安装在不同端口上但位于同一台机器上的不同Tomcats上.说App1(port 8443)和
App2(port 443).App1连接到App2.当App1所连接到App2我得到上述错误.我知道这是一个非常常见的错误,所以在不同的论坛和网站上遇到了很多解决方案.我有server.xml两个Tomcats 的以下条目:
keystoreFile="c:/.keystore"
keystorePass="changeit"
Run Code Online (Sandbox Code Playgroud)
每个站点都说同样的原因,即app2提供的证书不在app1 jvm的可信存储中.当我试图在IE浏览器中访问相同的URL时,这似乎也是正确的,它可以工作(加热,这个网站的安全证书存在问题.在这里我说继续这个网站).但是当Java客户端(在我的情况下)遇到相同的URL时,我得到上述错误.所以把它放在信任库中我试过这三个选项:
选项1
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
Run Code Online (Sandbox Code Playgroud)
Option2 在环境变量中设置如下
CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)
选项3 在环境变量中设置如下
JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value
Run Code Online (Sandbox Code Playgroud)
但没有任何效果.
最后工作的 是执行如何使用Apache HttpClient处理无效SSL证书中建议的Java方法?由Pascal Thivent执行,即执行程序InstallCert.
但这种方法适用于devbox设置,但我无法在生产环境中使用它.
我很奇怪,为什么上面提到的三种方法时,我已经中提到的相同值没有工作server.xml的app2服务器和相同的价值观信任设置
System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit"); …
我在本地计算机上安装 SQL Server 并将其嵌入到我的 Spring Boot 应用程序中。启动Tomcat后出现以下错误:
'PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target'. ClientConnectionId:85411829-6853-4fdb-9373-b4c93e1d5e8f
我知道这个错误有详细记录。我遵循了许多指南并阅读了很多相关内容,但我发现的所有建议都没有解决我的问题。
我做了什么:
从网站下载随机 SSL 证书并将其添加到 Java 目录中的 cacert 文件中(在此处进行描述)。
为 SQL Server 配置 Spring Boot(此处描述)
为 SQL Server 配置 SSL 加密(此处描述)
这些建议都没有解决该错误。我唯一意识到的是,如果我设置spring.jpa.hibernate.ddl-auto程序application.properties会none显示错误消息,但它不会中止运行。
application.properties 如下所示:
spring.datasource.url=jdbc:sqlserver://localhost;databaseName=Car
spring.datasource.username=admin
spring.datasource.password=password123
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
server.port=8443
server.ssl.key-alias=selfsigned_localhost_sslserver
server.ssl.key-password=changeit
server.ssl.key-store=classpath:ssl-server.jks
server.ssl.key-store-provider=SUN
server.ssl.key-store-type=JKS
Run Code Online (Sandbox Code Playgroud)
我的依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId> …Run Code Online (Sandbox Code Playgroud)