提问人:horizon 提问时间:12/1/2020 更新时间:11/17/2023 访问量:2201
PKIX 路径构建失败:我向 carcert 添加证书仍然失败
PKIX path building failed : I added certificate to carcert still failing
问:
我在 PKIX 路径构建失败者中遇到了这个问题,这就是我尝试过的......
我转到了尝试访问的目标 URL
(eg -> https://localdevchannel.master.info/Gate/CustomerManagement/rest/resources/search)
我单击了“LOCK”图标并导出了证书。
我跑到命令下面......
keytool -importcert -file sec.cer -storepass changeit -keystore “C:/Program Files/Java/jdk-11.0.2/jdk-11.0.2/lib/security/cacerts” -别名 secCert
证书已成功放置。但我仍然面临这个问题。请帮忙,我做错了什么?
javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
答:
还行
如果您的证书已过期,或者您的商店中不存在,或者您更新了另一个 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- 确认您的 app/java 运行时是否正在使用 cacert 文件 您刚刚更新(您是否安装了多个 Java 版本?你的 (Java_home) 是什么
========已编辑
如果证书存在,并且未过期,并且您 100% 确定它是正确的证书,则您的应用程序/或容器可能没有查看 cacert 文件。
试试下面的黑客:我认为这是一个黑客,因为你是硬编码 在不同服务器上部署时可能存在/不存在的路径。
有多种方法可以创建自己的信任库和密钥库存储 并将它们放在应用程序本身中,然后您可以将它们合并到 您的代码,但尝试一下,看看其余的代码是否有效。
在 https 连接代码之前设置系统属性:
System.setProperty("javax.net.ssl.trustStore", "java_home_path/jre/lib/security/cacerts");
替换为 cacerts 文件的正确路径,然后尝试。
评论
在我找到所有答案后,我找到了这个解决方案,但没有人帮助。 我不知道为什么,但我更改了myprive.key,myepublic.crt 只是更改为 myprivate.key.pem 和 mypublic.pem
因此,只需了解如何将 .key 和 .crt 转换为 .pem
在那之后,它完美地工作。
我需要它进行声纳和一些 QA 测试
评论