0

我正面临PKIX路径构建失败的这个问题,这就是我尝试过的......

  1. 我访问了我尝试访问的目标 URL

     (eg -> https://localdevchannel.master.info/Gate/CustomerManagement/rest/resources/search)
    

    我点击了“LOCK”图标并导出了证书。

  2. 我在命令下运行...

    keytool -importcert -file sec.cer -storepass changeit -keystore "C:/Program Files/Java/jdk-11.0.2/jdk-11.0.2/lib/security/cacerts" -alias secCert

  3. 证书放置成功。但我仍然面临这个问题。请帮助我做错了什么?

    javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    
4

1 回答 1

1

好的,

如果您的证书已过期,或者您的商店中不存在,或者您更新了另一个 cacert 文件,并且您的 java/和/或应用程序正在查找/使用另一个,您会收到此异常。

1-检查您的 cacert 文件以实际查看 CERT 是否已添加其别名。

从 JDK/jre/bin 内部,您可以找到 keytool.exe 您可以像下面这样调用它来读取 cacerts 文件:

susan@SE-00018098 /c/Program Files/Java/jdk1.7.0_80/jre/bin

$ keytool.exe -list -keystore ../lib/security/cacerts
Enter keystore password:
Keystore type: jks
Keystore provider: SUN

Your keystore contains 92 entries

digicertassuredidrootca, 2008-apr-16, trustedCertEntry,
Certificate fingerprint (SHA1): 05:63:B8:63:0D:62:D7:5A:BB:C8:AB:1E:4B:DF:B5:A8:99:B2:4D:43
trustcenterclass2caii, 2008-apr-29, trustedCertEntry,
Certificate fingerprint (SHA1): AE:50:83:ED:7C:F4:5C:BC:8F:61:C6:21:FE:68:5D:79:42:21:15:6E
thawtepremiumserverca, 2009-dec-11, trustedCertEntry,
Certificate fingerprint (SHA1): E0:AB:05:94:20:72:54:93:05:60:62:02:36:70:F7:CD:2E:FC:66:66
swisssignplatinumg2ca, 2008-okt-31, trustedCertEntry,

2-如果是,它是否已过期?检查日期。

3-确认您的应用程序/java运行时是否正在使用您刚刚更新的cacert文件(您是否安装了多个Java版本?您的(Java_home)是什么?

======== 已编辑

如果证书存在,并且没有过期,并且您 100% 确定它是正确的证书,那么您的应用程序/或容器可能没有查看 cacert 文件。

试试下面的 hack:我认为这是一个 hack,因为你正在硬编码一个路径,当你在不同的服务器上部署时可能/不存在。

有很多方法可以创建您自己的信任库和密钥库存储并在应用程序本身中使用它们,然后您可以将它们合并到您的代码中,但尝试看看其余代码是否有效。

在您的 https 连接代码之前设置系统属性:

System.setProperty("javax.net.ssl.trustStore", "java_home_path/jre/lib/security/cacerts");  

替换为 cacerts 文件的正确路径并尝试。

于 2020-12-01T14:46:41.280 回答