搞定客户端证书错误,看这篇就够了

简介: TLS/SSL 握手失败引起的连接异常问题怎么搞?阿里云 SRE 工程师手把手带你排查解决。

封面图1015.jpg

1.TLS/SSL 握手基本流程

1.png
*图片来源于网络

2.案例分享

2.1CFCA 证书的历史问题

2.1.1背景

某客户为其生产环境的站点申请了一张由 CFCA 签发的证书。相关域名正确配置该证书且启用 HTTPS 后,经测试发现他们的客户端 App 在低版本手机上( iOS < 10.0,Android < 6.0)无法连接到相关站点。

客户端调试发现,控制台会看到证书无效的错误信息(Invalid Certificate 或 Certificate Unknown )。

2.1.2排查

起初,工程师并不知道客户的证书是由哪个机构签发以及有什么问题。而对于这类问题,一般均需要客户端网络包做进一步的分析与判断。因此安排客户在受影响的设备上进行问题复现及客户端抓包操作。

获取到网络包后,首先确认了客户端连接失败的直接原因为 TLS 握手过程异常终止,见下:

2.png

查看 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。

回到存在问题的手机设备上(Android 5.1),检查系统内置的受信任 CA 根证书列表,未能找到 CFCA EV ROOT CA 证书;而在正常连接的手机上,可以找到该 CA 的根证书并默认设置为”信任“。

查阅 CFCA 证书的相关说明,该机构的证书在 iOS 10.1 及 Android 6.0 及以上版本才完成入根接入。

*参考:https://www.cfca.com.cn/upload/20161101.pdf

3.png

2.1.3小结

从上面的分析可以看到,该问题的根因是低版本客户端设备没有内置 CFCA 的 CA 根证书。因此,基本的解决方案包括:

  1. 更换其他 CA 机构签发的证书,保证其 CA 根证书的在特定设备上已默认信任。
  2. 手动在受影响的设备上安装该 CA 根证书及中间证书,并配置为信任状态。
  3. 客户端 App 预置该 CA 根证书,并通过客户端代码配置信任该证书。

需要结合不同的业务场景选择合理解决方案。

2.2证书链信任模式引起的问题

2.2.1背景

某客户新增了一个容灾备用接入地址,启用了一个新的域名并配置了一张全新的证书。测试发现,切换到该备用地址时,Android 客户端无法正常连接,报证书未知错误(Certificate Unknown);iOS 客户端表现正常。

2.2.2排查

和 2.1 的问题类似,首先在受影响的设备上进行问题复现及客户端抓包操作。

获取到网络包之后,确认了客户端连接失败的直接原因为 TLS 握手过程异常终止,原因与 2.1 中的问题一样,为Certificate Unknown :

4.png

5.png

类似问题 2.1 的排查动作,查看该证书的 CA 根证书及根证书的信任情况。

发现该证书由中间 CA 机构 Secure Site Pro CA G2 签发,其根 CA 为 DigiCert Global Root CA:

6.png

7.png

DigiCert Global Root CA 作为一个广泛支持的证书签发机构,其根 CA 证书在绝大多数的设备上均为受信任状态,这一点在受影响的设备上也得到了确认。既然根 CA 的证书处于信任状态,为何证书验证还是失败?这成为下一步排查的重点方向。

同一台设备,切换到正常环境下,也完成一次抓包操作。获取到新的网络包后做对比分析,发现两种情况下网络包中体现的区别为:

正常环境下,服务器返回的证书包含了完整的 CA 证书链;

异常情况下,服务端返回的证书仅包含叶节点 CA 证书。

8.png

9.png

根据上述线索进行排查研究,发现:不同于其他平台,Android 客户端默认是不会通过 AIA Extension 去做证书链的校验。

*参考:https://tools.ietf.org/html/rfc3280#section-4.2.2.1 ;https://developer.android.com/training/articles/security-ssl#UnknownCa

因此,当中间 CA 证书未安装或未缓存时,客户端 App 是不会主动拉取中间 CA 证书并做进一步信任链校验的,从而导致证书校验失败。

2.2.3小结

从上面的排查分析看到,该问题和 Android 平台自身的证书校验机制和证书打包方式相关。解决方案包括:

代码层面手动定制 TrustManager 去定制校验过程;

或重新打包证书,将中间 CA 证书和根 CA 证书一同打包到服务端证书中。

