Hi Janusz, On Sun, Dec 30, 2018 at 05:38:26PM +0100, Janusz Dziemidowicz wrote: > Hi, > I've been trying to get 0-RTT resumption working with haproxy 1.8.16 > and OpenSSL 1.1.1a. > No matter what I put in configuration file, testing with openssl > s_client always results in: > Max Early Data: 0 > > OK, let's look at ssl_sock.c > The only thing that seems to try to enable 0-RTT is this: > #ifdef OPENSSL_IS_BORINGSSL > if (allow_early) > SSL_set_early_data_enabled(ssl, 1); > #else > if (!allow_early) > SSL_set_max_early_data(ssl, 0); > #endif > > But I fail to see how this is supposed to work. OpenSSL has 0-RTT > disabled by default. To enable this one must call > SSL_set_max_early_data with the amount of bytes it is willing to read. > The above simply does... nothing. > > Is it supposed to work at all or do I miss something? ;) >
You're right indeed. 0RTT was added with a development version of OpenSSL 1.1.1, which had a default value for max early data of 16384, but it was changed to 0 in the meanwhile. Does the attached patch work for you ? Thanks ! Olivier
>From cdb864da7cebb97800aef2e114bae6f0d0f96814 Mon Sep 17 00:00:00 2001 From: Olivier Houchard <[email protected]> Date: Wed, 2 Jan 2019 18:46:41 +0100 Subject: [PATCH] MEDIUM: ssl: Call SSL_CTX_set_max_early_data() to enable 0RTT. When we want to enable early data on a listener, explicitely call SSL_CTX_set_max_early_data(), as the default is now 0. This should be backported to 1.8. --- src/ssl_sock.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ssl_sock.c b/src/ssl_sock.c index 282b85dd..c24de955 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -3869,6 +3869,8 @@ ssl_sock_initial_ctx(struct bind_conf *bind_conf) SSL_CTX_set_select_certificate_cb(ctx, ssl_sock_switchctx_cbk); SSL_CTX_set_tlsext_servername_callback(ctx, ssl_sock_switchctx_err_cbk); #elif (OPENSSL_VERSION_NUMBER >= 0x10101000L) + if (bind_conf->ssl_conf.early_data) + SSL_CTX_set_max_early_data(ctx, global.tune.bufsize - global.tune.maxrewrite); SSL_CTX_set_client_hello_cb(ctx, ssl_sock_switchctx_cbk, NULL); SSL_CTX_set_tlsext_servername_callback(ctx, ssl_sock_switchctx_err_cbk); #else -- 2.14.4

