如何强制所有 Apache 连接使用 TLSv1.1 或 TLSv1.2

del*_*oot 3 windows-7 apache-http-server ssl openssl

我一直无法找到解决方案,如果有请参考。

跑步:

  • 视窗7 x64
  • 阿帕奇 2.4.4
  • OpenSSL 1.0.1j

并在我的httpd_ssl 中有以下内容

SSLStrictSNIVHostCheck off  
SSLProtocol All -SSLv2 -SSLV3  
SSLCompression off  
SSLInsecureRenegotiation off  
SSLHonorCipherOrder on  

SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL 
!LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"

SSLUseStapling on  
SSLStaplingResponderTimeout 5  
SSLStaplingReturnResponderErrors off  
Run Code Online (Sandbox Code Playgroud)

题:

无论我做什么,我似乎都无法启用 TLSv1.1 和 TLSv1.2。
运行 ServerSSLTest 脚本,我得到的只是支持的版本:TLSv1.0

我错过了什么?

小智 5

首先,您需要在 OpenSSL 中获得 TLSv1.1 和 V1.2 支持 - 使用 v1.0.1j 即可。

接下来是 Apache V2.2.24(或更高版本)对与 SSL 相关的配置项的支持。特别是,要指定 TLS1 之后的任何内容(即 TLSv1.1 TLSv1.2),您需要更高版本。你有 2.4.4,所以应该没问题。

接着,Apache配置参数之间的“相互作用”:SSLProtocolSSLCipherSuite

因此,对于您想要的配置,TLSv1.1 和 TLSv1.2,您需要如下内容:

SSLProtocol=All -SSLv2 -SSLV3 -TLSv1
SSLCipherSuite HIGH:!aNULL:!MD5:!RC4
Run Code Online (Sandbox Code Playgroud)

感谢您提供更具体的密码套件列表:

EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4
Run Code Online (Sandbox Code Playgroud)

但是,当我检查我的 openssl(v1.0.1 流)时,我发现支持以下 TLSv1.2 之前的套件:

 openssl ciphers -s -v 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH EDH+aRSA !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4'

ECDHE-RSA-AES256-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(256)  Mac=SHA1
ECDHE-ECDSA-AES256-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(256)  Mac=SHA1
ECDHE-RSA-AES128-SHA    SSLv3 Kx=ECDH     Au=RSA  Enc=AES(128)  Mac=SHA1
ECDHE-ECDSA-AES128-SHA  SSLv3 Kx=ECDH     Au=ECDSA Enc=AES(128)  Mac=SHA1
DHE-RSA-AES256-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(256)  Mac=SHA1
DHE-RSA-CAMELLIA256-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(256) Mac=SHA1
DHE-RSA-AES128-SHA      SSLv3 Kx=DH       Au=RSA  Enc=AES(128)  Mac=SHA1
DHE-RSA-SEED-SHA        SSLv3 Kx=DH       Au=RSA  Enc=SEED(128) Mac=SHA1
DHE-RSA-CAMELLIA128-SHA SSLv3 Kx=DH       Au=RSA  Enc=Camellia(128) Mac=SHA1
Run Code Online (Sandbox Code Playgroud)

然后在这里检查(第 A.5 节),http: //tools.ietf.org/html/rfc4346 我不认为我的 openssl 列出的任何支持的套件实际上是 TLSv1.1 有效的,所以你只会结束在测试时使用 TLSv1.2(例如在 Qualys https://www.ssllabs.com/ssltest/)。

最后,还有客户端支持的整个问题 - 上面的 Qualys 链接很方便,因为它列出了哪种类型的客户端(例如,特定的 Android 版本)能够连接到提交的测试服务器)。由于您对密码非常专一,我认为您不会因为允许 TLSv1(读取 v1.0)以及 V1.1 和 V1.2 而冒太大风险,除非您知道您的访问者群将不包括 TLSv1只有有能力的客户。