说说TLS

242 阅读4分钟

TLS是什么

传输层安全性协议(英语:Transport Layer Security,缩写:TLS),是使两个联网应用程序或设备能够安全可靠地交换信息的标准

TLS和SSL的关系

安全套接层SSL(Secure Sockets Layer)是TLS的前身

TLS如何实现可靠的数据传输

TLS在互联网上为HTTP等应用程序提供身份验证、加密、完整性,其基础是公钥基础设施

TLS握手过程

image.png

TLS握手包含几个基本阶段:

  1. 对等协商支持的TLS版本,和支持的密码包
  2. 基于非对称密钥的身份认证,通常是基于PKI证书的身份认证。服务器将其X.509证书发送给客户端,由客户端验证服务器的身份。如果服务器要验证客户端的证书,则客户端可能会将客户端证书发送给服务器。通常仅验证服务器,不验证客户端。
  3. 基于对称密钥的数据加密。客户端生成随机数作为会话密钥,并使用服务器公钥(服务器公钥在服务器证书中)加密会话密钥,最后将已加密的会话密钥发送给服务器。由服务器的私钥解密出会话密钥。最后使用此会话密钥加密数据。TLS也可以使用预共享密钥(PSK)作为对称密钥。

第一个阶段---协商密码包

1、客户端向服务端发起一个Clinet Hello,携带自身支持的TLS版本和加密套件列表,加密套件中就包含了加密算法和MAC算法

2、服务端接收到客户端的Client Hello后,选择TLS版本和加密套件,然后发出Server Hello,至此就协商好了TLS版本和支持的密码包

第二个阶段---身份认证

1、服务端向客户端发送数字证书

2、客户端收到数字证书后将证书中的数字签名用CA公钥解密,得到证书摘要1,再用数字证书中的证书原文用同样的hash函数进行处理,得到证书摘要2,若证书摘要1===证书摘要2,则验证了数字证书的有效性,完成了通信双方的身份认证

image.png

第三个阶段---生成对称密钥--用于加密传输

1、身份认证完成后,客户端生成一个随机数作为会话密钥,使用数字证书中的携带的公钥进行加密后发送给服务端

2、服务端收到加密后的数据后,使用私钥进行解密,得到那个随机数,作为会话密钥,后续双方将使用这个会话密钥进行加密传输

如何验证消息的完整性

握手过程中通过数字证书实现了身份认证,那如何保证消息在传输过程中未被篡改呢?

image.png TLS通过MAC消息认证码来验证消息的完整性

1、将数据流划分成数据块,然后使用协商好的MAC算法对数据块进行处理,得到一个MAC认证码,这个认证码会随数据块一同被发送

2、服务端收到数据块后,会使用相同的MAC算法对数据块进行处理,得到一个认证码,对比收到的认证码和自己生成的认证码,若相同,则数据是未被篡改过的,MAC认证码是消息内容的唯一标识,内容有一点点改动,生成的MAC认证码都不会相同

所用算法

在第一阶段,客户端与服务器协商所用密码算法。当前广泛实现的算法选择如下:

为何采用非对称加密+对称加密组合?

非对称加密的优点:

  • 安全性:非对称加密提供了更高的安全性。通过使用不同的密钥用途,公钥用于加密,私钥用于解密,可以避免对称加密中密钥传输的潜在风险。即使公钥被泄露,私钥仍然是保密的,确保数据的保密性。

对称加密的优点:

  • 传输效率高:对称加密算法适用于大规模数据的加密传输,因为相同的密钥用于加密和解密。这意味着加密后的数据包相对较小,传输效率高。

对称加密用于加密传输数据的过程,而非对称加密则用于在通信双方之间安全地分发和交换对称加密所需的密钥。这种组合可以兼顾了加密效率和密钥管理的安全性

总结

1、使用数字证书实现身份认证

2、使用MAC消息认证码验证消息完整性

3、握手过程使用非对称加密

4、数据传输过程使用对称加密实现加密传输