SSL/TLS握手原理&加密套件简述

来自DNS-WIKI
Admin讨论 | 贡献2024年8月14日 (三) 15:57的版本 (创建页面,内容为“概述 SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在OpenSSL中指定加密套件。 加密套件介绍 SSL/TLS协议的加密套件是定义了在一次连接中所使用的各种加密算法的组合。…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

概述

SSL/TLS握手时,客户端与服务端协商加密套件是很重要的一个步骤,协商出加密套件后才能继续完成后续的握手和加密通信。而现在SSL/TLS协议通信的实现,基本都是通过OpenSSL开源库,本文章就主要介绍下加密套件的含义以及如何在OpenSSL中指定加密套件。


加密套件介绍

SSL/TLS协议的加密套件是定义了在一次连接中所使用的各种加密算法的组合。它包括以下几个主要部分

密钥交换算法:用于协商会话密钥,如RSA、DH、ECDH等。

对称加密算法:用于实际数据传输的加解密,例如AES、3DES等。

消息认证码(MAC)或伪随机函数(PRF):用于验证数据完整性及防止篡改,如SHA256等。

如何指定加密套件

使用OpenSSL或者Nginx实现SSL/TLS协议时,都需要指定加密套件。

一般如下指定就可以,表示指定加密套件为任意算法,但身份认证算法和加密算法不能为空。这样客户端和服务端就会自动协商一个加密套件进行通信。

  ssl_ciphers ALL:!aNULL;  #Nginx配置加密套件

  SSL_CTX_set_cipher_list(ServerCTX, "ALL:!aNULL");  #openssl接口配置加密套件


什么是加密套件?

  加密套件是用于在SSL / TLS握手期间协商安全设置的算法的组合。在ClientHello和ServerHello消息交换之后,客户端发送优先级列表的密码支持套件。然后,服务器使用从列表中选择的密码套件进行响应。


TLS算法组合:

在TLS中,5类算法组合在一起,称为一个CipherSuite:

认证算法

加密算法

消息认证码算法 简称MAC

密钥交换算法

密钥衍生算法

比较常见的算法组合是 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA 和  TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, 都是ECDHE 做密钥交换,使用RSA做认证,SHA256做PRF算法。

一个使用AES128-CBC做加密算法,用HMAC做MAC。

一个使用AES128-GCM做加密算法,MAC由于GCM作为一种AEAD模式并不需要。

这里是一个加密套件的例子:

TLS _ECDHE_ RSA _ WITH_AES_128_GCM _ SHA256

  TLS是协议。从ECDHE开始,在握手期间,密钥将通过临时ECDHE进行交换。RSA是认证算法。AES_128_GCM是批量加密算法。SHA-256是散列算法。

  大多数浏览器和服务器都有各自支持的密码套件列表,两者将在握手过程中进行优先顺序比较,以确定使用的安全设置。

  最后作为TLS 1.3最终版本,这一切都会改变。虽然以前SSL / TLS通过TLS 1.2版本是使用上诉描述的加密套件模板,但1.3版本的加密套件将会有所改变,因为它们仅用于协商加密和HMAC算法。

  因为1.3加密套件的结构与之前的版本不同,所以它们与旧的TLS版本不能进行互换。

  密码是算法,用于加密和解密。它们可以是对称的或不对称的,这取决于它们支持的加密类型。

  加密套件是用于在SSL / TLS握手期间协商安全设置的密码的命名组合。在握手期间,客户端和服务器交换密码套件的优先级列表,并决定两者最佳支持的套件。

  在TLS 1.3中,加密套件的结构将改变。


SSL协议的握手过程

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

第二步,鲍勃确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。

第三步,爱丽丝确认数字证书(对证书信息进行md5或者hash后的编号==用证书机构的公钥对加密的证书编号解密后的证书编号)有效,然后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥(鲍勃的公钥),加密这个随机数,发给鲍勃。

第四步,鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)。

第五步,爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成"对话密钥"(session key),用来加密接下来的整个对话过程。

https要使客户端与服务器端的通信过程得到安全保证,必须使用对称加密算法并且每个客户端的算法都不一样,需要一个协商过程,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。