一位开发人员最近使用 TripWire 对我们的 LAMP 服务器运行了 PCI 扫描。他们确定了几个问题,并指示以下人员纠正这些问题:
问题:SSL 服务器支持 SSLv3、TLSv1、
解决方法:在 httpd.conf 中添加如下规则
SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
问题:SSL 服务器支持 SSLv3、TLSv1 的 CBC 密码
解决方案:禁用任何使用 CBC 密码的密码套件
问题:SSL 服务器支持 SSLv3、TLSv1 的弱 MAC 算法
解决方案:禁用任何使用基于 MD5 的 MAC 算法的密码套件
我尝试在谷歌上搜索有关如何构建 SSLCipherSuite 指令以满足我的要求的综合教程,但我没有找到任何我能理解的东西。我看到了 SSLCipherSuite 指令的示例,但我需要解释指令的每个组件的作用。所以即使在指令SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
中,我也不明白例如是什么!LOW
意思。
有人可以 a) 告诉我 SSLCipherSuite 指令可以满足我的需求,还是 b) 向我展示一个资源,清楚地解释 SSLCipherSuite 的每个部分以及如何构建一个?
如果他们唯一的抱怨是基于 MD5 的 MAC,您应该能够简单地将
!MD5
元素添加到您现有的密码套件中以满足建议。也就是说,我看到他们也抱怨使用 CBC 模式。不幸的是,没有
CBC
密码组。给您的建议也不排除 CBC 模式密码规范,至少在我的 openSSL 版本(1.0.1e)上。这是一种耻辱。如果您需要排除所有此类密码,则可以明确排除所有 CBC 密码,但您必须在包含它们时对其进行更新。请注意,甚至HIGH
包括 CBC 密码。包括两者
ALL
都是RC4+RSA
多余的。我不愿意相信一个安全顾问(甚至是一个计算机化的顾问),他们甚至无法构建一个符合他们自己建议的格式良好的密码规范。SSLCipherSuite
需要一个 OpenSSL 密码规范。您可以在 openssl 文档(链接)中找到它,但我发现该文档通常已经过时了。但是,您可以通过openssl ciphers ${cipherspec}
在服务器上运行来测试一个;输出将是:
给定规范允许的密码的分隔列表,或者指示不允许的错误。同样,如果您想知道
LOW
包含的内容,请执行以下操作:!LOW
意味着排除那些。+HIGH
意味着在排序中更喜欢高安全性的。如果您想要在密码规范中使用 CBC 的所有密码的行分隔列表,请执行以下操作:
这些是您必须排除的。但是,您可能会发现
grep -v CBC
只包含这些更合理(只需将它们设置在:
- 分隔的列表中并将其用作密码规范)。文档在此处
mod_ssl
解释了SSLCipherSuite
设置的组成部分。如果您想满足所有这些扫描要求,您几乎只需要运行 RC4
SSLCipherSuite RC4-SHA
(或运行更新的 TLS,这可能对您的系统实用,也可能不实用)。