nginx 推荐 ssl_ciphers

信息安全 tls 密码选择 nginx 前向保密
2021-08-30 03:45:25

我正在寻找一些关于使用 SSL 为 nginx 设置密码的建议。

对于目前在安全性和兼容性之间的良好折衷,您有什么建议?

我进行了一些研究,但解决方案有时非常不同,而且令人困惑。

  • 例如,此站点https://cipherli.st/仅推荐:

    AES256+EECDH:AES256+EDH
    

    这是否意味着如果这些不能使用,就会出现错误?那是不是有点太拘束了?

  • Mozilla推荐更大的列表:

    其中,AES128 似乎比 AES256 更受欢迎,因为我知道顺序很重要,对吗?

    如果它可用,它不是 AES256 更好吗?那他们为什么不把它们放在第一位呢?

    ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK
    
    ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
    
  • 与 Mozilla 相比,这篇文章推荐了一个非常小的列表:

    ECDH这里 Vs有什么区别?ECDHE与Mozilla?

     ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS;
    
  • Comodo再次推荐一些不同的东西:

    ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4
    

好吧,我有点失落。我找到了这篇文章(出于安全性、兼容性而推荐的 ssl_ciphers - Perfect Forward secrecy)但它没有帮助,因为版本也很多,而且不容易整理出来。

有什么建议吗?

谢谢

2个回答

您链接到的 Mozilla 服务器端 TLS 指南是选择密码套件的绝佳资源。随着 TLS 中新漏洞的出现,密码套件的选择将发生变化,Mozilla 似乎在及时更新建议方面做得很好。

AES-128 通常是首选,因为人们认为越大越好AES-128 和 AES-256 都可以抵御已知的攻击,并且使用 AES-256 而不是 AES-128 的性能成本不可忽略。

ECDHE 使用临时密钥,而 ECDH 不使用。因此,ECDHE 提供了完美的前向保密,而 ECDH 没有。

我的 nginx /etc/nginx/perfect-forward-secrecy.conf 中有以下内容,这给了我 SSL 实验室的 A 级。您的证书应该是 SHA256。

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL
 !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !MEDIUM !RC4";
ssl_dhparam /my/path/to/dh4096.pem;

由于大多数最新的浏览器都支持 TLS,由于 Poodle 漏洞,我个人已禁用 SSLv3,并且不愿意使用基于 RC4 的密码运行。