TLS/SSL CipherSuite 简介


直接翻译为加密套件,在 TLS/SSL 中实际上包含了四类,用来完成握手阶段的信息交互,决定了后续信息交互的过程,包括了认证、加解密、密钥交换等所使用的算法。

这里会简单介绍所支持的算法,以及如何在 OpenSSL 中使用。

CipherSuite

加密算法套件 CipherSuite 由各类基础的加密算法组成,主要包含了四类:

  1. Authentication 认证算法;
  2. Encryption 对称加密算法;
  3. Message Authentication Code 消息认证码算法;
  4. Key Exchange 密钥交换算法。

而 TLS Cipher Suite 在 www.iana.org 中注册,每一个 CipherSuite 分配一个 16bits 的数字来标识,可以在上面的网站中查询。

0x00,0xAA 	TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 	Y 	Y

例如如上 0x00 0xAA 标识了 TLS_DHE_PSK_WITH_AES_128_GCM_SHA256 这一算法,在 RFC5487 标准中定义了其实现方法。

也可以通过 openssl ciphers -V | column -t | less 命令查询。

0xC0,0x30 ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD

其中 ECDHE-RSA-AES256-GCM-SHA384 就是定义的 CipherSuite ,用于 TLSv1.2 版本中,对应的加密算法为:

  • ECDH 密钥交换;
  • RSA 认证;
  • AESGCM(256) 做对称加密;
  • AEAD 作 MAC 。

对于 TLSv1.3 来说,可以通过 openssl ciphers -V | column -t | grep 'TLSv1.3' 命令查看当前支持的加密套件。

不同的加密算法套件的安全等级也略有区别,在上述的链接中也给出了是否推荐使用,最新的状态也可以通过 ciphersuite.info 网站查询加密算法的安全性。

OpenSSL 指定

TLS/SSL 协议的实现有很多种,例如 OpenSSL、GNUTLS、NSS、LibreSSL、Cyassl、Polarssl、Botan 等等,虽然 OpenSSL 的代码算是其中最混乱的 (现在也开始改善了),但也是最久经考验的。

可以按照 OpenSSL 的格式指定 CipherSuite 列表,通过 : 分割 (也可使用 , 但是不常用),每个通过如下方式指定:

  • 指定单个加密套件,例如 AES256-GCM-SHA384
  • 包含某个特定算法的列表,例如 SHA1 摘要算法都为 SHA1 的算法,SSLV3 指定版本;
  • 中间使用 + 符号,用来表示且;
  • 添加 ! - + 符号,分别表示永久删除、可以通过后面选项添加、移动到列表最后;
  • 也可以通过 @STRENGTH 指定按照加密算法的 Key 长度排序。

相关的单个配置项可以参考 OpenSSL Ciphers 中的介绍,当前服务端建议的配置可以参考 Security/Server Side TLS 中的内容。

参考