早上上班,正常巡检,发现有个微服务异常报错

[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

一开始以为是自身业务有问题,但是转念一想,该服务是个微服务,本身不牵扯到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

这个地址是啥呢?
直接访问,是一个ELB。
2023-12-11T02:40:16.png

在笔记本中搜索,原来发现是我们的商城网站pc.stesh.cn的地址。

为什么容器访问会报错呢?
在容器网络中,继续使用curl https://pc.stesh.cn提示证书错误,需要使用-k访问。但是使用浏览器可以正常访问。
这是为何呢?
2023-12-11T03:31:57.png

登录华为云,检查该ELB的SSL证书配置,发现证书里面只是配置了1个,没有中间证书链和根证书链

2023-12-11T03:32:21.png

网站证书 > CA 中间证书机构 > CA 根证书机构
-----BEGIN CERTIFICATE-----
网站证书
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
CA 中间证书机构
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
CA 根证书机构
-----END CERTIFICATE-----

日常,我们采用acme.sh脚本定期申请泛域名证书。现在将证书fullchain中的信息全部拷贝到华为云SSL证书配置框内,提示报错。但是删掉前两个是正常。

于是,使用证书链补全网站对证书进行补全,然后复制到华为云ELB SSL证书配置业内,居然成功了。
对比了证书链补全的信息与acme.sh申请出来的证书发现,前者没有空行,而后者有空行。
2023-12-11T02:45:36.png

现在想想,搞了一个乌龙。上次补充证书的时候,由于华为云报错,我只粘贴了最后一段。而且导致pc.stesh.cn访问异常。现在正常了。

最后修改:2024 年 05 月 11 日
如果觉得我的文章对你有用,请随意赞赏