【问题标题】:How to choose the right ciphers for NGINX config如何为 NGINX 配置选择正确的密码
【发布时间】:2020-10-01 04:31:11
【问题描述】:

我是nginx 的新手,最近我决定更改配置文件,使用返回语句return 301 https://$host$request_uri; 将我的应用程序从http 重定向到https。这一切都很好,直到我注意到我们没有通过Twilio API 收到短信。我决定调试这个问题,发现我收到了SSL/TLS Handshake Error

查看调试器,我看到他们认为这是问题的可能原因:

Incompatible cipher suites in use by the client and the server. This would require the client to use (or enable) a cipher suite that is supported by the server.

查看nginx 配置文件,我注意到没有使用密码,这可能是问题的根源,而不是因为查看下面的配置未启用 TLS:

server {
        listen      443 ssl http2 default_server;
        listen      [::]:443 ssl http2 default_server;
        server_name     localhost;

        ssl_certificate "/etc/nginx/ssl/domain-crt.txt";
        ssl_certificate_key "/etc/nginx/ssl/domain-key.txt";
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;

        ## More configuration below this...
    }

Twilio 有一个受支持的密码列表,可以在here 找到,但我不确定如何在我的配置文件中执行此操作。因为我的协议包括TLSv1, TLSv1.1, and TLS1.2,我应该使用所有这些吗?还是我只使用列表中的一个。我真的很困惑我需要在我的 ssl_ciphers 变量中设置什么。

我还读到在ssl_protocols 中启用SSLv3 是个坏主意。我可以从ssl_protocols 中删除它并保存配置而不引起重大问题吗?

如果有人能帮我回答这些问题,那将非常有帮助。谢谢!

【问题讨论】:

    标签: nginx twilio nginx-config


    【解决方案1】:

    默认使用密码,Nginx 由版本配置。

    在 1.0.5 及更高版本中,默认 SSL 密码为 HIGH:!aNULL:!MD5。在 0.7.65 和 0.8.20 及更高版本中,默认 SSL 密码为 HIGH:!ADH:!MD5。从版本 0.8.19 开始,默认 SSL 密码是 ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM。从 0.7.64 版本开始, 0.8.18 及更早版本的默认 SSL 密码为 ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP。 请参阅Nginx Docs 了解更多信息。

    但您也可以明确选择您希望允许使用的密码: ssl_ciphers "cipher1 cipher2 ... cipherN"; 例如 - ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256";仅支持此特定密码套件。 关于:

    我还读到在 ssl_protocols 中启用 SSLv3 是个坏主意。 我可以从 ssl_protocols 中删除它并保存配置吗 不会造成重大问题?

    它可能导致的唯一主要问题是使用 SSLv3 尝试连接您的服务器的客户端将被拒绝,因为您的服务器不接受它(配置文件不支持)。无论如何,在某些版本中它是 Nginx 默认的,应该不是问题。

    来自 Nginx 文档:

    从 0.7.65 和 0.8.19 及更高版本开始,默认 SSL 协议 是 SSLv3、TLSv1、TLSv1.1 和 TLSv1.2(如果 OpenSSL 支持 图书馆)。

    【讨论】:

    • 这是个好建议,谢谢。我是否只选择他们网站上列出的密码之一?还是我必须为每个 SSL 协议选择一个?
    • 你可以选择一个,但是你将允许客户端只使用这个,任何其他密码都不会被接受。我认为你应该使用各种密码,比如“HIGH:! aNULL:!MD5" 将完成这项工作。
    • HIGH 表示您使用双方(服务器和客户端)可接受的最高密码与客户端握手。 !aNULL 表示您不接受身份验证空密码,这是有道理的,MD5 是另一种消息摘要算法。
    • 我可以将它们与其他密码结合起来吗?所以如果我做了类似的事情:HIGH:!aNULL:!MD5:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA。或者我不能那样包含多个密码吗?抱歉所有问题,我只是想确保我做对了。
    • 是的,您可以这样做,只需要验证每个密码是否有效。
    猜你喜欢
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多