现象是这样:一开始配置好服务器端https证书后,小程序跟APP都是可以正常访问服务器接口的。运行一段时间后,具体多长时间应该是没规律的。然后小程序端就会出现:wx.request:fail ssl hand shake error。
出现这个问题,第一时间想到的就是证书问题,起初以为证书过期了呢,到证书管理端查看,证书压根没有过期,此时用浏览器访问https的该网站,是可以正常访问的,浏览器端也不会提示任何异常信息,地址栏的证书检测也是正常的。
经过一番网络搜索后,终于找到解决方案,如下:
通过网站(https://www.myssl.cn/tools/check-server-cert.html)检测证书健康性,发现nginx使用pem配置的https证书,缺少个所谓的中间证书,具体这个中间证书是个什么鬼,这里先不做深入研究。下面是中间证书生成方式:
找到之前存档的证书文件夹,里面应该会有个crt结尾的证书文件,然后打开网站:https://www.myssl.cn/tools/downloadchain.html
用文本编辑器打开crt证书文件,复制第一段文本
然后放入如下所示文本框中:
点击下一步,然后“点击下载中间证书文件”即可。到此中间证书文件已成功生成。
把中间证书上传至服务器证书存档文件夹,
然后执行命令:cat 1_www.abc.com_bundle.crt > chain.crt
此时已经把中间证书跟之前的证书合二为一。
下面修改Nginx配置:
此处ssl_certificate的值之前为pem的文件 改为新生成并与之前证书融为一体的新证书chain.crt。
保存,并reload Nginx。回到小程序端,发现错误已经不复存在。
至此。问题完美解决!