我是nginx的新手,最近我决定更改配置文件,使用return语句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有一个支持的密码列表,可以找到这里,但是我不知道如何在我的配置文件中这样做。因为我的协议包括TLSv1, TLSv1.1, and TLS1.2,所以我应该全部使用吗?还是我只使用名单中的一个。对于需要在我的ssl_ciphers变量中设置什么,我真的很困惑。
我还读到,在SSLv3中启用ssl_protocols是个坏主意。我是否可以从ssl_protocols中删除它并保存配置,而不会引起重大问题?
如果有人能帮我回答这些问题,那将是非常有帮助的。谢谢!
发布于 2020-06-30 08:17:19
默认情况下,密码被使用,Nginx根据版本配置它。
在版本1.0.5及更高版本中,默认的SSL密码是高的:!aNULL:!MD5。在0.7.65和0.8.20及更高版本中,默认的SSL密码是高的:!ADH:!MD5。从0.8.19版本开始,默认的SSL密码都是:!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-SHA 256”;只支持这个特定的加密套件。关于:
我还读到,在SSLv3中启用ssl_protocols是个坏主意。我是否可以从ssl_protocols中删除它并保存配置,而不会引起重大问题?
它可能导致的唯一主要问题是,使用SSLv3连接服务器的客户端将被拒绝,因为服务器不能接受它(配置文件不支持)。在任何情况下,Nginx在某些版本中都是默认的,应该不是问题所在。
来自Nginx Docs:
在0.7.65和0.8.19及更高版本中,默认的SSL协议是SSLv3、TLSv1、TLSv1.1和TLSv1.2 (如果得到OpenSSL库的支持)。
https://stackoverflow.com/questions/62325934
复制相似问题