加密套件
加密套件是指在ssl通信中,服务器和客户端所使用的加密算法的组合。在ssl握手初期,客户端将自身支持的加密套件列表发送给服务器,服务器根据自己的配置从中尽可能的选出一个套件,作为之后所要使用的加密方式。
通常加密套件分3部分,第一部分是密钥交换,这部分会使用非对称加密算法来生成会话密钥,因为非对称算法不会将重要数据在通信中传输;第二部分是对称加密算法,主要是对传输的数据进行加密传输用的,如果性能允许,这里可以不需要,因为非对称加密算法太耗性能,再者有些非对称加密算法有内容长度的限制,所以真正要传输的数据会使用对称加密来进行加密;第三部分是会话校验算法,为了防止握手本身被窜改(这里极容易和证书签名算法混淆)。
举例:
我们的主页www.trustasia.com
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f)
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (0xc030)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 (0xc028)
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
TLS_RSA_WITH_AES_256_GCM_SHA384 (0x9d)
TLS_RSA_WITH_AES_256_CBC_SHA256 (0x3d)
TLS_RSA_WITH_AES_256_CBC_SHA (0x35)
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA (0x84)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256 (0xc027)
TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013)
TLS_RSA_WITH_AES_128_GCM_SHA256 (0x9c)
TLS_RSA_WITH_AES_128_CBC_SHA256 (0x3c)
TLS_RSA_WITH_AES_128_CBC_SHA (0x2f)
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA (0x41)
TLS_RSA_WITH_3DES_EDE_CBC_SHA (0xa)
TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA (0xc012)
如果浏览器支持ECDHE,RSA,AES,3DES,GCM,SHA256,SHA,SHA384,那么根据我们服务器配置优先级就会选0xc02f这个套件。也就是tls协议,ecdhe-rsa来进行密钥交换,aes128兼gcm的加密方式,用sha256校验会话。
加密套件的标识:
每个加密套件是有唯一数字作为标识的,如0xc02f,用openssl来表示的话就是TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256。
推荐的加密套件:
目前看来TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256是最佳选择,在chrome浏览器里会提示新型的加密方式
优先顺序的逻辑
l ECDHE+AESGCM 加密是首选的。它们是 TLS 1.2 加密算法,现在还没有广泛支持。当前还没有对它们的已知攻击。
l PFS (完美前向保密)加密套件好一些,首选 ECDHE,然后是 DHE。
l AES 128 要好于 AES 256。有一个关于 AES256 带来的安全提升程度是否值回成本的讨论,结果是显而易见的。目前,AES128 要更值一些,因为它提供了不错的安全水准,确实很快,而且看起来对时序攻击更有抵抗力。
l 在向后兼容的加密套件里面,AES 要优于 3DES。在 TLS 1.1及其以上,减轻了针对 AES 的野兽攻击(BEAST)的威胁,而在 TLS 1.0上则难以实现该攻击。在非向后兼容的加密套件里面,不支持 3DES。
l RC4 是流加密方式,曾今唯一的流加密方式。
弃用的算法
l aNULL 包含了非验证的 Diffie-Hellman 密钥交换,这会受到中间人(MITM)攻击
l eNULL 包含了无加密的算法(明文)
l EXPORT 是老旧的弱加密算法,是被美国法律标示为可出口的
l RC4 包含的加密算法使用了已弃用的 ARCFOUR 算法
l DES 包含的加密算法使用了弃用的数据加密标准(DES)
l SSLv2 包含了定义在旧版本 SSL 标准中的所有算法,现已弃用
l MD5 包含了使用已弃用的 MD5 作为哈希算法的所有算法