夜猫的小站

TLS1.2握手过程

Published on
阅读时间:6分钟1056

本文最近一次更新于 925 个天前,其中的内容很可能已经有所发展或是发生改变。

前言

最近再看tcp/ip的书籍,记录下https中的TLS1.2的握手过程

实践

wireshark 打开我自己的网站 owlnas.cc做测试,可以看到 tls 握手的完整问题。

过滤条件

ssl && (ip.dst == 180.97.34.94 || ip.src == 180.97.34.94)

TLS握手完整过程

【client】【server】
client Hello-->
<--Server Hello
<--Certificate
<--Server Key Exchange
<--Server Hello Done
Client Key Exchange-->
Change Cipher Spec-->
Encrypted Handshake Message-->
----
<--New Session Ticket
<--Change Cipher Spec
<--Encrypted Handshake Message

1.Client Hello

浏览器给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。

2. Server Hello

服务器确认双方使用的加密方法,使用的tls版本号和一个随机数。

3.Certificate

服务器给出数字证书

多数电子商务应用都需要服务器端身份验证。服务器如果需要验证客户端的身份,那么服务器会发一个“Certificate Request”给浏览器,而在很多实现中,服务器一般不需要验证客户端的身份)

4.Server Key Exchange

服务器给出公钥signature ,运行 Diffie-Hellman 算法生成的参数

5. Server Hello Done

服务器发起消息结束的信号

6.Client Key Exchange

浏览器获取服务器发来的pubkey,计算出Diffie-Hellman客户端需要的参数pubkey,发给服务器。

7.Change Cipher Spec

通信双方加密策略转换信息,主要是让另一方知道它已经生成了会话密钥,并将切换到加密通信。

8.Encrypted Handshake Message

加密握手的消息

9.New Session Ticket

完成上面的步骤,可以说TLS的握手阶段已经完成了,但是,服务器还会发送一个Session Ticket给浏览器。 sessionticket 包含了这个 ticket 的生命周期、id、长度。用于握手阶段用来建立 TLS 连接。

其他

TLS1.2与1.0、1.1的区别

TLS 1.0 TLS 1.1 在计算 finish 时,进行的是 MD5+ SHA1组合方式运算,而在 TLS 1.2下,摘要算法变成了单次 SHA256。

TLS 1.3中的握手有什么不同?

TLS 1.3 不支持 RSA,也不支持易受攻击的其他密码套件和参数。它还缩短了 TLS 握手,使 TLS 1.3 握手更快更安全。

Diffie -Hellman(迪菲-赫尔曼)算法

Diffie-Hellman(迪菲-赫尔曼)算法是一种用于密钥交换的加密算法,其目的是在不安全的通信渠道中,让两个或多个参与者可以协商出一个共享的密钥,以便进行加密通信。该算法由惠特菲尔德·迪菲(Whitfield Diffie)和马丁·赫尔曼(Martin Hellman)于1976年提出,因此得名。Diffie-Hellman算法的基本原理是利用数论中的离散对数问题。它涉及到两个主要步骤:

  1. 密钥协商阶段:参与者之间通过公开的通信渠道交换信息,但不直接交换密钥。在这个阶段,每个参与者选择自己的私密信息,并使用公开的参数进行计算,生成一个公开的临时值。这些临时值会被发送给其他参与者。
  2. 密钥推导阶段:在密钥协商阶段完成后,参与者利用对方发送的公开临时值和自己的私密信息,以及一些公开的参数,计算出一个共享的密钥。这个共享的密钥只有参与者自己才能计算出来。 这样,通过Diffie-Hellman算法,即使在通信过程中,攻击者可以截获公开的通信信息,但由于无法解决离散对数问题,因此很难推导出实际的密钥,从而保证了通信的安全性。Diffie-Hellman算法被广泛用于安全通信协议中,比如SSL/TLS协议用于加密互联网通信。

参考资料

https://www.cloudflare.com/zh-cn/learning/ssl/what-happens-in-a-tls-handshake/