一位开发人员最近使用 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 算法的密码套件
我尝试在 Google 上搜索有关如何构建 SSLCipherSuite 指令以满足我的需求的全面教程,但我没有找到任何我能理解的内容。我看到了 SSLCipherSuite 指令的示例,但我需要解释该指令的每个组件的作用。因此,即使在指令中SSLCipherSuite ALL:!aNULL:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM
,我也不明白例如是什么!LOW
意思。
有人可以 a) 告诉我符合我需求的 SSLCipherSuite 指令,或者 b) 向我展示一个资源,清楚地解释 SSLCipherSuite 的每个部分是什么以及如何构建一个?
答案1
如果他们唯一的抱怨是基于 MD5 的 MAC,您应该能够简单地将该!MD5
元素添加到您现有的密码套件中以满足建议。
话虽如此,我看到他们也抱怨使用 CBC 模式。不幸的是,没有CBC
密码组。给您的建议也没有排除 CBC 模式密码规范,至少在我的 openSSL 版本(1.0.1e)上没有。这很遗憾。如果您需要排除所有此类密码,您可以明确排除所有 CBC 密码,但您必须更新它,因为它们已包含在内。请注意,甚至HIGH
包括 CBC 密码。
包括ALL
和RC4+RSA
都是多余的。我不愿意相信一个安全顾问(即使是计算机化的顾问),他们甚至不能构建一个符合他们自己建议的格式良好的密码规范。
采用SSLCipherSuite
OpenSSL 密码规范。您可以找到在 openssl 文档中(链接),但我发现这个文档通常已经过时了。但是,您可以通过openssl ciphers ${cipherspec}
在服务器上运行来测试它;输出将是:
给定规范允许的以 - 分隔的密码列表,或指示不允许任何密码的错误。
类似地,如果您想知道LOW
包含什么,请执行以下操作:
falcon@tiernyn ~ $ openssl ciphers 'LOW'
EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:ADH-DES-CBC-SHA:DES-CBC-SHA:DES-CBC-MD5
!LOW
表示排除那些。 +HIGH
表示在排序中优先考虑安全性较高的。
如果您想要一个以行分隔的列表,其中包含密码规范中使用 CBC 的所有密码,请执行以下操作:
openssl ciphers ${cipherspec} | sed 's/:/\n/g' | grep CBC
这些是您必须排除的。但是,您可能会发现grep -v CBC
仅包含这些更合理(只需将它们设置在:
-delimited 列表中并将其用作密码规范)。
答案2
该mod_ssl
文档解释了设置的组成部分SSLCipherSuite
,这里。
如果您想满足所有这些扫描要求,您几乎只需要运行 RC4 SSLCipherSuite RC4-SHA
(或者运行较新的 TLS,这对于您的系统来说可能实用也可能不实用)。