Freebsd

為什麼使用 TLS 1.3 的會話恢復和早期數據不適用於我的 NGINX 1.16 伺服器?

  • June 24, 2019

伺服器資訊:

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-ID,Resumption PSKTLS session tickets 都是不同的。我不知道為什麼我沒有收到一個。
  • 當我發送帶有早期數據的第二個請求時,它至少表明握手被重用了。
  • 由於早期數據被拒絕,我收到了另一個Post-Handshake New Session Ticket;但這次只有一個。、Session-IDResumption PSKTLS 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 的東西。我相信在接下來的幾個月裡,這將得到解決。

引用自:https://unix.stackexchange.com/questions/526276