TLS/SSL工作原理及握手过程

发布时间 2023-03-27 15:40:39作者: ReTurn~~~~~~~

一、TLS/SSL基础概念

1、概念

TLS传输层安全性协议(Transport Layer Security)

SSL安全套接层(Secure Sockets Layer)

目的:为互联网通信提供安全以及数据完整性保障。

HTTPS = HTTP + TLS/SSL

2. TLS/SSL功能实现

TLS/SSL的功能实现主要依赖三类基本算法:

非对称加密:身份认证和密钥协商

对称加密:采用协商的密钥对数据进行加密

 散列函数 Hsah:验证信息完整性

 

3. 非对称加密

常见的RSA算法,还包括ECC、DH算法。

算法特点:密钥成对出现,一般分为公钥和密钥。

4. 对称加密

常见的AES-CBC、DES、3DES、AES-GCM等。信息的加密和解密都使用相同的米哟啊,掌握密钥才能获取信息。

在对称密钥中,信息安全的基础是保证密钥的安全。

5. Hash 散列函数

常见的MD5、SHA1、SHA256.

函数特点:函数单向不可逆、对输入非常敏感、输出长度固定,针对数据的任何修改都会改变散列函数的结果,用于防止信息纂改并验证数据的完整性。

散列函数不能单独实现信息防纂改,需要对信息进行加密传输。

二、密钥协商过程中存在的问题和解决的办法

使用非对称密钥与服务器进行通信,实现身份验证并协商对称加密使用的密钥

 

 

 上图中的过程不安全

 

 解决办法:

常见的方法为依靠中心化机构,包括对公钥基础设施PKI的使用。

PKI负责提供创建、吊销、分发以及更新密钥对与证书的服务。它需要一些证书颁发机构 CA  (Certificate Authority) 才能运行。

 

 三、TLS/SSL握手过程

 

 1. client_hello

客户端发起请求,以明文传输请求信息

包含:

  • TLS版本信息
  • 客户端支持的加密套件cipher suites列表,每个加密套件对应TLS原理中的四个功能的组合:认证算法Au(身份验证)、密钥交换算法Key Exchange(密钥协商)、对称加密算法Enc(信息加密)和信息摘要Mac(完整性校验)。
  • 支持压缩算法的compression methods列表,用于后续的信息压缩传输
  • 随机数random_C,用于后续密钥的生成
  • 扩展字段extensions

2. server_hello + server_certificate + server_hello_done

  • server_hello,服务端返回协商的信息结果,包含TSL版本、选择的加密套件、选择的压缩算法、随机数random_S(用于后续的密钥协商)
  • server_certificates,服务器端配置对应的证书链,用于身份验证和密钥交换
  • server_hello_done,通知客户端server_hello信息发送完毕

3. 证书校验

客户端验证证书的合法性,通过验证才会进行后续的通信,否则根据情况进行操作

4. client_key_exchange + change_cipher_spec + encrypted_hansshake_message

  • client_key_exchange,合法性验证通过后,客户端计算随机数Pre-master,并用证书加密,发送给服务器。
  • 客户端计算协商密钥:enc_key = Function(random_C,random_S,Pre_master);
  • change_cipher_spec,客户端通知服务器后续的通信都采用协商密钥和加密算法进行通信
  • encrypted_handshake_message,结合之前所有通信参数的hash值与其他相关信息生成一段数据,采用协商密钥session secret与算法进行加密,发送给服务器进行验证

5. change_cipher_spec + encrypted_handshake_message

  • 服务器用私钥解密加密的Pre-master数据,计算协商密钥enc_key = Function(random_C,random_S,Pre_master)
  • 计算之前收到的所有信息的hash值,然后解密客户端发送的encrtpted_handshake_message,验证数据和密钥的正确性
  • change_cipher_spec,客户端通知服务器后续的通信都采用协商密钥和加密算法进行通信
  • encrypted_handshake_message,服务器也结合当前的通信参数信息生成一段数据并采用协商密钥session secret与算法加密并发送到客户端。

6. 握手结束

客户端计算所有接受信息的hash值,并用协商密钥解密encrypted_shakehand_message,验证服务器发送的数据和密钥,验证通过后握手完成。

7. 加密通信

开始使用协商密钥与算法进行加密通信。

 

四、数字签名

数字签名:发送报文时,发送方用一个哈希函数从报文文本中生成报文摘要,然后用发送方的私钥对摘要进行加密,成为该报文的数字签名。

数字签名与报文一起被发送方发送给接收方,接收方用与发送方一样的哈希函数从原始报文中计算出报文摘要,接着用公钥对报文附加的数字签名进行解密,若相同,则确认无误

数字签名的功效

  • 确认消息确实是由发送方签名并发送出来的
  • 数字签名能确认消息的完整性