一、HTTPS 与 HTTP 的区别
特性 | HTTP | HTTPS |
---|---|---|
中文名 | 超文本传输协议 | 安全超文本传输协议 |
协议层 | 应用层 | 应用层 + 加密层 |
默认端口 | 80 | 443 |
加密 | 否 | 是 |
性能 | 快 | 初始握手慢,后续快 |
安全性 | 明文传输 | 数据加密,防篡改 |
SEO | 不友好 | 推荐使用 |
HTTPS = HTTP + SSL/TLS,具有更高的安全性、信任度。搜索引擎更容易收录。
二、SSL 与 TLS 的区别
项目 | SSL | TLS |
---|---|---|
最初版本 | SSL 3.0 | TLS 1.0(基于 SSL 改进) |
当前状态 | 已废弃 | 推荐使用(TLS 1.2/1.3) |
安全性 | 存在漏洞 | 更安全、更高效 |
SSL(secure sockets layer)安全套接字协议,SSL首次发布为3.0版本,在3.0版本升级后,新版本命名为TLS1.0,因此tls是基于ssl的升级版
三、SSL/TLS 工作原理
SSL/TLS 协议的核心功能是建立一个安全可靠的通信通道,确保客户端与服务器之间的数据在传输过程中不被窃听、篡改或伪造。握手过程是实现这一目标的关键阶段,主要完成以下任务:
- 协商通信使用的协议版本和加密算法
- 交换密钥信息(用于后续对称加密)
- 验证服务器身份(有时也验证客户端)
- 建立共享的加密密钥
以下是基于 TLS 1.2 的完整握手流程
1. ClientHello
客户端发起连接请求,并发送支持的配置参数。
包含内容:
- 协议版本:如 TLS 1.2 或 TLS 1.3
- 随机数(Client Random):用于后续生成密钥
- Session ID(可选):如果之前有会话,尝试恢复之前的上下文
- 加密套件列表(Cipher Suites):客户端支持的一组加密算法组合(如
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
) - 压缩方法(Compression Methods):旧版中使用,新版已弃用
- 扩展信息(Extensions):如 SNI(Server Name Indication)、ALPN(应用层协议协商)等
目的:
告知服务器客户端的能力,以便服务器做出合适的响应选择。
2. ServerHello
服务器回应客户端的请求,并确定通信参数。
包含内容:
- 选定的协议版本:从客户端支持的版本中选择一个
- 随机数(Server Random):同样用于后续生成密钥
- Session ID:如果支持会话恢复,则返回该 Session ID
- 选定的加密套件:从客户端提供的列表中选择一个
- 压缩方法
- 扩展信息
目的:
确认双方将使用的通信参数,为后续步骤做准备。
3. 服务器发送数字证书
服务器将自己的数字证书发送给客户端,用于身份验证。
内容:
- 公钥证书链(包含服务器公钥、域名、CA签名等信息)
- 可能还包括中间 CA 证书
客户端验证内容:
- 证书是否由受信任的 CA 签发
- 证书是否过期
- 主机名(域名)是否匹配当前访问的目标网站
- 证书是否被吊销(可通过 CRL 或 OCSP 检查)
目的:
防止中间人攻击,确保客户端正在与真实的服务器通信。
4. 服务器密钥交换
在某些密钥交换方式下(如 ECDHE)需要这一步,用于传递临时密钥参数。
示例:
- 使用 ECDHE 时,服务器发送自己的临时椭圆曲线公钥
- 并附上签名,以证明自己拥有证书中的私钥
目的:
确保前向保密特性,即使长期私钥泄露也不会影响历史通信安全。
5. 客户端密钥交换
客户端生成预主密钥(pre-master secret),并使用服务器的公钥进行加密后发送给服务器。
示例:
- 如果使用 RSA 密钥交换,客户端将 pre-master secret 用服务器的公钥加密
- 如果使用 ECDHE,客户端发送自己的临时公钥
目的:
让服务器和客户端都能计算出相同的主密钥(master secret),用于后续的对称加密。
6. 更换加密规范
客户端通知服务器:从现在开始所有通信都将使用协商好的加密方式。
注意:
这是一个单独的消息,不是握手协议的一部分,而是属于记录层协议。
7. 加密后的 Finished 消息
客户端发送一条经过加密的
Finished
消息,表示握手已完成,后续通信将全部加密。
服务器收到后也会回复自己的 Finished
消息。
目的:
验证整个握手过程未被篡改,确保通信双方已经正确协商密钥。
8. 握手完成,进入数据通信阶段
此后,所有的 HTTP 请求与响应都通过 TLS 记录层进行加密传输。
- 加密算法:如 AES-GCM、ChaCha20-Poly1305
- 消息认证码(MAC):保证数据完整性
- 所有数据都被分成块进行加密处理
后续握手优化
为了提升性能,TLS 提供两种方式来复用之前的会话:
1. Session ID
- 服务器为每个会话分配一个唯一 ID
- 下次连接时若客户端携带相同 Session ID,服务器可以跳过完整握手
2. Session Ticket(更常用)
- 服务器将加密后的会话状态打包成 ticket 发送给客户端
- 下次连接时客户端携带 ticket,服务器解密即可恢复会话
四、加密方式对比
1. 非对称加密
- 使用公钥加密,私钥解密
- 安全但计算开销大
- 示例算法:RSA、MD5、SHA128
2. 对称加密
- 双方使用同一个密钥加解密,密钥泄露后无安全性
- 计算速度快
- 示例算法:AES
3. 混合加密(最常用,最实用)
- 利用非对称加密保护对称密钥
- 利用对称加密传输数据
- 保证安全性和性能兼顾
五、中间人攻击与证书机制
中间人攻击(MITM)
- 攻击者冒充服务器发送伪造公钥
- 截取客户端加密信息并解密
CA 证书的作用
- 服务器向可信第三方机构申请证书
- 证书包含域名、公钥及 CA 数字签名
- 浏览器内置根证书,验证服务器身份
通过CA的权威性来担保服务器的可信性,从而避免浏览器收到中间人攻击。