解决在证书配置不当时的 x509 SSLHandshakeException PKIX path building failed
网站项目中一个重要的泛域名证书过期后, 由于更换了域名的托管服务商, 需要重新通过acme.sh配置申请信息,网站重新配置新的证书后仍然无法调用对应接口, 报错
1 |
|
但是通过浏览器是能够正常访问网页且不会报证书相关的错误的,后续发现是配置的证书链不完整导致的。
过程
证书重新申请
网站证书过期后,更换了域名的服务商(从国内服务商迁移到国外),为了防止旧的acme.sh配置影响后续的续期,直接删除了现有已过期的证书。
在这之后重新配置了Cloudflare的API密钥和Token,通过acme.sh进行了泛域名证书的申请。
完成证书申请后获得了包含域名命名(此处以example.com
举例)的下列文件:
1 |
|
错误配置
删除了旧Nginx的TLS配置后,自认为现在可以直接使用域名证书,进行了如下的重新配置。
1 |
|
完成以上操作后执行并重启了服务。
问题发生
更换完续期后的证书,API接口仍然无法通过Java访问,报错PKIX path building failed
,但是通过浏览器是能够正常访问网页且不会报证书相关的错误的。遂通过网络搜索相关问题,大多数是将证书存入本地的信任存储、或者直接忽略证书验证。这样对于一个登录接口显然是不安全的。
解决
经过仔细的检查,旧的配置使用的是完整链(包含CA),将配置文件中的证书路径指向fullchain.cer
,重启服务后,恢复正常。
1 |
|
结论
申请的证书在设置时推荐使用完整链的证书文件,如本文中提到的fullchain.cer
。
总而言之,浏览器可能忽略了一些东西,导致现在即使不包含CA,浏览器也不会认为有问题,但是如果代码突然出错了,先相信你的代码没有写错,再去排除问题。
解决在证书配置不当时的 x509 SSLHandshakeException PKIX path building failed
https://swai.top/share-19.html