On 11/30/20 11:39 PM, Maxim Dounin wrote:
Hello!

On Mon, Nov 30, 2020 at 06:41:18PM +0100, Andreas Bartelt wrote:

On 11/30/20 4:07 PM, Maxim Dounin wrote:
Hello!

On Sun, Nov 29, 2020 at 04:01:07PM +0100, ng...@bartelt.name wrote:

I've noticed that nginx 1.18.0 always enables TLS 1.3 even if not
configured to do so. I've observed this behavior on OpenBSD with (nginx
1.18.0 linked against LibreSSL 3.3.0) and on Ubuntu 20.04 (nginx 1.18.0
linked against OpenSSL 1.1.1f). I don't know which release of nginx
introduced this bug.

   From nginx.conf:
ssl_protocols TLSv1.2;
--> in my understanding, this config statement should only enable TLS
1.2 but not TLS 1.3. However, the observed behavior is that TLS 1.3 is
implicitly enabled in addition to TLS 1.2.

As long as "ssl_protocols TLSv1.2;" is the only ssl_protocols in
nginx configuration, TLSv1.3 shouldn't be enabled.  Much like when
there are no "ssl_protocols" at all, as TLSv1.3 isn't enabled by
default (for now, at least up to and including nginx 1.19.5).


I've just retested this with my Ubuntu 20.04 based nginx test instance
from yesterday (nginx 1.18.0 linked against OpenSSL 1.1.1f) and noticed
that it works there as intended (i.e., "ssl_protocols TLSv1.2;" only
enables TLS 1.2 but not TLS 1.3). I don't know what I did wrong there
yesterday -- sorry for this.

However, the problem persists on OpenBSD current with nginx 1.18.0
(built from ports with default options which links against LibreSSL
3.3.0 from base). Setting "ssl_protocols TLSv1.2;" enables TLS 1.2 as
well as TLS 1.3 there.

I don't see any problems when testing with LibreSSL 3.3.0 as
available on libressl.org and the very same configuration.  So
it's probably something specific to your system.

Some possible reasons for the behaviour you are seeing, in no
particular order:

- Given that OpenBSD current and LibreSSL from base implies some
   arbitrary version of LibreSSL, this might be something with the
   changes present on your system but not in LibreSSL 3.3.0
   release.

- There may be something with the port you are using to compile
   nginx.  Consider testing nginx compiled manually.

- You are testing the wrong server (the name resolves to a
   different IP address, or the IP address is routed to a different
   server).  Make sure you are seeing connection on nginx side,
   something like "return 200 $ssl_protocol;" in the appropriate
   server block and making a "GET / HTTP/1.0" request in s_client
   would be a good test.

- The nginx version running differs from the one on disk, and you
   are running an nginx version older than 1.15.6 built with an old
   LibreSSL without TLSv1.3 but running with LibreSSL 3.3.0 with
   TLSv1.3 enabled.  Check the "Server" header in the above test.

- There might be something wrong with headers on your system.  The
   behaviour observed might happen if SSL_OP_NO_TLSv1_3, TLS1_3_VERSION,
   and SSL_CTX_set_min_proto_version/SSL_CTX_set_max_proto_version are
   not defined, yet TLSv1.3 is present in the library.


I've just tested the same nginx.conf on two freshly installed OpenBSD based test systems:
1) release 6.8 (with nginx 1.18.0 / LibreSSL 3.2.2)
2) snapshot from today (with nginx 1.18.0 / LibreSSL 3.3.0 + more recent commits since it's a snapshot)

Both instances were installed from scratch with the official OpenBSD binary tarballs and the nginx binary package from ports, respectively.

Release 6.8 interprets "ssl_protocols TLSv1.2;" correctly. However, the snapshot instance enables TLS 1.2 and 1.3, i.e., this looks like a bug which has been recently introduced into OpenBSD current.

Although OpenBSD 6.8 and the snapshot both use nginx 1.18.0, it's built differently on current:
# cvs diff -r 1.145 -r 1.146 ports/www/nginx/Makefile
Index: ports/www/nginx/Makefile
===================================================================
RCS file: /cvs/ports/www/nginx/Makefile,v
retrieving revision 1.145
retrieving revision 1.146
diff -u -p -r1.145 -r1.146
--- ports/www/nginx/Makefile    27 Jul 2020 14:33:15 -0000      1.145
+++ ports/www/nginx/Makefile    23 Oct 2020 15:20:30 -0000      1.146
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.145 2020/07/27 14:33:15 sthen Exp $
+# $OpenBSD: Makefile,v 1.146 2020/10/23 15:20:30 robert Exp $

BROKEN-hppa= src/core/ngx_rwlock.c:116:2: error: \#error ngx_atomic_cmp_set() is not defined!

@@ -21,7 +21,7 @@ VERSION=      1.18.0
 DISTNAME=      nginx-${VERSION}
 CATEGORIES=    www

-REVISION-main= 0
+REVISION-main= 1
 REVISION-xslt= 0

 VERSION-rtmp=  1.2.1
@@ -122,6 +122,8 @@ SUBST_VARS= NGINX_DIR
 .for i in ${MODULE_PACKAGES}
 PREFIX$i=      ${NGINX_DIR}/modules
 .endfor
+
+CFLAGS+=       -DTLS1_3_VERSION=0x0304

 CFLAGS+=       -Wall -Wpointer-arith \
                -I "${LOCALBASE}/include/libxml2" \

Best regards
Andreas
_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx

Reply via email to