1. 背景
HTTPS 作为站点安全的最佳实践之一,已经得到了最广泛的支持。然而在实际生产过程中,由 TLS/SSL 握手失败引起的连接异常问题依然十分常见。本文将结合 mPaaS 客户端实际排查案例,介绍这类问题在移动领域的排查和解决方案。
2. TLS/SSL 握手基本流程
HTTPS 的主要作用是在不安全的网络上创建一个基于 TLS/SSL 协议安全信道,对窃听和中间人攻击提供一定程度的合理防护。TLS/SSL 握手的基本流程如下图描述:
![1a15d78bc1dc5f6b9a4e5959e1941a5d.png](https://i-blog.csdnimg.cn/blog_migrate/6cd1d860e4c9f5b63f0bb7a86e03316b.png)
3. 案例分享
2.1 CFCA 证书的历史问题
2.1.1 背景
某客户为其生产环境的站点申请了一张由 CFCA 签发的证书。相关域名正确配置该证书且启用 HTTPS 后,经测试发现他们的客户端 App 在低版本手机上( iOS < 10.0,Android < 6.0)无法连接到相关站点。
客户端调试发现,控制台会看到证书无效的错误信息(Invalid Certificate
或 Certificate Unknown
)。
2.1.2 排查
起初,工程师并不知道客户的证书是由哪个机构签发以及有什么问题。而对于这类问题,一般均需要客户端网络包做进一步的分析与判断。因此安排客户在受影响的设备上进行问题复现及客户端抓包操作。
- 获取到网络包后,首先确认了客户端连接失败的直接原因为 TLS 握手过程异常终止,见下:
![6ded4542a2358da26761295daba1b358.png](https://i-blog.csdnimg.cn/blog_migrate/300e18b6e2c6928eb02c4cafb91e2679.jpeg)
- 查看
Encrypted Alert
内容,错误信息为0x02 0x2E
。根据 TLS 1.2 协议(RFC5246 )的定义, 该错误为因为certificate_unknown
。 - 继续查看该证书的具体信息,根据
Server Hello
帧中携带的证书信息得知该证书由证书机构China Financial Certification Authority(CFCA)
签发。再根据证书信息中的 Authority Information Access (AIA) 信息确认 Intermediate CA 和 Root CA 证书。确认该证书签发机构的根证书为CFCA EV ROOT
。 - 回到存在问题的手机