我在腾讯云上部署了一台CentOS Stream的服务器,作为微信小程序的服务器端,web服务使用的是nginx 1.24.0,nginx有启用ssl模块。这台服务器之前是一直正常使用的,微信小程序小程序都能正常访问。
但在上个星期对服务器进行系统重装后,即使把所有环境都搭建好了,还是会出现如下的问题:
浏览器能通过https正常访问nginx提供服务的web网站,但是微信小程序和支付宝小程序打开都会报错,报错内容如下:
The SSL connection could not be established,see inner exception. The remote certificate is invalidaccording to the validation procedure.
通过网上搜索资料,怀疑是SSL证书的TLS版本有问题,貌似是重装系统前的TLS是1.2的版本,重装系统后变成1.3的版本,但是在重装系统之前,是有从服务器上备份证书文件下来,待重装系统后重新上传到服务器上的,我就纳闷一样的证书文件,为毛会出现这种情况。然后这几天已经排查过n多问题,记录如下:
- 域名和SSL证书都未过期,都是在腾讯云上申请的,所以可以排除了域名过期、证书过期和证书不受信任等问题。
- 服务器系统有安装openssl模块,否则浏览器无法通过https访问web网页,也排除了openssl模块缺失的问题;
- 在nginx的配置文件nginx.conf中,配置的ssl_certificate和ssl_certificate_key有分别指向存放在\usr\local\nginx\conf\路径下的.crt和.key证书文件,且浏览器能通过https访问web网页也证明该配置无误。文件中也有添加了对1.3版本的tls的支持:ssl_protocols TLSv1.2 TLSv1.3。所以这个配置信息应该也是没有问题的,因为这个配置文件在服务器重装之前几乎是一样的信息,只有ssl_certificate的配置不同而已,重装系统前这个参数是指向.pem文件,按理说应该这个参数指向.crt和.pem都是可以的。
- 尝试将ssl证书文件也复制一份到小程序项目所在的路径中,也无济于事。需要声明的是,在这个服务器重装系统前,小程序项目所在的路径中是没有存放ssl证书文件的。
- 尝试过用openssl命令手动生成证书文件,但手动生成的证书文件是不受信任的,所以也无法解决问题。
- 将老的证书文件进行吊销,重新生成新的SSL证书,问题依旧。
- 再再一次重装系统,还是不行。
以上所有修改,都有在修改完成后重启nginx服务甚至重启服务器来进行检测的,但是都没有办法解决。
这个问题已经困扰了好多天了,实在是没有头绪该如何处理了,所以在这里发帖咨询下各位大佬,求各位大佬指点一下迷津,非常感谢!!