gpt4 book ai didi

java - 为什么我会收到已知和受信任证书的 "No issuer certificate for certificate in certification path found"错误?

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:01 32 4
gpt4 key购买 nike

我正在尝试使用 Java Http 客户端连接到服务器以进行 Web 服务调用。如果我用下面的代码打开网络调试..

System.setProperty("javax.net.debug", "all");

我看到来自 Entrust 的证书似乎被添加为受信任的证书。添加的内容如下...

 adding as trusted cert:
Subject: CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net
Issuer: CN=Entrust.net Certification Authority (2048), OU=(c) 1999 Entrust.net Limited, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), O=Entrust.net
Algorithm: RSA; Serial number: 0x3863def8
Valid from Fri Dec 24 12:50:51 EST 1999 until Tue Jul 24 10:15:12 EDT 2029

似乎服务器正在使用来自 Entrust 的证书,因为我也在调试中看到...

main, READ: TLSv1 Handshake, length = 2649
*** Certificate chain
chain [0] = [0] Version: 3
SerialNumber: 1356119177
IssuerDN: C=US,O=Entrust\, Inc.,OU=See www.entrust.net/legal-terms,OU=(c) 2012 Entrust\, Inc. - for authorized use only,CN=Entrust Certification Authority - L1K
Start Date: Wed Jul 15 11:50:20 EDT 2015
Final Date: Sun Jul 15 18:27:04 EDT 2018

然而在握手过程中我得到以下异常...

***
Caught: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:
PKIX path building failed: java.security.cert.CertPathBuilderException:
No issuer certificate for certificate in certification path found.
main, SEND TLSv1 ALERT: fatal, description = certificate_unknown

最佳答案

我能够通过将服务器证书添加到我的 java 客户端(jre 的 cacerts 和 jssecacerts)来解决这个问题。

如果我们以这种方式向 java 客户端添加证书,我们就要求我们的 jre 信任该服务器的证书。

echo | openssl s_client -showcerts -connect www.xyz.com:443 2>&1 |
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/cert.pem

#cacerts
keytool -import -alias certname -file /tmp/cert.pem -keystore
/usr/java/jdk1.8.0_45/jre/lib/security/cacerts -storepass changeit

#jssecacerts(Normally we remove this file)
keytool -import -alias certname -file /tmp/cert.pem -keystore
/usr/java/jdk1.8.0_45/jre/lib/security/jssecacerts -storepass changeit

如果这段客户端代码是通过应用服务器执行的,请重启您的应用服务器

确保您在环境变量中有 openssl, keytool 并更改您各自的 JAVA_HOME 位置。

关于java - 为什么我会收到已知和受信任证书的 "No issuer certificate for certificate in certification path found"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40162500/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com