我管理一些网站,其中一个网站的安全评级很差(来自安全评分卡)。我有一个托管服务器,所以我请 IT 人员帮忙,但也想进一步了解这个问题。
问题是,存在旧的 TLS1.0 和 TLS1.1 密码套件,例如:
TLS_RSA_WITH_IDEA_CBC_SHA (0x0007)
TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
TLS_RSA_WITH_RC4_128_MD5
TLS_RSA_WITH_3DES_EDE_CBC_SHA
我首先想到的是,这些必须位于 OpenSSL 配置文件中。但看了一些教程后,我猜它指的是 Apache 配置。httpd.conf
(和虚拟主机)没有明确设置密码套件。但包含的内容httpd-ssl.conf
有一些东西。
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
SSLCipherSuite ECDH+AESGCM:ECDH+CHACHA20:ECDH+AES256:!LOW:!MEDIUM:!3DES:!aNULL:!eNULL:!ADH:!DSS!EXP:!MD5:!PSK:!RC4:!SRP
我目前不明白的是:这是正确的地方吗?也许不是,或者为什么读起来不一样。
我在 ciphersuite.info 上看到,上面的第一个是 IANA 名称 (?),还有 OpenSSL 名称。但是ECDH+AESGCM
例如是什么呢?
可能需要一些关于下一步该看什么的指导。不想复制粘贴信息,但想对这个主题多了解一点。但是,我不是安全或主要的 IT 人员,所以我不喜欢读一本 300 页的书 :-/
答案1
这SSLCipherSuite
是设置应使用的加密算法的正确指令。在 TLS 1.2 中,您需要设置四种算法的组合(称为密码套件):
- 一种密钥交换算法,用于在客户端和服务器之间建立共享秘密。双方可以从该秘密中导出对称加密的密钥。
- 用于密钥交换的签名算法。
- 用于实际加密和解密要传输的数据的对称密钥算法。
- 一种哈希算法,用于确保消息的完整性(通过消息认证码)或构建加密安全的伪随机数生成器。
每个密码套件都有一个唯一的标识符通过 IANA 注册并以 开头TLS_
。例如, 代表TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
:
- 密钥交换算法是DHE,即使用临时密钥的Diffie-Hellman密钥交换。
- 签名算法为RSA。
- 对称加密算法是 GCM 模式下具有 128 位密钥的 AES。
- 哈希算法是SHA-256。
OpenSSL 作为具体 TLS 实现的提供者,可让您通过以下方式选择 IANA 密码套件自定义格式,称为“密码列表”。此格式支持复杂的选择规则,例如,ECDH+AESGCM
代表包含算法ECDH
(用于密钥交换)和算法AESGCM
(用于对称加密)的所有密码套件。您可以使用命令检查获取的确切密码套件openssl ciphers "ECDH+AESGCM"
。在我的例子中,列表包括密码套件TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
(或 OpenSSL 称之为ECDHE-ECDSA-AES128-GCM-SHA256
)。
字符串ECDH+AESGCM
本身是不是密码套件。这是 OpenSSL 特定的密码套件选择规则。
在实践中,我会使用具体的安全密码套件列表,例如Mozilla 的建议使用 OpenSSL 选择规则时,可能会存在包含您实际上不想要的密码套件的风险(尽管您始终可以使用openssl ciphers
上面提到的命令检查结果)。