我一直在:
sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find
valid certification path to requested target
.
.
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.
ValidatorException: PKIX path building failed: sun.security.provider.
certpath.SunCertPathBuilderException: unable to find valid certification
path to requested target
在搜索如何解决此异常时,我遇到了一些我不理解的术语Keystore
。 Keystore简单来说是什么?它与SSL的关系如何?
答案 0 :(得分:114)
Keystore 可以参考三件事,具体取决于上下文。 (他们所有人都密切相关但略有不同。)
密钥库可以是存储私钥,证书和对称密钥的存储库。这通常是一个文件,但也可以以不同的方式处理存储(例如加密令牌或使用操作系统自己的机制。)
KeyStore
也是一个标准API的一部分。它本质上是一种加载,保存和与#34;物理"之一互动的方式。如上所述的密钥库。如果你只需要为你的应用程序提供API抽象,那么KeyStore
也可以纯粹在内存中。
如何加载和处理这样的KeyStore
实例取决于支持它的密钥库文件(或其他存储系统)的格式。 Multiple formats可用。一些最常见的是JKS和PKCS#12(.p12)。
"密钥库"也可以用作" truststore"的对应物。这是令人困惑的地方,因为" keystore"和"信任商店"是密钥库,它们只是用于不同的目的。您可以在this answer中找到更多详细信息。密钥库用于初始化密钥管理器,而信任库用于初始化信任管理器。来自JSSE reference guide:
A
TrustManager
确定是否进行远程验证 凭证(以及连接)应该是可信的。
KeyManager
确定要发送的身份验证凭据 到远程主机。
本质上,用作信任库的密钥库将包含您愿意信任的许多(CA)证书:这些是您将用于验证远程证书的信任锚。已经知道并信任。相反,用作密钥库的密钥库将包含您自己的证书及其私钥:这是您将用于向远程方验证自己的内容(如果需要)。
与JRE(/lib/security/cacerts
)捆绑在一起的默认信任库。没有默认密钥库,因为它通常是用户更明确的步骤。
在SSL / TLS的上下文中,密钥库(用作密钥库的密钥库)将是服务器存储其证书和私钥的位置(或者,当使用客户端证书身份验证时,客户端存储其证书和私有密钥键)。信任库(用作信任库的密钥库)将是客户端存储其愿意信任的CA的CA证书的位置,以便能够在连接到SSL / TLS服务器时验证服务器证书(类似地,在服务器端,这也是用于验证客户端证书的CA证书的存储位置。
通常,当您使用的任何证书无法验证您要连接的服务器的证书时,您所获得的错误(" ValidatorException: PKIX path building failed
")就会发生您正在使用的信任库。您通常需要在您的信任库中直接在您的信任库中存储服务器证书(只能在小规模上管理)或用于颁发该服务器证书的CA的CA证书(或链中的一个证书)礼物,当有链时)。
答案 1 :(得分:10)
简单来说,要建立与SSL端点的连接,您必须信任其公共证书。要信任证书,要么自身或其颁发者的证书必须在密钥库中。
将密钥库视为一组文件夹或包含证书的数据库/存储库。从物理上讲,它是JRE中的文件(/lib/security/cacerts
)。
可以使用JRE附带的keytool
命令修改此存储库。有关常见命令,请参阅this link。另一种方法是使用Java控制面板的证书对话框(这也与JRE一起安装):
答案 2 :(得分:0)
我也遇到了这个问题,因为我是在Java程序未使用的JDK中导入证书,因此请检查您程序的当前JDK,然后运行关键工具命令:
keytool -importcert –trustcacerts -alias [certificate name] -keystore "C:\Program Files\Java\jdk1.7.0_71\jre\lib\security\cacerts" -storepass changeit -file [certificate name].cer