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초기 요청을 보낸 후 와 Session-ID, Resumption PSKTLS session ticket모두 다릅니다. 왜 하나도 못 받았는지 모르겠어요.
  • 이전 데이터를 사용하여 두 번째 요청을 보내면 최소한 핸드셰이크가 재사용되었음을 표시합니다.
  • 초기 데이터가 거부되었기 때문에 다른 데이터를 받았는데 Post-Handshake New Session Ticket이번에는 하나만 있었습니다. , Session-ID, Resumption PSK및 는 TLS session ticket이전 두 개와 다릅니다.
  • 두 번째 요청은 결국 중단되어 닫히는 데 약 30초가 걸렸습니다. 초기 요청이 실제로 완료되었으며 이는 DONE이 줄에서 볼 수 있습니다.

OpenSSL과 NGINX에 몇 가지 이상한 점이 있다는 것을 알고 있습니다(예:지시어를 사용하여 TLS 1.3 ssl_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를 추가했을 때 세션 재개가 나타난 유일한 이유는 TLS 1.3에만 있는 0-RTT와 달리 세션 재개가 TLS 1.2에 있다는 것입니다. 나는 이 문제가 앞으로 몇 달 안에 해결될 것이라고 확신합니다.

관련 정보