Freebsd
為什麼使用 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 實驗室程式碼段:
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 有一些奇怪之處(例如,無法使用
ssl_ciphers
指令指定 TLS 1.3 密碼),但我不確定這是否是另一個實例。有什麼我想念的嗎?
這是一個相當不令人滿意的答案,並且幾乎不能被視為“證明”。我繼續在我的 Web 伺服器上啟用了 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 只是一個 TLS 1.3 的東西。我相信在接下來的幾個月裡,這將得到解決。