该客户综合开发成本与环境现状,选择重新打包证书。新的证书配置完成后,问题得到解决。

2.3加密套件协商引起的问题

2.3.1背景

某客户反馈他们的 iOS 客户端 App 用户在特定运营商网络环境下无法打开特定的业务站点(HTTPS 站点)。客户端处于白屏等待状态并最终报错;而在同样的网络环境下,系统浏览器可以打开该站点;同一台设备,切换到另一个网络运营商下,也可以访问该站点。

2.3.2排查

由于该问题直接表现在 Web 层,因此首先尝试通过 Charles 抓取 HTTP 层包进行分析。HTTP 日志发现相关 HTTP 请求并未发出。

由此怀疑问题发生在 TCP 层,进而在受影响的设备上进行问题复现及客户端抓包操作。

获取到网络包后,首先确认问题:

  1. 通过页面域名在网络包中寻找 DNS 解析结果;
  2. 根据 DNS 解析结果找到站点 IP,并过滤出客户端与该 IP 之间的访问情况;
  3. 观察客户端与该服务器之间的网络活动,发现存在 TLS 握手失败的情况:

10.png

从上面的网络包可以看到,服务端(机房 P 中的服务器提供接入服务)在收到 Client Hello 后,直接返回了 Handshake Failure,这种情况下,一般需要服务端配合排查握手失败的直接原因。在客户端条件下,可以进一步缩小排查疑点。

重新考虑客户问题条件:相同的网络条件下,系统浏览器可以打开该页面;同一设备切换到另一运营商下(站点此时由机房 Q 中的服务器提供接入服务),可以正常访问。针对这这两种正常情况进行抓包和进一步分析。

通过对三种情况的网络观察发现:

  1. 问题 App 发出的 Client Hello 显示支持 17 种加密套件:

11.png

  1. 正常 App 发出的 Client Hello 显示支持 26 种加密套件:

12.png

  1. 正常 App 和机房 P 服务器协商的加密套件为:TLS_RAS_WITH_3DES_EDE_CBC_SHA (0x000a) (不在问题 App 支持的加密套件范围内);
  2. 问题 App 和机房 Q 服务器协商的加密套件为:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)(在问题 App 支持的加密套件范围内);

根据上述情况,可以推论问题的基本情况为:

  1. 问题 App 发出去的握手请求,支持17种加密套件( A 集合);
  2. 正常 App 发出去的握手请求,支持26种加密套件( B 集合);
  3. 机房 P 的接入服务器,能支持 B 集合中的至少一种加密套件,不支持 A 集合中的所有加密套件;
  4. 机房 Q 的接入服务器,既支持 A 集合中的至少一种加密套件,也支持 B 集合中的至少一种加密套件;

最终导致 问题 App 无法通过 机房 P 中的服务器 访问该站点。

2.3.3 小结

从上面的分析结论可以看到,由于客户端和服务端加密套件不匹配,导致在特定情况下的握手失败。进一步的问题解决方案包括:

调整客户端加密套件,增加支持的 Cipher Suites(涉及客户端底层 TLS/SSL 库的升级);

调整服务端加密套件,增加支持的 Cipher Suites(涉及服务端 TLS/SSL 接入配置)。

该客户最终选择调整服务端加密套件,问题得到解决。

3.总结

从上述案例的分享和实践中可以看到,TLS 层面的问题在客户端的症状表现上有相似之处,但是问题的根因却大相径庭。这里例举的问题虽不能覆盖所有的问题场景,但可以看到基本的排查思路如下:

判断问题是否属于 TLS/SSL 层面的问题。

抓取网络包;有条件的情况下,可以针对正常和异常情况抓取两份网络包,以便后续进行对比分析。

根据网络包探寻问题发生的直接原因,进而进一步探究问题的根本原因。

根据分析结论并结合业务场景,选择合适的解决方案。

这类问题的排查基础是对 HTTPS 和 TLS/SSL 协议的理解以及对分析工具的掌握。在移动领域,这类问题存在一定的共性,直接了解上述结论和分析方法可以帮助开发者快速“出坑”。

参考

  • 如何抓取网络包,https://help.aliyun.com/document_detail/159169.html
  • Security with HTTPS and SSL,https://developer.android.com/training/articles/security-ssl
  • Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,https://tools.ietf.org/html/rfc5280

作者名片-东雷.jpg

彩(广)蛋(告)

