为什么 TLS 1.3 的会话恢复和早期数据不适用于我的 NGINX 1.16 服务器?

为什么 TLS 1.3 的会话恢复和早期数据不适用于我的 NGINX 1.16 服务器?

服务器信息:

freebsd@FreeBSD-Website:~ % freebsd-version
12.0-RELEASE-p5
freebsd@FreeBSD-Website:~ % /usr/local/bin/openssl version
OpenSSL 1.1.1c 28 May 2019
freebsd@FreeBSD-Website:~ % nginx -V
nginx version: nginx/1.16.0
built with OpenSSL 1.1.1c 28 May 2019
TLS SNI support enabled
configure arguments:
.
.
.

/usr/local/etc/nginx/nginx.conf:

user www;
.
.
.
http {
    .
    .
    .
    ssl_protocols TLSv1.3;
    ssl_prefer_server_ciphers on;
    .
    .
    .
    ssl_early_data on;
    ssl_session_tickets on;
    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    .
    .
    .
}
.
.
.

SSL 实验室片段:

会话恢复(票证)和启用的 0-RTT 均显示“否”。

OpenSSL 输出:

freebsd@FreeBSD-Website:~ % set host=www.example.com
freebsd@FreeBSD-Website:~ % printf "HEAD / HTTP/1.1\r\nHost: $host\r\nConnection: close\r\n\r\n" > request.txt
freebsd@FreeBSD-Website:~ % /usr/local/bin/openssl s_client -connect $host\:443 -tls1_3 -sess_out session.pem < request.txt
CONNECTED(00000003)
.
.
.
Post-Handshake New Session Ticket arrived:
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384
    Session-ID: 85...
    Session-ID-ctx:
    Resumption PSK: 52...
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 86400 (seconds)
    TLS session ticket:
    0000 - ...
    .
    .
    .
    Start Time: 1561132567
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 16384
---
read R BLOCK
---
Post-Handshake New Session Ticket arrived:
.
.
.
---
read R BLOCK
DONE
freebsd@FreeBSD-Website:~ % /usr/local/bin/openssl s_client -connect $host\:443 -tls1_3 -sess_in session.pem -early_data request.txt
CONNECTED(00000003)
.
.
.
Reused, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384
.
.
.
Early data was rejected
Verify return code: 0 (ok)
---
---
Post-Handshake New Session Ticket arrived:
.
.
.
---
read R BLOCK
closed

OpenSSL 观察结果:

  • Session-ID-ctx当我发送初始请求时是空白的。我不知道是不是应该这样。
  • Post-Handshake New Session Ticket发送初始请求后,我收到了两个s;并且Session-IDResumption PSKTLS session tickets 都不同。我不知道为什么我没有收到一份。
  • 当我发送带有早期数据的第二个请求时,它至少表明握手已被重用。
  • 由于早期数据被拒绝,我收到了另一个Post-Handshake New Session Ticket;但这次只有一个。 、Session-IDResumption PSKTLS session ticket与前两个不同。
  • 第二个请求最后停滞了,大约花了 30 秒才关闭。初始请求实际上已完成,这可以通过该DONE行看到。

我知道 OpenSSL 和 NGINX 有一些奇怪的地方(例如,无法使用指令指定 TLS 1.3ssl_ciphers密码),但我不确定这是否是另一个例子。我有什么遗漏的吗?

答案1

这个答案不太令人满意,很难算作“证据”。我继续在我的网络服务器上启用 TLS 1.2,SSL Labs 不仅将我的网站评级从 A 提高到了 A+,还显示会话恢复已启用。它仍然没有显示 0-RTT 已启用。

我测试了其他几个启用了 TLS 1.3 的网站,例如https://scotthelme.co.ukhttps://cromwell-intl.com,并且它们也将 0-RTT 显示为未启用。就 Scott 的网站而言,服务器是 Cloudflare,他们谈论的是启用 0-RTT。

这就是说,我相信 TLS 1.3 对于测试甚至某些功能来说太新了(至少在 OpenSSL 和 NGINX 中)。我应该补充一点,我什至无法将我的网站添加到https://hstspreload.org/仅支持 TLS 1.3。当我将 TLS 1.2 添加到服务器时,会话恢复显示为 on 的唯一原因是会话恢复是 TLS 1.2 中的一个内容,与 0-RTT 不同,0-RTT 仅是 TLS 1.3 中的一个内容。我确信在接下来的几个月里这个问题将会得到解决。

相关内容