Hello, 0001 .. 0003 are "pre QUIC" patches 0004 .. 0006 are most questionable QUIC part 0007 is very simple
we can discuss whether BoringSSL should be 1) dropped completely 2) supported, but no QUIC 3) supported for QUIC as well as for "3)" I've checked current state of QUICTLS, looks like its future is not clear, it is not updated since mid december 2021, also it is not clear whether OpenSSL is going to accept it or not. thanks, Ilya
From 97e8a2257e9226c5c93995dc167089b14e79297a Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 09:49:47 +0500 Subject: [PATCH 3/7] REGTESTS: skip show_ssl_ocspresponse.vtc when BoringSSL is used OCSP stapling implementation is not compatible with BoringSSL, test is broken in BoringSSL --- reg-tests/ssl/show_ssl_ocspresponse.vtc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reg-tests/ssl/show_ssl_ocspresponse.vtc b/reg-tests/ssl/show_ssl_ocspresponse.vtc index 0d91fe275..3d67fe530 100644 --- a/reg-tests/ssl/show_ssl_ocspresponse.vtc +++ b/reg-tests/ssl/show_ssl_ocspresponse.vtc @@ -21,7 +21,7 @@ varnishtest "Test the 'show ssl ocsp-response' and 'show ssl cert foo.pem.ocsp' features of the CLI" feature cmd "$HAPROXY_PROGRAM -cc 'version_atleast(2.5-dev0)'" -feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL)'" +feature cmd "$HAPROXY_PROGRAM -cc 'feature(OPENSSL) && !ssllib_name_startswith(BoringSSL)'" feature cmd "command -v socat && command -v openssl" feature ignore_unknown_macro -- 2.34.1
From 4e160be34699dee2da68d2a9b403aa0c4333e33e Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 09:57:52 +0500 Subject: [PATCH 4/7] BUILD: SSL: fix BoringSSL guarding commit b5b5247b18cd2d1f81d577b1418cf8df202b2ca1 has introduced change that breaks BoringSSL builds --- src/ssl_sock.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ssl_sock.c b/src/ssl_sock.c index 0b65d888e..af8748f01 100644 --- a/src/ssl_sock.c +++ b/src/ssl_sock.c @@ -2506,10 +2506,10 @@ int ssl_sock_switchctx_cbk(SSL *ssl, int *al, void *arg) #ifdef OPENSSL_IS_BORINGSSL if (!SSL_early_callback_ctx_extension_get(ctx, qc->tps_tls_ext, &extension_data, &extension_len)) + goto abort; #else if (!SSL_client_hello_get0_ext(ssl, qc->tps_tls_ext, &extension_data, &extension_len)) -#endif { /* This is not redundant. It we only return 0 without setting * <*al>, this has as side effect to generate another TLS alert @@ -2519,6 +2519,7 @@ int ssl_sock_switchctx_cbk(SSL *ssl, int *al, void *arg) quic_set_tls_alert(qc, SSL_AD_MISSING_EXTENSION); return 0; } +#endif if (!quic_transport_params_store(qc, 0, extension_data, extension_data + extension_len)) -- 2.34.1
From bc59f75f28156935c29a48bfc4c9ed31058b9ab1 Mon Sep 17 00:00:00 2001 From: sooslaca <[email protected]> Date: Mon, 31 Jan 2022 09:47:16 +0500 Subject: [PATCH 2/7] BUILD: SSL: define X509_OBJECT for BoringSSL X509_OBJECT is opaque in BonringSSL, since we still use it, let us move it to openssl-compat.h from https://boringssl.googlesource.com/boringssl/+/refs/heads/2924/include/openssl/x509_vfy.h#120 --- include/haproxy/openssl-compat.h | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/include/haproxy/openssl-compat.h b/include/haproxy/openssl-compat.h index d34a22efc..2af032965 100644 --- a/include/haproxy/openssl-compat.h +++ b/include/haproxy/openssl-compat.h @@ -178,6 +178,18 @@ static inline STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain) * Functions missing in BoringSSL */ +typedef struct x509_object_st + { + /* one of the above types */ + int type; + union { + char *ptr; + X509 *x509; + X509_CRL *crl; + EVP_PKEY *pkey; + } data; + } X509_OBJECT; + static inline X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a) { if (a == NULL || a->type != X509_LU_CRL) { -- 2.34.1
From aba6eb42995bf10a6b2f51b18834cd28de71f120 Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 09:45:00 +0500 Subject: [PATCH 1/7] BUILD: SSL: adjust guard for X509_get_X509_PUBKEY(x) BoringSSL defines that function since https://boringssl.googlesource.com/boringssl/+/33f8d33af0dcb083610e978baad5a8b6e1cfee82 --- include/haproxy/openssl-compat.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/haproxy/openssl-compat.h b/include/haproxy/openssl-compat.h index 123b76ede..d34a22efc 100644 --- a/include/haproxy/openssl-compat.h +++ b/include/haproxy/openssl-compat.h @@ -119,7 +119,7 @@ static inline void X509_ALGOR_get0(ASN1_OBJECT **paobj, int *pptype, const void #endif // OpenSSL < 0.9.8 -#if (((HA_OPENSSL_VERSION_NUMBER < 0x1000000fL) || defined(OPENSSL_IS_BORINGSSL)) && !defined(X509_get_X509_PUBKEY)) +#if ((HA_OPENSSL_VERSION_NUMBER < 0x1000000fL) && !defined(X509_get_X509_PUBKEY)) #define X509_get_X509_PUBKEY(x) ((x)->cert_info->key) #endif -- 2.34.1
From 15ddba600b343887b2486b6ea761fafe3422f09d Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 10:02:21 +0500 Subject: [PATCH 5/7] BUILD: SSL: fix wrong variable name in case of BoringSSL wrong variable name introduced in fc768ecc88824f45afe5c2d74e63b497dd42263f --- src/xprt_quic.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index a1fa7dbde..e895e1ee0 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -856,7 +856,7 @@ int ha_set_rsec(SSL *ssl, enum ssl_encryption_level_t level, tls_ctx->rx.md = tls_md(cipher); tls_ctx->rx.hp = tls_hp(cipher); - if (!(ctx->rx.key = pool_alloc(pool_head_quic_tls_key))) + if (!(tls_ctx->rx.key = pool_alloc(pool_head_quic_tls_key))) goto err; if (!quic_tls_derive_keys(tls_ctx->rx.aead, tls_ctx->rx.hp, tls_ctx->rx.md, @@ -908,7 +908,7 @@ int ha_set_wsec(SSL *ssl, enum ssl_encryption_level_t level, goto out; } - if (!(ctx->tx.key = pool_alloc(pool_head_quic_tls_key))) + if (!(tls_ctx->tx.key = pool_alloc(pool_head_quic_tls_key))) goto err; tls_ctx->tx.aead = tls_aead(cipher); -- 2.34.1
From 7a6db4c00fdf0f6964994774b8ef8c9ba7ee03d7 Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 10:07:53 +0500 Subject: [PATCH 7/7] CI: get BoringSSL back to the game --- .github/matrix.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/matrix.py b/.github/matrix.py index 3c34eaf90..e5a6b1710 100755 --- a/.github/matrix.py +++ b/.github/matrix.py @@ -114,7 +114,7 @@ for CC in ["gcc", "clang"]: "LIBRESSL_VERSION=2.9.2", "LIBRESSL_VERSION=3.3.3", "QUICTLS=yes", -# "BORINGSSL=yes", + "BORINGSSL=yes", ]: flags = ["USE_OPENSSL=1"] if ssl == "BORINGSSL=yes" or ssl == "QUICTLS=yes": -- 2.34.1
From 0c0ae7b7133989b95af4c7f6cbcba21d5a693dea Mon Sep 17 00:00:00 2001 From: Ilya Shipitsin <[email protected]> Date: Mon, 31 Jan 2022 10:06:20 +0500 Subject: [PATCH 6/7] BUILD: SSL: disable early data in QUIC for BoringSSL SSL_set_quic_early_data_enabled is not supported in BoringSSL, let us skip it for now --- src/xprt_quic.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/xprt_quic.c b/src/xprt_quic.c index e895e1ee0..7e03a1888 100644 --- a/src/xprt_quic.c +++ b/src/xprt_quic.c @@ -4153,9 +4153,11 @@ int qc_conn_alloc_ssl_ctx(struct quic_conn *qc) goto err; } +#ifndef OPENSSL_IS_BORINGSSL /* Enabling 0-RTT */ if (bc->ssl_conf.early_data) SSL_set_quic_early_data_enabled(ctx->ssl, 1); +#endif SSL_set_accept_state(ctx->ssl); } -- 2.34.1

