Loading... 早上上班,正常巡检,发现有个微服务异常报错 ``` [ERROR] 2023-12-11 09:39:52.550 [http-nio-2010-exec-4] cn.zcyun.xcloud.personal.openapi.utils.YimaHttp - https请求异常:{}sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target ``` ![2023-12-11T02:36:24.png][1] 一开始以为是自身业务有问题,但是转念一想,该服务是个微服务,本身不牵扯到SSL证书。一般配置SSL证书是在负载均衡里面配置。 于是,恍然大悟,是该服务访问外界的SSL。 登录服务器,使用`docker inspect -f '{{.State.Pid}} 容器id'`找到process id,然后`nsenter -n -t $Pid`进入后。使用`tcpdump -i eth0 tcp port 443 -w 443.pcap -c 200`。 等了十几分钟,还没有结束。手动ctrl+c结束,然后看到收到了几十个包。使用`tsz 443.pcap`下载到本地。 然后,发现了一个ip地址124.70.28.136。 ![2023-12-11T02:39:20.png][2] 这个地址是啥呢? 直接访问,是一个ELB。 ![2023-12-11T02:40:16.png][3] 在笔记本中搜索,原来发现是我们的商城网站pc.stesh.cn的地址。 为什么容器访问会报错呢? 在容器网络中,继续使用`curl https://pc.stesh.cn`提示证书错误,需要使用`-k`访问。但是使用浏览器可以正常访问。 这是为何呢? ![2023-12-11T03:31:57.png][4] 登录华为云,检查该ELB的SSL证书配置,发现证书里面只是配置了1个,没有中间证书链和根证书链 ![2023-12-11T03:32:21.png][5] ``` 网站证书 > CA 中间证书机构 > CA 根证书机构 ``` ``` -----BEGIN CERTIFICATE----- 网站证书 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- CA 中间证书机构 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- CA 根证书机构 -----END CERTIFICATE----- ``` 日常,我们采用acme.sh脚本定期申请泛域名证书。现在将证书fullchain中的信息全部拷贝到华为云SSL证书配置框内,提示报错。但是删掉前两个是正常。 于是,使用证书链[补全网站][6]对证书进行补全,然后复制到华为云ELB SSL证书配置业内,居然成功了。 对比了证书链补全的信息与acme.sh申请出来的证书发现,前者没有空行,而后者有空行。 ![2023-12-11T02:45:36.png][7] 现在想想,搞了一个乌龙。上次补充证书的时候,由于华为云报错,我只粘贴了最后一段。而且导致pc.stesh.cn访问异常。现在正常了。 [1]: https://www.sddts.cn/usr/uploads/2023/12/3715461582.png [2]: https://www.sddts.cn/usr/uploads/2023/12/1436027722.png [3]: https://www.sddts.cn/usr/uploads/2023/12/2951094619.png [4]: https://www.sddts.cn/usr/uploads/2023/12/2154552276.png [5]: https://www.sddts.cn/usr/uploads/2023/12/3733562486.png [6]: https://myssl.com/chain_download.html [7]: https://www.sddts.cn/usr/uploads/2023/12/2803866392.png 最后修改:2024 年 05 月 11 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