看到 SSLFactory 使用的密钥库了吗?异常:“sun....certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”
Posted
技术标签:
【中文标题】看到 SSLFactory 使用的密钥库了吗?异常:“sun....certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”【英文标题】:See keystore used by SSLFactory? Exception: "sun....certpath.SunCertPathBuilderException: unable to find valid certification path to requested target" 【发布时间】:2015-08-11 17:45:38 【问题描述】:Authorize.net 更新了他们的生产证书,现在我们的 SSL 代码正在生成以下异常:
Exception 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
根据this blog post from Authorize.net,我们需要在我们的服务器上安装新的根证书。我们这样做了,但异常仍然存在。所以现在怀疑是新证书没有安装到正确的密钥库中。我们如何查看代码正在使用哪个密钥库?
下面是代码:
SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket) factory.createSocket(addr,443);
是的,我们应该改用 Stripe,但是这个网站早在 Stripe 出现之前就已经建立了。 :(
【问题讨论】:
除非您在某处设置了javax.net.ssl.trustStore
系统属性,否则该代码将使用默认的 JRE cacerts
信任库。请小心更新它,因为您将在下一次 JRE 更新时丢失它。
@EJP 你从哪里获得默认的 JRE cacerts 值?
在$JRE_HOME/lib/security/cacerts.
@EJP 这行得通。添加您的评论作为答案,然后您就可以获得积分?
【参考方案1】:
解决方案是将该证书添加到 java cacerts 文件中,以便它被永久接受。
第 1 步:获取https://www.wikipedia.org 的根证书(或您要访问的任何网址)
-
在 chrome 浏览器中打开https://www.wikipedia.org。
在地址栏旁边找到锁定符号并单击它。
查看详情
单击层次结构中最顶部的证书并确认其尾部带有根 CA 短语。
拖放您在桌面上看到书面证书的图像。
就是这样!您获得了根证书!
第 2 步:将该证书添加到 java cacerts 文件中。
-
使用 jre bin 文件夹中的 keytool.exe。
触发以下命令将您的证书放入 cacerts 文件中
keytool –import –noprompt –trustcacerts –alias ALIASNAME -file /PATH/TO/YOUR/DESKTOP/CertificateName.cer -keystore /PATH/TO/YOUR/JDK/jre/lib/security/cacerts -storepass changeit
就是这样!你的问题解决了。
请注意
请确认给您此 PKIX 错误(KAFKA 使用的 JRE)的 jre 是您执行第 2 步的地方。如果您尝试处理另一个 jre 问题,情况会是这样。
只使用 JDK 中的一个 jre,这样会减少出现问题的机会。
【讨论】:
以上是关于看到 SSLFactory 使用的密钥库了吗?异常:“sun....certpath.SunCertPathBuilderException:无法找到请求目标的有效证书路径”的主要内容,如果未能解决你的问题,请参考以下文章