服务器信息:
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 实验室片段:
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-ID
、Resumption PSK
和TLS session ticket
s 都不同。我不知道为什么我没有收到一份。- 当我发送带有早期数据的第二个请求时,它至少表明握手已被重用。
- 由于早期数据被拒绝,我收到了另一个
Post-Handshake New Session Ticket
;但这次只有一个。 、Session-ID
、Resumption PSK
和TLS 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.uk和https://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 中的一个内容。我确信在接下来的几个月里这个问题将会得到解决。