飘在云端

东西南北,海角天涯

· 备查 · · 317次浏览

Let's Encrypt的移动端中间证书兼容问题

使用Let's Encrypt的证书时,直接使用中间证书,没有使用完整的证书链,部署之后pc windows平台未发现异常。
IE11、谷歌浏览器78、火狐浏览器69,安卓端浏览器(Google webview 78)都能直接访问,都没报错。
结果移动端(安卓)却有坑要填,C/S架构下,客户端网络模块使用开源的OKHttp3.8,使用https无法连接服务端,查询服务端后台没看到相关连接记录,使用http未见异常,服务端也能查的到相应记录,但是这个问题是部署了Let证书之后的一个星期才触发的,排查时花费一大半时间,一步步debug,缩小范围后,怀疑服务端https配置出现问题,反复检查ssl配置,鸡蛋里面挑骨头都挑不出毛病,无奈之下抱着试一试的态度换个证书排除问题,结果恢复正常!

找到了引发故障的直接原因,确认客户端与服务端SSL协议协商失败,抓包分析发现是证书不受信任・_・? 才发现移动端不信任let证书!!
补全根CA,形成完整证书链,问题解决。

=_=无语!pc平台没任何异常和兼容问题(看来不少产商都直接信任Let's Encrypt这个CA作为中级证书颁发机构了,这待遇,啧啧啧)。

一个完整的证书格式是

    -----BEGIN CERTIFICATE-----

用户证书

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

中间CA证书(如果有)

-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----

根CA证书

-----END CERTIFICATE-----

也就是自上而下的顺序把用户证书、中间证书(如果有)和根证书拼接,形成一个完整证书链即可。

实际应用场景没中级证书的移动端各种问题!!!

评论 (0条)