针对市面上移动应用普遍存在的破解、篡改、盗版、钓⻥欺诈、内存调试、数据窃取等各类安全风险,mPaaS 「移动安全加固」依赖于阿里云集团的移动安全加固技术,经历了淘系等亿级应用的安全性考验。

能够有效为移动应用提供稳定、简单、有效的安全保护,提高 App 的整体安全水平,力保应用不被逆向破解,在安全性上具有非常可靠的保障。

能力优势.png

 

 

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/514925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员通过脚本免费领到 CSDN 会员卡

很多人喜欢下载插件去丰富浏览器现有功能各式各样的脚本虽有趣但若是能亲手设计开发一个脚本看着大家玩着自己的脚本是不是会觉得更加有成就感呢&#xff1f;想拥有一款属于自己的脚本吗&#xff1f;想获得丰厚的奖品吗&#xff1f;那么就千万不要错过这次活动【2021CSDN脚本征…

12123两小时没付款怎么办_机械厂上班的男朋友,一天十小时,周末不休,没时间陪我怎么办?...

01小江是去年认识的男朋友&#xff0c;当时觉得男朋友老实&#xff0c;在机械厂上班&#xff0c;能吃苦能挣到钱&#xff0c;以后能养家糊口&#xff0c;老老实实过一份踏实的日子。理想很丰满&#xff0c;现实很骨感。他们认识的时候正好是夏天&#xff0c;天气热。男朋友的工…

小红书推荐大数据在阿里云上的实践

简介&#xff1a; 本篇内容主要分三个部分&#xff0c;在第一部分讲一下实时计算在推荐业务中的使用场景。第二部分讲一下小红书是怎么使用Flink的一些新的功能。第三部分主要是讲一些OLAP的实时分析的场景&#xff0c;以及和阿里云MC-Hologres的合作。 作者&#xff1a;小红书…

AI 3D 传感器市场竞争白热化,中国掌握自主可控核心技术时不我待!

受访者 | 孔博记者 | 夕颜图源 | 视觉中国出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;提到AI 3D传感技术&#xff0c;也许很少有人脑中有概念。但是以下图iPhone手机最早推出的3D虚拟表情生成为例&#xff0c;大概就会知道这项技术可以用来做什么了。 2017年苹果…

数据中台交付专家告诉你,数据架构的分层怎样更加合理?

作者&#xff1a;柯根 从整体上看&#xff0c;数据中台体系架构可分为&#xff1a;数据采集层、数据计算层、数据服务层三大层次。通过这三大层次对上层数据应用提供数据支撑。 数据采集层 对于企业来说&#xff0c;每时每刻都在产生海量的数据&#xff0c;数据采集作为数据…

手机版腐蚀rust_手机进水后黑屏,该怎么办?切忌做这几件事

手机进水后黑屏&#xff0c;不可急于开机&#xff0c;应先取下SIM卡&#xff0c;然后拆机对手机内部的主板及各个接口进行清理。如果处理后仍然黑屏&#xff0c;通常可以通过修复受损电路及更换屏幕来解决这个问题。手机进水引起黑屏的原因手机内部进水&#xff0c;通常由听筒、…

XXL-Job集群部署和⾼可⽤最佳实战

文章目录一、调度中心集群部署1. HA/集群2. 调度中⼼集群3. 执⾏器集群4. 集群需要满足的条件5. 集群部署最佳实战二、任务执行器的集群配置2.1. 集群地址配置2.2. 执行器名称配置2.3. 执行器端口三、路由策略一、调度中心集群部署 1. HA/集群 为了避免单点故障&#xff0c;任…

看动画学算法之:linkedList

简介 linkedList应该是一种非常非常简单的数据结构了。节点一个一个的连接起来&#xff0c;就成了linkedList。今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的。 linkedList的构建 linkedList是由一个一个的节点构成的。而每个节点只需要存储要保存的数据和…

CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请

HarmonyOS Beta 版测试申请入口已于5月17日全面关闭&#xff0c;屏幕前正在敲代码的你是不是错失了这次机会&#xff1f; 作为 HarmonyOS 的合作伙伴&#xff0c;“CSDN鸿蒙社区”为广大 CSDN 乡亲们申请到部分内测资格&#xff0c;只要拥有内测资格设备即可免费申请&#xff0…

linux环境~Kafka集群 监控 Kafka Eagle 图形化版本

