关于 nginx 不报错但无法启用 TLS 1.3 这件事

为了方便我也不知道有没有即使有也不知道是不是为此文章而来的读者,结论在前:

适用于:没有配置 default_server 块,或,配置了 default_server 块但 default_server 块没有进行 TLS 相关配置

在 default_server 块中配置 ssl_protocols TLSv1.3; 和证书应当是解决方案。


背景:为了防止通过 IP 可以直接访问此网站,default_server 块不直接指向本站,而是分别在 80 和 443 端口上配置了 return 444 和 reject_handshake。

在配置 nginx 建立网站(也就是本站)时试图启用 TLS 1.3,但无论如何配置都只能得到 TLS 1.2,而且同时指定了具有前向安全性的 ECDHE-ECDSA 加密和 ECDHE-RSA 加密,而经 SSL Labs 测试发现只有 ECDHE-RSA 可用,在本地用 curl 和 openssl s_client 测试得到相同的结果。经过三天三夜昏天黑地的折腾,谷歌搜索翻了二三十页,各种关键词试了百十来个,各路大神奆奆的偏方来回试,问题不见一点解决,脑中毫无头猪。

此时翻到一篇不知道被营销号自动程序转了几手的文章,标题曰,“解决 nginx 配置 TLS 1.2 无效,总是 TLS 1.0 的问题”,其中提到只在一个站点启用 TLS 1.2 不起作用,一定要在所有站点中都启用 TLS 1.2 才行。抱着死马当活马医的想法,试着对 TLS 1.3 也这样做了一下,即,在 default_server 块中配置了 TLS 1.3,重启nginx ———— 嘣的一下,突然就成了,TLS 1.3 有了,很真,不是假的,不是加的特技,我大惊,我陷思,但是它有了!

来都来了,顺手把 ECDHE-ECDSA 不能用也解决了吧,五分钟搜索后发现是因为需要 ECC 证书,而我只配置了 RSA 证书。遂申请 ECC 证书,配置自动更新,再打开 SSL Labs 测试,全都好了,从 TLS 1.3 到 ECDHE-ECDSA 都活了,我太好了我全好了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注