直接翻译为加密套件,在 TLS/SSL 中实际上包含了四类,用来完成握手阶段的信息交互,决定了后续信息交互的过程,包括了认证、加解密、密钥交换等所使用的算法。
这里会简单介绍所支持的算法,以及如何在 OpenSSL 中使用。
加密算法套件 CipherSuite 由各类基础的加密算法组成,主要包含了四类:
而 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 网站查询加密算法的安全性。
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 。
如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^