2. TLS协议简介:版本历史、作用和基本流程
聊边界防御,有个东西绕不开——TLS。说白了,没有TLS,边界防御就是一道关不紧的门。我这些年遇到最多的问题,不是攻击者多厉害,而是很多团队连TLS的基本原理都没吃透,导致配置漏洞百出。
2.1 TLS版本历史:别再用老古董了
TLS的前身是SSL,由网景公司开发。SSL 1.0从未公开发布过,SSL 2.0在1995年面世,但漏洞太多。我记得有一次审计一个客户系统,他们还在用SSL 3.0,我当场就让他们下线了——这东西早该进博物馆了。
| 版本 | 发布时间 | 状态 | 我的评价 |
|---|---|---|---|
| SSL 2.0 | 1995 | 已废弃 | 看到就该报警 |
| SSL 3.0 | 1996 | 已废弃 | 别碰,真的 |
| TLS 1.0 | 1999 | 已废弃 | 2018年RFC就建议弃用了 |
| TLS 1.1 | 2006 | 已废弃 | PCI DSS都禁了 |
| TLS 1.2 | 2008 | 推荐 | 目前最稳妥的选择 |
| TLS 1.3 | 2018 | 强烈推荐 | 又快又安全,但注意兼容性 |
2.2 TLS到底干了什么?
你想想看,数据在网络上跑,就像明信片一样谁都能看。TLS干的事,说白了就三样:
- 加密——别人看不懂你的数据
- 身份验证——你确定对方是真的服务器
- 完整性——数据没被中间人改过
我在项目中遇到过太多只关注加密,忽略身份验证的案例。有次一个团队自己签了证书,部署到边界网关,结果中间人攻击一来,所有流量都被抓走了。嗯,这就是典型的只顾着锁门,忘了看门的是谁。
2.3 基本流程:TLS握手到底怎么干?
TLS握手,听起来高大上,其实就是一个「打招呼→互相认识→商量暗号→开始通信」的过程。我画了个图,帮你把流程理清楚:
2.4 握手过程拆解
上面这张图画的是TLS 1.2的完整握手。我把它拆成几个关键步骤,你照着理解就好:
- 客户端打招呼(ClientHello):客户端告诉服务端“我支持这些版本、这些加密算法”。我在项目中经常看到客户端带了太多老旧密码套件,画蛇添足。
- 服务端回复(ServerHello + 证书):服务端选中一套方案,把自己的证书甩过来。注意,这个证书要是可信的CA签的,否则没意义。
- 证书验证:客户端检查证书——有没有过期?域名对不对?是不是可信CA?这个环节我见过不少幺蛾子,比如自签名证书在内部用,结果忘了信任链。
- 密钥交换:双方用非对称加密协商出一个临时密钥,后面就用这个对称密钥加密通信了。效率高,又安全。
2.5 TLS 1.3:更快更安全
TLS 1.3在2018年发布,最大的变化就是握手砍成了1-RTT(一次往返)。以前TLS 1.2要握手两次,现在一次搞定。我记得TLS 1.3刚出来时,我帮一个电商平台升级,页面加载时间直接降了30%——用户体验蹭蹭往上涨。
| 对比项 | TLS 1.2 | TLS 1.3 |
|---|---|---|
| 握手往返次数 | 2-RTT | 1-RTT |
| 支持的密码套件 | 很多(不少已不安全) | 只保留5个强套件 |
| 0-RTT | 不支持 | 支持(但注意重放攻击) |
2.6 在边界防御中,TLS的意义是什么?
简单说,TLS是边界上最后一道防线。防火墙管网络层,WAF管应用层,TLS管传输层加密。我习惯在边界网关终止TLS,然后做深度检测,再往内网转发。这样既享受了加密,又没丢掉可视性。
还有一点,很多人以为有了TLS就不需要别的防护了。错了。TLS只解决传输安全,应用层的漏洞它可不管。你网站如果有SQL注入,就算TLS 1.3加持也照样被攻击——这就是边界防御要分层的原因。
嗯,这一块先讲到这。核心就是记住:TLS不是银弹,但没有TLS,边界防御连及格线都达不到。