我最近用 建立了一个网站certbot --nginx -d <domain>
。在 中/etc/letsencrypt/options-ssl-nginx.conf
,我将 TLSv1.3 添加到ssl_protocols
指令中。但是,当我访问该网站(Chrome 68)时,安全选项卡显示 TLSv1.2。我使用 ssllabs.com 测试了该网站,它也显示仅启用了 TLS 版本 1.0-1.2。
我没有看到journalctl -u nginx.service | grep -i tls
或中的任何错误grep -i tls /var/log/nginx/*.log
。
我该如何解决此问题?我检查了所有配置文件和所有日志文件,但未找到问题的根源(或有关问题的任何信息)。
软件信息:
- certbot 0.23.0
- nginx 版本:nginx/1.14.0(Ubuntu)
- OpenSSL 1.1.0g 2017 年 11 月 2 日
- Ubuntu 18.04
- Linux 4.15.0-20-通用 x86_64
站点配置(由 生成certbot
):https://hastebin.com/oragojozol.nginx
/etc/letsencrypt/options-ssl-nginx.conf
:https://hastebin.com/cepalomisi.nginx
答案1
OpenSSL 1.1.0g 2017 年 11 月 2 日
我甚至没有看你正在做的其他事情,但 OpenSSL 1.1.0 根本不支持 TLS 1.3。TLS 1.3 仅从 OpenSSL 1.1.1 开始支持。请参阅将 TLS1.3 与 OpenSSL 结合使用了解更多信息。
答案2
我花了半个小时的时间思考为什么我的 Ubuntu Eoan(N 1.16.5,OpenSSL 1.1.1c)上的 Nginx 仍然可以通过 TLSv1.2 运行,并在网上搜索可能的原因,最后发现检查 Certbot 文件的说明特别有用。
查看/etc/letsencrypt/options-ssl-nginx.conf
。它包含以下行:
ssl_protocols TLSv1.0 TLSv1.1 TLSv1.2;
因为这个文件(通常)处于include
块server
级别,所以它优先于您在http
块级别设置的任何内容。
ssl_protocols
如果您的块中有http
,那么只需像我一样从文件中删除不需要的行即可。然后我的设置在重新加载后生效。
# /etc/nginx/nginx.conf
ssl_protocols TLSv1.2 TLSv1.3;
root@iBug-Server:/etc/nginx # nginx -tq && nginx -s reload
# Or use `systemctl reload nginx.service`
答案3
在 Ubuntu 发布其默认更新之前,您可以通过最近更新的 Ondrej Sury PPA 使用 TLSv1.3。
基本上,您需要添加他的 PPA nginx 和 nginx-qa 存储库,删除默认 nginx 并安装他的 PPA nginx 和 openssl,如下所示:
sudo add-apt-repository ppa:ondrej/nginx-mainline
sudo add-apt-repository ppa:ondrej/nginx-qa
sudo apt-get update; #This is not needed in Ubuntu 18.04
sudo apt-get -y remove nginx; #If you already installed default Nginx
sudo apt-get -y install nginx openssl
我解释了手动安装 openssl 1.1.1 的步骤如何锻造但使用上面提到的 PPA 更容易、更安全。