记一次微信公众号服务配置的坑

260 阅读2分钟

背景

前提

  1. 阿里云购买一台ECS实例
  2. 阿里云购买一套绑定指定域名的DV SSL证书
  3. 开通公众号

现象

  1. 通过http校验token成功

image.png 2. 通过https校验token失败

image.png

原因分析

  1. 查看nginx日志

image.png

image.png 当通过http校验时,nginx有正常请求的日志,通过https校验时,access.log和error.log都没有记录。结论是:通过https校验的方式,请求没有到服务

  1. 通过curl、浏览器和postman均能够调通https的接口。结论:nginx和应用服务没有问题

  2. 担心是否是证书的问题,去阿里云提工单,回复没问题。一般这个时候就是有问题了。

image.png

分析

  1. 浏览器之所以没有出现https不安全的提示,是因为PC浏览器内置了绝大部分的证书链,所以即使只有域名证书,浏览器也极有可能找到对应的中间证书,最后找到根证书。
  2. 通过命令执行openssl s_client -connect <ip>:443 -servername <domain>

image.png

发现,确实没有中间证书,没有部署证书链

  1. 下载SSL证书到本地,和服务器上的SSL做关于cert.pem的对比

下载到本地的证书,是有中间证书的

image.png

部署到服务器上的,没有中间证书

image.png

  1. 手动更改服务器上的SSL证书之后,成功通过https的token校验

image.png

结论

阿里云购买SSL证书之后,可以有快捷入口自动部署到服务器上,但是出现这个问题,也确实多少有点说不过去。从产品上来说,虽然提供了证书链这个选项,但是不是必填项,而且没有任何提示,这个问题抛出来的还不少,既然产品的用户,有学生、有小公司,本身专业性就不强,在这一块应该考虑到用户的体验。出了问题,排查问题的效率的专业性个人觉得还可以做得更好一些。