与 PCI-DSS 要求兼容的 Web 服务器 SSL 配置,用于禁用 CBC 和 TLSv1.0

与 PCI-DSS 要求兼容的 Web 服务器 SSL 配置,用于禁用 CBC 和 TLSv1.0

我正在寻找支持当前(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 及更高版本中不存在。

相关内容