SSL / TLS 工作原理和详细握手过程

HTTPS通过SSL/TLS协议提供通信安全,主要区别在于多了一层安全套接层。TLS握手包括版本协商、密码组合选择、身份验证、密钥交换等步骤,确保数据的机密性和完整性。在握手过程中,客户端和服务器交换随机字符串和证书,最终建立共享密钥进行安全通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HTTP和HTTPS的关系

HTTPS 和 HTTP的区别

显然,HTTPS 相比 HTTP最大的不同就是多了一层 SSL (Secure Sockets Layer 安全套接层)或 TLS (Transport Layer Security 安全传输层协议)。有了这个安全层,就确保了互联网上通信双方的通信安全,那么这个安全层是怎么工作的,SSL / TLS 握手过程又是怎样的呢?本文将对这些问题一一解答。

1、SSL / TLS 以及 SSL / TLS 握手的概念

SSL 和 TLS 协议可以为通信双方提供识别和认证通道,从而保证通信的机密性和数据完整性。TLS 协议是从Netscape SSL 3.0协议演变而来的,不过这两种协议并不兼容,SSL 已经逐渐被 TLS 取代,所以下文就以 TLS 指代安全层。 TLS 握手是启动 HTTPS 通信的过程,类似于 TCP 建立连接时的三次握手。 在 TLS 握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法以及会话密钥 (用于对称加密的密钥)。可以说,TLS 握手是 HTTPS 通信的基础部分。

2、TLS 握手过程中发生了什么

我们已经知道 TLS 握手的目的是建立安全连接,那么通信双方在这个过程中究竟干了什么呢?下面就是答案:

  • 商定双方通信所使用的的 TLS 版本 (例如 TLS1.0, 1.2, 1.3等等);
  • 确定双方所要使用的密码组合;
  • 客户端通过服务器的公钥和数字证书 (上篇文章已有介绍)上的数字签名验证服务端的身份;
  • 生成会话密钥,该密钥将用于握手结束后的对称加密。

3、TLS 握手详细过程

下面来看 TLS 握手的详细过程 (:此图与HTTPS详解一中的 HTTPS 原理图的流程大致相同,不同的是此图把重点放在了TLS握手的相关概念上):

 

SSL / TLS 握手详细过程
  1. "client hello"消息:客户端通过发送"client hello"消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本和密码组合以供服务器进行选择,还有一个"client random"随机字符串。
  2. "server hello"消息:服务器发送"server hello"消息对客户端进行回应,该消息包含了数字证书,服务器选择的密码组合和"server random"随机字符串。
  3. 验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:

    1. 检查数字签名
    2. 验证证书链 (这个概念下面会进行说明)
    3. 检查证书的有效期
    4. 检查证书的撤回状态 (撤回代表证书已失效)
  4. "premaster secret"字符串:客户端向服务器发送另一个随机字符串"premaster secret (预主密钥)",这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。
  5. 使用私钥:服务器使用私钥解密"premaster secret"。
  6. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY
  7. 客户端就绪:客户端发送经过共享密钥 KEY加密过的"finished"信号。
  8. 服务器就绪:服务器发送经过共享密钥 KEY加密过的"finished"信号。
  9. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

自制时序图:

参考资料:https://segmentfault.com/a/1190000021559557

SSL握手SSL/TLS协议中的一个关键过程,它在客户端服务器之间建立安全连接之前发生。这个过程涉及到几个步骤,包括客户端服务器之间的密钥交换、身份验证以及加密参数的确定。下面详细解释SSL握手的每个阶段: 参考资源链接:[揭秘SSL/TLS协议:加密安全通信的核心机制](https://wenku.csdn.net/doc/6412b76ebe7fbd1778d4a471?spm=1055.2569.3001.10343) 1. 客户端向服务器发送一个'ClientHello'消息,其中包含客户端支持的SSL/TLS版本、加密套件、压缩方法以及一串随机数(Client Random)。 2. 服务器响应一个'ServerHello'消息,选择客户端提供的选项中的一个,并发送自己的证书、服务器选择的加密套件另一个随机数(Server Random)。 3. 客户端验证服务器证书的有效性,确认服务器的身份,并使用证书中提供的服务器公钥加密一个随机生成的预主密码(Pre-Master Secret)发送给服务器。预主密码将在后续步骤中用于生成加密密钥。 4. 服务器使用自己的私钥解密得到预主密码。至此,客户端服务器都拥有了Client Random、Server RandomPre-Master Secret。 5. 客户端服务器各自独立地使用这三个随机数生成相同的会话密钥,这个过程通过一定的算法确保了即使第三方知道了Client RandomServer Random也无法计算出会话密钥。 6. 客户端发送一个'Finished'消息给服务器,这个消息包含了之前握手消息的哈希值,以便验证握手过程的完整性。 7. 服务器也发送一个'Finished'消息,并进行同样的哈希值验证。 8. 完成握手后,客户端服务器就可以使用会话密钥加密数据进行安全传输了。 通过这个握手过程SSL/TLS协议确保了数据传输的以下安全特性: - 身份验证:服务器的证书验证了服务器的身份,可选的客户端证书能进一步验证客户端身份。 - 加密:会话密钥用于加密客户端服务器之间的数据传输,确保了数据的保密性。 - 数据完整性:通过'Finished'消息中的哈希值确认,保证了数据在传输过程中未被篡改。 - 防止重放攻击:通过使用随机数时间戳,确保每一个SSL握手都是唯一的,从而防止攻击者重放旧的握手消息。 因此,SSL/TLS协议通过复杂的握手过程为数据传输提供了强大的安全保证。如果你希望深入了解SSL/TLS握手的机制以及如何在实际应用中部署SSL/TLS,建议阅读《揭秘SSL/TLS协议:加密安全通信的核心机制》一书,该书详细解释了SSL握手协议的工作原理实际应用案例。 参考资源链接:[揭秘SSL/TLS协议:加密安全通信的核心机制](https://wenku.csdn.net/doc/6412b76ebe7fbd1778d4a471?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值