直接翻译为加密套件,在 TLS/SSL 中实际上包含了四类,用来完成握手阶段的信息交互,决定了后续信息交互的过程,包括了认证、加解密、密钥交换等所使用的算法。
这里会简单介绍所支持的算法,以及如何在 OpenSSL 中使用。
CipherSuite
加密算法套件 CipherSuite 由各类基础的加密算法组成,主要包含了四类:
Authentication
认证算法;Encryption
对称加密算法;Message Authentication Code
消息认证码算法;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 中的内容。
参考
- CloudFlare SSLConfig 也就是 CloudFlare 当前使用的配置,也可以查看 Google 的 Blog Google Online Security 。