Nginx + TLS 1.3 如何设置默认 AES_128_GCM?

2019-03-23 10:41:14 +08:00
 nikoo
目前是:
The connection to this site is encrypted and authenticated using TLS 1.3, X25519, and AES_256_GCM.

nginx 配置为:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ...

想将 AES_128_GCM 作为 prefer server cipher 替代目前的 AES_256_GCM,应做怎样的修改?
4134 次点击
所在节点    问与答
15 条回复
mason961125
2019-03-23 10:51:40 +08:00
这些参数里最关键的 ssl_ciphers 你没贴...
nikoo
2019-03-23 10:55:43 +08:00
@mason961125 ssl_ciphers 是 Let's Encrypt 默认的:

ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS";

奇怪的是,无论如何修改这个 ssl_ciphers 的值,甚至乱写:
ssl_ciphers "1234567";
都能通过 nginx -t 配置检测,也能启动 nginx,启动后仍然是 using TLS 1.3, X25519, and AES_256_GCM
msg7086
2019-03-23 11:18:11 +08:00
如果是 Debian 系的话可以试试 SB Nginx,有补丁。

补丁: https://g.x86.men/root/nginx-pika/commit/c157c72e85517742a26d4f7993957c47e6de139f
安装: https://mirrors.xtom.com.hk/sb/nginx/

然后在 ciphers 里加入 TLS_AES_128_GCM_SHA256 试试看。
DesignerSkyline
2019-03-23 11:18:43 +08:00
TLS1.3 不支持自己修改 ciphers, 这个就算你不用 nginx 也是一样的。
nikoo
2019-03-23 11:23:06 +08:00
@msg7086 @DesignerSkyline 谢谢,如果将
ssl_prefer_server_ciphers on;
改为
ssl_prefer_server_ciphers off;
即按客户端偏好选择 ciphers 的话,用 Chrome 打开可以看到是想要的 using TLS 1.3, X25519, and AES_128_GCM

另外问一下,如果设置 ssl_prefer_server_ciphers off; 有没有什么坑?
msg7086
2019-03-23 11:33:45 +08:00
@nikoo 我选择按照服务器喜好。
nikoo
2019-03-23 11:37:28 +08:00
@DesignerSkyline 请教大佬,TLS1.3 不支持自己修改 ciphers 怎么搜相关文档关键字?谢谢!
nikoo
2019-03-23 11:40:36 +08:00
@msg7086 谢谢,是不是可以这样理解,同 Chrome 访问一个站其显示为 TLS 1.3 + AES_128_GCM
那么他要不就是设了 ssl_prefer_server_ciphers off; 要不就是用了您刚贴的补丁魔改成了 SB Nginx ?
正经 nginx 没法做到是吗?
msg7086
2019-03-23 11:45:01 +08:00
@nikoo 什么叫正经的 Nginx ……

官方的 Nginx 现在的确没有去支持选择 TLS 1.3 的 cipher,因为 TLS 1.3 用了另一个函数接口去选择 cipher (看我的补丁源码),而原来的接口只支持 TLS 1.2 以下的 cipher。所以要么改 Nginx,要么改 OpenSSL,都可以。官方以后也很有可能加代码去支持 TLS 1.3 的接口,只是现在还没有开始做。
giuem
2019-03-23 11:47:49 +08:00
nikoo
2019-03-23 12:04:58 +08:00
@msg7086 谢谢大佬,请问如果没有很大的连接安全需求,那么需要为了性能考虑去将 AES_256_GCM 改为 AES_128_GCM 吗?这两者性能差别大吗?(您在生产服用的 256 还是 128 ?)
nikoo
2019-03-23 12:10:30 +08:00
@msg7086 因为我看
https://www.cloudflare.com/
https://www.mozilla.org/en-US/
都是 TLS 1.3 + AES_128_GCM

所以不知道生产环境用 AES_256_GCM 稳不稳,小鸡受不受得住
isCyan
2019-03-23 12:15:55 +08:00
@nikoo 杞人忧天,256 位完全没有任何问题
当然你不喜欢可以改成 128 位嘛
msg7086
2019-03-23 12:31:04 +08:00
@nikoo 服务器一般是硬件指令集辅助运算吧,128 和 256 差距大概也就 15%这个级别,我觉得不必太过担心。
suduo1987
2019-04-09 10:50:55 +08:00
tls 1.3 的配置可以使用 openssl.cnf

参考:
https://www.ssllabs.com/ssltest/analyze.html?d=sduoxminty.cn

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/547650

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX