项目在调用https接口时报错:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
原因可能是更新换新证书后,HTTPS 域名的公钥证书不在 JDK/JRE 的证书库中,被Java认为是不可信的。
要在Java JDK中导入Let's Encrypt的根证书,您可以按照以下步骤进行操作:
下载Let's Encrypt的根证书(ISRG Root X1):
可以从Let's Encrypt官方网站下载最新的根证书。您可以在 https://letsencrypt.org/certificates/ 找到相应的证书。
将下载的根证书保存到您的计算机上。
使用Java的keytool工具将证书导入到JDK的信任存储中。在终端或命令提示符中运行以下命令:
keytool -import -trustcacerts -alias letsencryptisrgrootx1 -file /path/to/letsencrypt-root-x1.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
确保将/path/to/letsencrypt-root-x1.crt替换为您下载的Let's Encrypt根证书的实际路径。$JAVA_HOME是指向您的JDK安装目录的环境变量。
您可能需要输入Java信任存储的密码,默认密码是changeit。
您将被要求确认是否信任该证书。输入yes以确认。
导入成功后,您应该能够在JDK的信任存储中看到Let's Encrypt的根证书。
导入成功后,重启项目,就可以正常访问了;
还有一种办法就是,在请求代码中忽略证书验证;