记录一个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配置,安卓手机就能正常访问了!