记录一个ssl证书引发的诡异问题

最近公司开发的一个小程序刚刚上线,之前部署在公有云上,后来想要向私有云迁移。结果迁移后,发现苹果手机和微信PC端都可以正常访问,唯独安卓手机不能。而这个问题在公有云上却没有发生。

这个问题,首先想到的是公司的网络策略是否限制了部分ip的访问;其次想到公有云和私有云部署的版本是否有差异。兜兜转转调试了大约一个星期,最终发现问题竟然出在证书上!

一、证书完整性检测

配置在网关上的crt和rsa证书是我用ssl相关命令自己将公司的pfx格式证书转换成的,而在执行过程中,不可避免地缺失了中间证书这一步(因为我对证书确实不太熟悉,何况nginx代理又没有相关配置项)。。。

下面这个网站是用来检测证书完整性的:

https://www.myssl.cn/tools/check-server-cert.html

如果没有配置中间证书,证书2就会显示“错误:服务器缺少中间证书”。安卓系统对证书的要求比苹果系统严格,因此没有中间证书的话在苹果系统可以通过,在安卓系统就不行。这个问题很隐蔽,确实是费了很长时间才发现。

二、生成中间证书

中间证书在线生成即可。在下面的网站将crt文件内容粘贴下来,就可以下载对应的中间证书:

https://www.myssl.cn/tools/downloadchain.html

三、将中间证书配置到nginx上

这里也是查了不少资料,最后看到了这一篇文章:

https://www.jianshu.com/p/89252f8ba0f6

将中间证书的内容直接粘贴到crt文件里面,在原文件内容下面直接编辑添加即可。

此时再用上面检测完整性的网站来检测,3个证书就都正常了。

之后,重载nginx配置,安卓手机就能正常访问了!

posted @ 2020-04-01 18:34  右威卫大将军  阅读(624)  评论(0编辑  收藏  举报