起因

在给一客户部署 https 证书后客户反馈手机在安卓上无法打开,刚开始以为是服务器问题,但是在 chrome 和 iPhone 上均表现良好,于是翻出安卓机一看,果然有问题,弹出了如下界面:

Jietu20171206-224509.jpg

原来是证书链的问题,那就好办了

证书链

每个设备中都会存有一些默认的可信的根证书,但很多CA是不使用根证书进行签名的,而是使用中间层证书进行签名,但是如果我们的服务器上没有中间件证书,而客户端的浏览器里只有CA的根证书,这样就会导致证书信任链不全的时候就会出现截图中的问题。浏览器会认为当前的链接是一个不安全的,会阻止页面的打开。测试基本只有安卓躺枪==

办法

解决办法很简单,在服务器的证书中配置上中间商的 crt 证书即可,一般我们在中间商买到的证书基本都是:

-----BEGIN CERTIFICATE-----
    # 我是证书内容
-----END CERTIFICATE-----

只需要把证书提供商给你的中间商证书的内容 append 在这个 crt 文件下即可,像这样:

-----BEGIN CERTIFICATE-----
    # 证书内容 1
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
    # 证书内容 2
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
    # 证书内容 3
-----END CERTIFICATE-----

这样就可以了。

当然,如果你想偷懒,那么可以这个在线工具,自动帮你补全==

https://certificatechain.io