我正在寻找支持当前(2015 年 11 月)有关 SSL 的 PCI-DSS 要求的 Web 服务器(nginx)配置:
- 没有 TLSv1.0(只有 TLSv1.1 和 TLSv1.2,以及未来的 TLSv1.3)。
- 没有弱 SSL 密码,这意味着没有 CBC(密码块链接)、没有 DES、IDEA 密码套件、没有 RC4 等。
在使用 Nexpose 进行多次扫描后,我创建了 Nginx 配置,最终满足了这个非常严格的要求。我当前的测试配置如下所示:
server {
#(..)
ssl_certificate asdf.crt;
ssl_certificate_key sadf.key;
ssl_protocols TLSv1.1 TLSv1.2; #see about TLSv1.1 below
ssl_ecdh_curve secp521r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 5m;
ssl_dhparam asdf-dh2048.pem; #sorry, no support for Java 6u45
ssl_ciphers #ssh_ciphers of course should be in one line
ECDHE-ECDSA-AES256-GCM-SHA384:
ECDHE-ECDSA-AES128-GCM-SHA256:
ECDHE-RSA-AES256-GCM-SHA384:
ECDHE-RSA-AES128-GCM-SHA256:
DHE-RSA-AES256-GCM-SHA384:
DHE-RSA-AES128-GCM-SHA256:
AESGCM:
!aNULL:!eNULL:!EXPORT:!RC4:!MD5:!PSK;
}
很遗憾:
- ssl_ciphers一共有7个,一般用到的都是前6个。
- 即使我启用 TLSv1.1 也没有关系,上面的密码仅在 TLSv1.2 中可用。
- 使用扫描https://www.ssllabs.com/ssltest显示该网站具有 A+ 评级(太棒了!),但同时也显示,许多(或大多数)浏览器和库由于“协议或密码套件不匹配”而无法连接(不起作用:IE 6-10、Java 6 和 7、Android 2.3-4.4、OpenSSL 0.9.8、Safari 5-8 等)。
- 我删除了 TLSv1.0,因此没有选项可以使用安装在 Win XP、Win Vista、Win Serv 2003 上的应用程序进行连接,我知道。
- 使用 Nexpose 扫描没有问题(即没有使用 CBC 等)。
Nginx 使用 openssl,因此根据https://www.openssl.org/docs/manmaster/apps/ciphers.html(页面中间的“密码套件名称”一章)删除 CBC、RC4 和其他“弱”元素后,我没有看到任何使用 TLSv1.0 或 TLSv1.1 协议的选项。我也没有看到使用带有更多密码的 TLSv1.2 的可能性。
有人知道我的配置可以改变什么吗,以增加与浏览器/库/系统的兼容性,同时仍然符合 PCI-DSS 标准?
答案1
如果您禁用 TLS1.0 并禁用所有 CBC 密码,那么实际上并没有太多办法可以提高与浏览器的兼容性。
但是,如果禁用 TLS1.0,CBC 密码就不会被视为“弱密码”。BEAST 攻击所基于的漏洞在 TLS1.1 及更高版本中不存在。