文章目录一、安装、配置、验证1. 安装包下载2. 开启kafka JMX3. 安装JDK&#xff0c;配置JAVA_HOME4. 上传安装包、解压5. 配置Kafka-eagle环境变量6. 配置Kafka_eagle7. 配置ke.sh8. 启动Kafka_eagle9. 防火墙10. 访问Kafka eagle二、监控面本总览2.1. Dashboard2.2. MESSAGE2…

前端搞报表|数据分析提效全链路解决方案

简介&#xff1a; 前端早早聊直播干货 作者&#xff1a;闲鱼技术-云听 背景介绍 闲鱼 2014 年成立&#xff0c;到现在的话已经实现了从 0 ~ 千万级 DAU 的跃迁&#xff0c;随着业务的快速发展&#xff0c;业务决策方法紧跟升级。从最原始的经验驱动到更加科学合理的数据驱动…

kafka消息过期时间设置(全局和特定topic)

文章目录一、kafka 全局消息过期时间设置1. 配置文件夹2. 修改配置3. 重启配置生效二、针对特定topic设置过期时间2.1. 配置文件夹2.2. 执行设置命令三、kafka过期消息删除过程一、kafka 全局消息过期时间设置 1. 配置文件夹 进入kafka配置文件夹 /app/kafka_2.12-2.2.0/con…

DeVOpS 实战:Kubernetes 微服务监控体系

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国监控系统是运维体系乃至整个软件产品生命周期中最重要的一环&#xff0c;完善的监控可以帮助我们事前及时发现故障&#xff0c;事后快速追查定位问题。而在以微服务为代表的云原生架构体系中&#xff0c;系统分为多个层次&am…

面对复杂业务,if-else coder 如何升级?

作者 | 张建飞 阿里巴巴高级技术专家 导读&#xff1a;针对业务在不同场景下的差异&#xff0c;我们常常会习惯性地使用 if-else 来实现不同的业务逻辑&#xff0c;久而久之代码越来越难以维护。那么如何消除这些 if-else&#xff1f;面对复杂业务应如何思考和分析&#xff1f…

adobe怎么统计字数_SEO技能:怎么写站内文章对网站排名更好?

每个做seo的人都知道真相&#xff0c;而且不会累积千里。意思是要注意网站上每篇文章的写作&#xff0c;因为网站的流量和权重一般需要所有网页的共同支持。因此&#xff0c;如何撰写有利于网站优化的文章尤为重要。虚拟社群提醒大家&#xff0c;细节通常被认为是成功的。通过写…

网站都变成灰色,一行代码就搞定了!

文章目录一、主流网站主题分析1. 腾讯课堂2. bilibili3. CSDN二、默认样式2.1. 腾讯课堂2.2. bilibili2.3. CSDN三、 案例demo一、主流网站主题分析 实现原理&#xff1a;在html标签上的class添加一个全局过滤器样式即可 1. 腾讯课堂 在html标签添加一个class&#xff0c;给cl…

应用架构之道:分离业务逻辑和技术细节

简介&#xff1a; “让上帝的归上帝&#xff0c;凯撒的归凯撒。” 作者 | 张建飞 阿里巴巴高级技术专家 架构 什么是架构&#xff1f; 关于架构这个概念很难给出一个明确的定义&#xff0c;也没有一个标准的定义。 硬是要给一个概述&#xff0c;我认为架构就是对系统中的实…

Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完​

2021都说工作不好找&#xff0c;也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#xff0c;同时也整理一些图文解析及笔记&#xff0c;今天在这免费分享给大家&#xff0c;希望大…

IEEE EDGE 2020论文:Astraea — 以优雅的方式在边缘部署AI服务

简介&#xff1a; 近日&#xff0c;阿里云边缘计算团队博士后付哲的论文《Astraea: Deploy AI Services at the Edge in Elegant Ways》入选2020年IEEE边缘计算国际会议&#xff08;IEEE International Conference on Edge Computing&#xff09;&#xff0c;并在大会上进行了宣…

Mendix:云原生应用是软件的未来

作者 | Mendix投稿 编辑 | 宋 慧 头图 | 付费下载于东方IC 如今&#xff0c;在构建新的应用时&#xff0c;很多公司都会想到 “云端优先”。但随着科技的发展&#xff0c;更好的方法是考虑 “云原生”应用。 云原生应用利用了诞生于云端的平台和流程的优势。它们具有高可扩展…