-1

Server Information:

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 Labs Snippet:

Both session resumption (tickets) and 0-RTT enabled show 'No'.

OpenSSL Output:

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 Observations:

  • Session-ID-ctx is blank when I sent the initial request. I don't know if it's supposed to be.
  • I received two Post-Handshake New Session Tickets after I sent the initial request; and the Session-ID, Resumption PSK, and TLS session tickets were all different. I'm not sure why I didn't receive just one.
  • When I sent the second request with the early data, it at least shows that the the handshake was reused.
  • Since the early data was rejected, I received another Post-Handshake New Session Ticket; but this time only one. The Session-ID, Resumption PSK, and TLS session ticket were different than the previous two.
  • The second request stalled at the end, and it took around 30 seconds for it to close. The initial request actually completed though which can be seen with the DONE line.

I know there is some weirdness with OpenSSL and NGINX (e.g., not being able to specify TLS 1.3 ciphers with the ssl_ciphers directive), but I'm not sure if this is another instance. Is there something I'm missing?

0

This is a rather unsatisfying answer, and one that can hardly be considered a "proof". I went ahead and enabled TLS 1.2 on my web server, and SSL Labs not only increased my site's grade from an A to an A+, but it also shows that session resumption is on. It still doesn't show 0-RTT as enabled.

I tested a couple of other sites that have TLS 1.3 enabled like https://scotthelme.co.uk and https://cromwell-intl.com, and they too show 0-RTT as not enabled. In the case of Scott's site, the servers are Cloudflare ones where they talk about having 0-RTT enabled.

This is all to say that I believe that TLS 1.3 is just too new for tests or even some of the functionality to work correctly (at least in OpenSSL and NGINX). I should add that I can't even add my site to https://hstspreload.org/ with only TLS 1.3. The only reason session resumption is displayed as on when I add TLS 1.2 to my server is that session resumption is a thing in TLS 1.2 unlike 0-RTT which is only a TLS 1.3 thing. I'm sure over the next few months this will be resolved though.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.