1、具体问题描述
小程序在开发环境下使用IP+端口的方式开发测试完成,但是在切换到域名并且配置了https之后,出现一种特别诡异的事情,小程序发布体验版之后,IOS系统的小程序可以正常访问小程序体验版,但是安卓系统无法正常访问,是不是很坑爹?
2、具体问题排查过程
-
2.1 从程序本身定位
仔细检查了所有的代码和配置文件,都是OK的,确认不是程序本身的问题导致。
-
2.2 域名生效时间延迟
最开始我们以为配置域名的生效时间有延迟,进行等待,等待了差不多两天还是无法访问,联系了客服,客服给的回复是有问题就到微信开发者社区发帖,寻求帮助,这不是跟没说一样,自己想办法吧。
-
2.3 https证书配置问题
使用域名和端口的方式可以正常访问,但是切换到域名必须要先配置https,那是不是https证书有问题呢?
于是在网上搜索了一番关于nginx和apache服务器配置https的区别,终于找到了症结所在,
Nginx 不像是 Apache 有专门的参数配置中间证书
Nginx 需要全部配置在服务器证书文件中
如果是使用的apache服务器,是可以直接配置中间服务证书的,ssl的证书配置一共包含三个子证书和一个publicKey,
三个子证书分别为:服务器证书、中间服务证书、root证书,
`Nginx不提供中间证书`
`Nginx不提供中间证书`
`Nginx不提供中间证书`
如果是使用的apache服务器,需要自己进行证书合并处理。
通过以下地址:可以检测证书是否正常安装
SSL服务器证书安装检查器地址: https://www.myssl.cn/tools/check-server-cert.html
如果证书查询结果如下说明就是中间文件缺失:
3、如何解决"nginx服务器缺少中间证书的问题"
- 3.1 首先打开已经下载好的crt或者cer证书文件并复制全部内容,如下:
- *3.2 将 .crt或 .pem或者.cer证书文件的内容复制到一下地址解析,得到中间证书和根证书:
SSL服务器证书解析: https://www.myssl.cn/tools/downloadchain.html
- 3.3 点击【复制到剪贴板】将生成的中间证书和根证书的内容复制,打开3.1中的证书将中间证书和根证书的完整内容追加到证书文件中,切记一定保存文件
- 3.4 重新上传证书到nginx服务器指定读取ssl证书目录下,然后重启nginx服务器
# 测试配置是否正常
nginx -t
# 重新加载配置文件
nginx -s reload
- 3.5 重新检测域名的ssl证书是否正常配置
SSL服务器证书安装检查器地址: https://www.myssl.cn/tools/check-server-cert.html
检测结果:
- 3.6 使用安卓手机再次访问小程序验证
安卓手机可以正常访问小程序了,至此问题解决。