【学习笔记】TLS
文章目录
- 一、 介绍
- 二、 TLS 的核心目标
- 三、 TLS 握手流程
- 四、 TLS 关键技术
- 五、TLS 与 HTTPS
- 六、实践
一、 介绍
TLS 的前身是 Netscape 在 1994 年推出的 SSL(Secure Sockets Layer),最初版本为 SSL 2.0,随后改进为 SSL 3.0。但是 SSL 2.0/3.0 都存在设计漏洞和安全缺陷。为此,IETF 于 1999 年发布了 TLS 1.0(RFC 2246),做了若干改进,一步脱离了 SSL 的命运。此后,TLS 继续演进,先后发布了 TLS 1.1、TLS 1.2,直至 2018 年确定的 TLS 1.3(RFC 8446),成为当前最广泛支持的版本。
二、 TLS 的核心目标
- 加密通信(Confidentiality)
通过对称加密算法(如 AES)确保数据在传输过程中无法被外界解读。 - 完整性验证(Integrity)
利用消息认证码(MAC)或 AEAD(Authenticated Encryption with Associated Data)算法,确保数据未被篡改。 - 身份认证(Authentication)
通过非对称加密与数字证书,确认通信双方的身份,防止中间人伪装。
三、 TLS 握手流程
-
ClientHello
客户端发送支持的TLS版本、加密套件列表、随机数以及扩展(如 Server Name Indication)等信息。 -
SeverHello
服务器从客户端提供的选项中,选择协议版本和加密套件,返回随机数,并附带其数字证书(公钥)及可选的服务器密钥交换参数。 -
证书验证
客户端校验证书链(是否由受信任的 CA 签发、是否在有效期内、是否被吊销等),并提取服务器公钥。 -
密钥协商
- TLS 1.2 及以前: 客户端生成预主密钥(pre-master secret),用服务器公钥加密后发送;服务器用私钥解密,两端各自通过随机数和预主密钥计算出对称会话密钥。
- TLS 1.3: 使用椭圆曲线 Diffie–Hellman(ECDHE)完成密钥交换,双方各自计算共享密钥,无需额外的预主密钥加密步骤。
-
Finished 消息
双方使用派生出的对称密钥计算并交换 Finished 报文,确认整个握手过程未被篡改。之后,所有应用数据都在此对称密钥下加密传输。
四、 TLS 关键技术
-
对称加密算法
- 常见: AES-GCM、ChaCha20-Poly1305。
- 作用: 为大流量数据提供高速加密/解密。
-
非对称加密算法
- 常见: RSA、ECDSA。
- 用途: 数字签名与证书验证,以及在早期版本中传输预主密钥。
-
密钥交换协议
- TLS 1.2 以前: RSA 或 DHE/ECDHE;
- TLS 1.3: 仅保留 ECDHE(椭圆曲线 Diffie–Hellman)和 DHE,确保前向安全性(即历史密钥无法因长期密钥泄露而被破解)。
-
消息认证码(MAC)与 AEAD
- TLS 1.2 多使用 HMAC-SHA256;
- TLS 1.3 强制使用 AEAD 模式(如 AES-GCM、ChaCha20-Poly1305),同时实现加密与完整性验证。
-
数字证书与 PKI
- 服务器(或客户端)通过 X.509 证书链,将自己的公钥与身份绑定;
- 根证书由受信任的证书颁发机构(CA)签发,构建信任链。
五、TLS 与 HTTPS
HTTPS = HTTP + TLS
相较于HTTP,HTTPS 先在客户端和服务器之间建立一个 TLS 加密通道 (第三节TLS 握手流程),然后在这条已经加密好的通道上,按原本的 HTTP 规范 发送请求和接收响应。
六、实践
-
仅启用 TLS 1.2+ 或更高版本, 并优先使用 TLS 1.3。
-
弃用不安全的算法: 禁用 RC4、MD5、SHA-1、RSA 密钥交换。
-
配置强加密套件: 如
TLS_AES_128_GCM_SHA256
、TLS_CHACHA20_POLY1305_SHA256
。 -
使用证书自动管理工具: 如 Let’s Encrypt + Certbot,实现证书的自动更新与轮换。
-
启用 HSTS(HTTP Strict Transport Security): 强制客户端使用 HTTPS,防止降级攻击。
-
定期安全扫描与渗透测试, 及时发现并修复配置或实现中的漏洞。