SSL/TLS 协议及握手流程

一、HTTPS 与 HTTP 的区别

特性HTTPHTTPS
中文名超文本传输协议安全超文本传输协议
协议层应用层应用层 + 加密层
默认端口80443
加密
性能初始握手慢,后续快
安全性明文传输数据加密,防篡改
SEO不友好推荐使用

HTTPS = HTTP + SSL/TLS,具有更高的安全性、信任度。搜索引擎更容易收录。


二、SSL 与 TLS 的区别

项目SSLTLS
最初版本SSL 3.0TLS 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的权威性来担保服务器的可信性,从而避免浏览器收到中间人攻击。

SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议是一种用于加密网络通信的安全协议,它确保数据在网络传输过程中的安全性和完整性。握手(Handshake)阶段是TLS连接建立的核心步骤: 1. 客户端发起请求:客户端首先向服务器发送一个`ClientHello`消息,包含版本信息、支持的加密算法、压缩方法等,以及随机数(称为“随机选择器”),作为协商的基础。 2. 服务器回应:服务器收到`ClientHello`后,选择合适的加密套件,并生成一个新的随机数(称为“服务器选择器”)。然后,服务器发送一个`ServerHello`消息,包括选定的加密套件以及服务器证书、公钥、随机数等。 3. 服务器认证:服务器通常会附带一个数字证书,其中包含了服务器的身份信息和公钥。客户端验证证书的有效性,如果信任证书签发机构,则继续。 4. 密钥交换:根据选择的加密套件,双方完成密钥交换。如果是RSA,服务器会使用其私钥对客户端提供的随机数进行加密,生成共享的会话密钥;如果是ECDH等更现代的方式,会直接计算出会话密钥。 5. 客户端确认:客户端通过`ChangeCipherSpec`消息通知服务器,将开始使用新的会话密钥加密通信,并在随后的`Finished`消息中提供消息身份验证码(MAC),以验证整个握手过程中数据的完整性和一致性。 6. 双向认证:一些高级配置下,客户端也可能需要向服务器发送类似的身份验证消息,完成双向认证。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值