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

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

我还没有找到解决这个问题的方法,如果有的话请参考。

跑步:

  • Windows7 x64
  • Apache 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  

问题:

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

我错过了什么?

答案1

首先,您需要在 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

我很感激您有更具体的密码套件列表:

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

但是,当我使用 openssl (v1.0.1 流) 检查时,我发现支持以下 pre-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

然后检查这里(第 A.5 节),https://www.rfc-editor.org/rfc/rfc4346我认为我的 openssl 列出的任何受支持的套件实际上都不是有效的 TLSv1.1,因此在测试时(例如在 Qualys 上),您最终只能使用 TLSv1.2https://www.ssllabs.com/ssltest/)。

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

答案2

为了自动生成自动 ssl-config 文件,Mozilla 有一个 ssl-config 生成器:

https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=apache-2.4.0&openssl=1.0.1e&hsts=yes&profile=modern

这将为具有 openssl 1.0.1e 版本的 Apache 2.4 服务器提供模板。

希望这对刚接触 SSL 设置的人有所帮助。

答案3

尝试删除该行SSLCipherSuite并将其更改SSLProtocol为:

SSLProtocol -All +TLSv1.1 +TLSv1.2

我相信,如果在配置文件中遵循 SSLCipherSuite,它将会覆盖 SSLProtocol。

相关内容