问题背景:客户在访问https服务的API接口的时候使用postman进行测试,发现SSL提示没有有效的证书,如下如所示:

关闭Postman的SSL检验是可以正常返回的,HTTPS直接使用浏览器打开也是可以正常打开的,初步怀疑问题处在证书层面。

接下来开始:

1.首先找打了我的网站进行同样的测试步骤,先使用postman进行也没的api
GET请求,发现在Postman开启ssl校验的时候是可以正常返回的,所以很好的找到了一个对比测试的实例。

2.既然问题不是出现在业务逻辑上,而是SSL层面,那第二步使用opsenssl命令对比SSL握手的过程,对比差异性。

openssl测试命令为:

openssl s_client -CAfile /root/ca-bundle.pem -connect www.lixdx.cn:443
 -msg

对比SSL握手中的差异,找到了问题点:

异常的返回中:

在对比正常的返回:
发现在证书链的位置,有异常的服务器节点的少了关于根证书颁发机构的信息,第一时间想到可能是配置的服务器证书链不完整。

3.既然有了猜测那就进行下一步的测试,找到用户询问客户在配置证书的时候有没有完整的导入证书。

因为我们一般在给CA机构申请证书的时候会给到这样的几种格式的证书:
Nginx版本呢证书文件打开是一个,但是apache的会把证书链和证书分成两个文件。

怀疑用户在使用了Apache的时候没有做证书的bundle。

4、有了猜测,就开始进行正式的测试,将apache的证书重新bundle后导入,

Bundle的方式和顺序如下:

使用文本打开服务器证书和证书链,将证书链的全部文件复制粘贴到服务器证书的下面:记住顺序很重要,服务器证书在最前面,证书链,根证书依次往后粘贴。

重新配置新的证书文件,经过验证恢复正常。