背景
前提
- 阿里云购买一台ECS实例
- 阿里云购买一套绑定指定域名的DV SSL证书
- 开通公众号
现象
- 通过http校验token成功
2. 通过https校验token失败
原因分析
- 查看nginx日志
当通过http校验时,nginx有正常请求的日志,通过https校验时,access.log和error.log都没有记录。结论是:通过https校验的方式,请求没有到服务
-
通过curl、浏览器和postman均能够调通https的接口。结论:nginx和应用服务没有问题
-
担心是否是证书的问题,去阿里云提工单,回复没问题。一般这个时候就是有问题了。
分析
- 浏览器之所以没有出现https不安全的提示,是因为PC浏览器内置了绝大部分的证书链,所以即使只有域名证书,浏览器也极有可能找到对应的中间证书,最后找到根证书。
- 通过命令执行
openssl s_client -connect <ip>:443 -servername <domain>
发现,确实没有中间证书,没有部署证书链。
- 下载SSL证书到本地,和服务器上的SSL做关于cert.pem的对比
下载到本地的证书,是有中间证书的
部署到服务器上的,没有中间证书
- 手动更改服务器上的SSL证书之后,成功通过https的token校验
结论
阿里云购买SSL证书之后,可以有快捷入口自动部署到服务器上,但是出现这个问题,也确实多少有点说不过去。从产品上来说,虽然提供了证书链这个选项,但是不是必填项,而且没有任何提示,这个问题抛出来的还不少,既然产品的用户,有学生、有小公司,本身专业性就不强,在这一块应该考虑到用户的体验。出了问题,排查问题的效率的专业性个人觉得还可以做得更好一些。