2. TLS协议简介:版本历史、作用和基本流程

聊边界防御,有个东西绕不开——TLS。说白了,没有TLS,边界防御就是一道关不紧的门。我这些年遇到最多的问题,不是攻击者多厉害,而是很多团队连TLS的基本原理都没吃透,导致配置漏洞百出。

一个经验: 别把TLS当黑盒。你至少要知道握手时发生了什么,才能在边界上做正确的决策。

2.1 TLS版本历史:别再用老古董了

TLS的前身是SSL,由网景公司开发。SSL 1.0从未公开发布过,SSL 2.0在1995年面世,但漏洞太多。我记得有一次审计一个客户系统,他们还在用SSL 3.0,我当场就让他们下线了——这东西早该进博物馆了。

版本发布时间状态我的评价
SSL 2.01995已废弃看到就该报警
SSL 3.01996已废弃别碰,真的
TLS 1.01999已废弃2018年RFC就建议弃用了
TLS 1.12006已废弃PCI DSS都禁了
TLS 1.22008推荐目前最稳妥的选择
TLS 1.32018强烈推荐又快又安全,但注意兼容性
避坑指南: 我曾经在某个金融机构看到他们的负载均衡器还在用TLS 1.0,说是为了兼容老旧客户端。我跟他们讲,这种兼容早晚会出事——POODLE攻击就是专门针对SSL 3.0和TLS 1.0的。后来他们调了配置,出问题的不是客户端,而是他们自己。

2.2 TLS到底干了什么?

你想想看,数据在网络上跑,就像明信片一样谁都能看。TLS干的事,说白了就三样:

  • 加密——别人看不懂你的数据
  • 身份验证——你确定对方是真的服务器
  • 完整性——数据没被中间人改过

我在项目中遇到过太多只关注加密,忽略身份验证的案例。有次一个团队自己签了证书,部署到边界网关,结果中间人攻击一来,所有流量都被抓走了。嗯,这就是典型的只顾着锁门,忘了看门的是谁。

2.3 基本流程:TLS握手到底怎么干?

TLS握手,听起来高大上,其实就是一个「打招呼→互相认识→商量暗号→开始通信」的过程。我画了个图,帮你把流程理清楚:

TLS 1.2 握手核心流程 客户端 服务端 ① ClientHello(版本+密码套件) ② ServerHello + 证书 + ServerHelloDone 验证服务器证书 ③ ClientKeyExchange ④ ChangeCipherSpec + Finished 加密通信开始(对称加密) 其实TLS 1.3握手 只需要1次往返

2.4 握手过程拆解

上面这张图画的是TLS 1.2的完整握手。我把它拆成几个关键步骤,你照着理解就好:

  1. 客户端打招呼(ClientHello):客户端告诉服务端“我支持这些版本、这些加密算法”。我在项目中经常看到客户端带了太多老旧密码套件,画蛇添足。
  2. 服务端回复(ServerHello + 证书):服务端选中一套方案,把自己的证书甩过来。注意,这个证书要是可信的CA签的,否则没意义。
  3. 证书验证:客户端检查证书——有没有过期?域名对不对?是不是可信CA?这个环节我见过不少幺蛾子,比如自签名证书在内部用,结果忘了信任链。
  4. 密钥交换:双方用非对称加密协商出一个临时密钥,后面就用这个对称密钥加密通信了。效率高,又安全。
关键点: TLS握手其实是「非对称加密协商对称密钥」的过程。非对称加密用来握手,对称加密用来通信——这个设计很聪明,因为非对称加密太慢了,不适合大批量数据。

2.5 TLS 1.3:更快更安全

TLS 1.3在2018年发布,最大的变化就是握手砍成了1-RTT(一次往返)。以前TLS 1.2要握手两次,现在一次搞定。我记得TLS 1.3刚出来时,我帮一个电商平台升级,页面加载时间直接降了30%——用户体验蹭蹭往上涨。

对比项TLS 1.2TLS 1.3
握手往返次数2-RTT1-RTT
支持的密码套件很多(不少已不安全)只保留5个强套件
0-RTT不支持支持(但注意重放攻击)
注意: TLS 1.3的0-RTT虽然快,但有重放攻击的风险。我在金融项目中通常不开启0-RTT——安全第一,不能为了快几毫秒就冒风险。

2.6 在边界防御中,TLS的意义是什么?

简单说,TLS是边界上最后一道防线。防火墙管网络层,WAF管应用层,TLS管传输层加密。我习惯在边界网关终止TLS,然后做深度检测,再往内网转发。这样既享受了加密,又没丢掉可视性。

一个建议: 边界上做TLS卸载时,务必把客户端证书信息透传给后端,否则内网服务没法做细粒度的身份识别。

还有一点,很多人以为有了TLS就不需要别的防护了。错了。TLS只解决传输安全,应用层的漏洞它可不管。你网站如果有SQL注入,就算TLS 1.3加持也照样被攻击——这就是边界防御要分层的原因。

嗯,这一块先讲到这。核心就是记住:TLS不是银弹,但没有TLS,边界防御连及格线都达不到。