我们有一个带有 apache2 2.2.22-1ubuntu1.7 的网络服务器(Ubuntu 12.04)。
从客户端使用 openssl:
$ echo QUIT | openssl s_client -connect OURSERVER:8080 2>/dev/null | egrep "Cipher is|Protocol"
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Protocol : TLSv1.2
$
我们可以连接OK,但是我们的Ubuntu 14.04下的Firefox 33只能连接max:
TLS_DHE_RSA_WITH_AES_256_CBC_SHA
但是当我们使用相同的 Firefox 33 访问其他网站时,我们可以看到它可以使用 GCM!
问题:为什么我们无法使用 GCM 连接到我们的网络服务器?为什么 Firefox 不使用例如:TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256?
我们的 apache 配置如下所示:
SSLCipherSuite "HIGH"
SSLProtocol -ALL +TLSv1
SSLHonorCipherOrder on
答案1
“密码套件”HIGH
是一组密码套件。显然,您对这些密码套件的排序的期望与默认值不同。
正如您在以下命令输出中看到的openssl ciphers
,该DHE-RSA-AES256-SHA256
密码套件优于您期望的 GCM 密码套件。
$ openssl 密码 -V HIGH | \ > grep -nC1 'DHE-RSA-AES256-SHA256\|ECDHE-RSA-AES128-GCM-SHA256' |列-t 11- 0x00,0x9F - DHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=DH Au=RSA Enc=AESGCM(256) Mac=AEAD 12: 0x00,0x6B - DHE-RSA-AES256-SHA256 TLSv1.2 Kx=DH Au=RSA Enc=AES(256) Mac=SHA256 13- 0x00,0x6A - DHE-DSS-AES256-SHA256 TLSv1.2 Kx=DH Au=DSS Enc=AES(256) Mac=SHA256 -- 33- 0x00,0x8D - PSK-AES256-CBC-SHA SSLv3 Kx=PSK Au=PSK Enc=AES(256) Mac=SHA1 34: 0xC0,0x2F - ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(128) Mac=AEAD 35- 0xC0,0x2B - ECDHE-ECDSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(128) Mac=AEAD
如果您想强制执行特定顺序,请显式指定套件,如下所示:
SSLCipherSuite "EECDH+AESGCM+AES128 EECDH+AESGCM DH+AESGCM+AES128 DH+AESGCM+AES EECDH+AES128 EECDH+AES DH+AES128 DH+AES RSA+AESGCM+AES128 RSA+AESGCM+AES RSA+AES128 RSA+AES RSA+3DES !MD5:!aNULL"
请注意,您的 Apache 版本是太老支持 ECDH 密码套件。此外,通过使用SSLProtocol -ALL +TLSv1
,您将在较新版本的 Apache 中排除使用 TLSv1.1 和 TLSv1.2。我建议改用SSLProtocol ALL -SSLv2 -SSLv3
并升级您的网络服务器。
作为参考,这里是测试SSL服务器SSLCipherSuite HIGH
我使用and为在 Ubuntu 12.04 上运行的 Apache 2.22 获得的输出SSLProtocol ALL -SSLv2 -SSLv3
:
Supported versions: TLSv1.0 TLSv1.1 TLSv1.2
Deflate compression: no
Supported cipher suites (ORDER IS NOT SIGNIFICANT):
TLSv1.0
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
DH_anon_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
DH_anon_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
DH_anon_WITH_AES_256_CBC_SHA
RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
DH_anon_WITH_CAMELLIA_128_CBC_SHA
RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
DH_anon_WITH_CAMELLIA_256_CBC_SHA
(TLSv1.1: idem)
TLSv1.2
RSA_WITH_3DES_EDE_CBC_SHA
DHE_RSA_WITH_3DES_EDE_CBC_SHA
DH_anon_WITH_3DES_EDE_CBC_SHA
RSA_WITH_AES_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA
DH_anon_WITH_AES_128_CBC_SHA
RSA_WITH_AES_256_CBC_SHA
DHE_RSA_WITH_AES_256_CBC_SHA
DH_anon_WITH_AES_256_CBC_SHA
RSA_WITH_AES_128_CBC_SHA256
RSA_WITH_AES_256_CBC_SHA256
RSA_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
DH_anon_WITH_CAMELLIA_128_CBC_SHA
DHE_RSA_WITH_AES_128_CBC_SHA256
DHE_RSA_WITH_AES_256_CBC_SHA256
DH_anon_WITH_AES_128_CBC_SHA256
DH_anon_WITH_AES_256_CBC_SHA256
RSA_WITH_CAMELLIA_256_CBC_SHA
DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
DH_anon_WITH_CAMELLIA_256_CBC_SHA
TLS_RSA_WITH_AES_128_GCM_SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DH_anon_WITH_AES_128_GCM_SHA256
TLS_DH_anon_WITH_AES_256_GCM_SHA384
----------------------
Server certificate(s):
d975495633785b152215100eb449c57bee391e98: CN=ubuntu
----------------------
Minimal encryption strength: strong encryption (96-bit or more)
Achievable encryption strength: strong encryption (96-bit or more)
BEAST status: vulnerable
CRIME status: protected