> > ------- Original Message -------
> > On Friday, October 6th, 2023 at 4:53 PM, Stuart Henderson 
> > s...@spacehopper.org wrote:
> > 
> > > On 2023/10/06 20:36, haywirrr wrote:
> > > 
> > > > > ...
> > > > > hmm - it's not ideal to use OpenSSL 1.1 any more because security
> > > > > updates from the old branches are now only available to paying 
> > > > > customers...
> > > > > 
> > > > > There could well be something else in the changes between 
> > > > > wpa_supplicant
> > > > > 2.9 and 2.10 that will help with OpenSSL 3.x, but there have been 
> > > > > other
> > > > > changes which mean that src/drivers/driver_openbsd.c no longer 
> > > > > compiles,
> > > > > and I don't know how to fix that.
> > > > 
> > > > Hi Stuart,
> > > > 
> > > > I understand that using the old version of OpenSSL is not ideal.
> > > > Unfortunately, this is my only option without moving to an entirely
> > > > different platform, i.e. FreeBSD (which I may be forced into doing).
> > > 
> > > Well, you have the diff and can use it if you want, but I don't really
> > > want to commit that to ports.
> > > 
> > > > Who would I need to ask about getting wpa_supplicant updated to the
> > > > latest version? Also, there's a patch available for FreeBSD that allows
> > > 
> > > I've tried updating and have merged the various patches, but the openbsd
> > > code that's part of the distribution no longer builds. So it'll need
> > > someone with enough interest and time and reason to look at it. The only
> > > reason anyone has asked for this so far is to use a security protocol
> > > that was replaced (by a much improved version) in 2008 which tbh is not
> > > particularly compelling.
> > > 
> > > (If anyone wants to do that feel free to ask for a diff for the boring
> > > parts).
> > > 
> > > > wpa_supplicant to interface directly with VLAN 0 (see the link below),
> > > > how would I ask about getting that incorporated into the OpenBSD port
> > > > of wpa_supplicant? I am thinking the answer might be to start a new
> > > > thread and see if anyone replies...
> > > > 
> > > > https://reviews.freebsd.org/D40442
> > > 
> > > Does that actually need anything from wpa_supplicant, have you tried
> > > running it on a vlan interface set to id 0 (which js the standard way to
> > > do that)?
> > 
> > Hi Stuart,
> > 
> > That is actually how I am currently working with wpa_supplicant, I use
> > a hostname.vlan0 interface along with the application to authenticate.
> > I was just thinking this might negate the need for the interface
> > declaration and make things a little cleaner.
> > 
> > Should the question then be would it be possible to incorporate 802.1X
> > authentication into a hostname.if? I have no idea what that would take.
> 
> 
> Hi Stuart,
> 
> I was able to get wpa_supplicant working with OpenSSL 3.0/3.1 after
> applying the following 5 patches:
> 
> Allow use of TLS 1.0 and renegotiation - patch 1/5
> 
> Index: src/ap/authsrv.c
> --- src/ap/authsrv.cc.orig
> +++ src/ap/authsrv.c
> @@ -188,6 +188,9 @@
> wpa_printf(MSG_DEBUG, "authsrv: remote TLS alert: %s",
> data->alert.description);
> 
> break;
> + case TLS_UNSAFE_RENEGOTIATION_DISABLED:
> + /* Not applicable to TLS server /
> + break;
> }
> }
> #endif / EAP_TLS_FUNCS /
> 
> 
> Allow use of TLS 1.0 and renegotiation - patch 2/5
> 
> Index: src/crypto/tls.h
> --- src/crypto/tls.h.orig
> +++ src/crypto/tls.h
> @@ -22,7 +22,8 @@
> TLS_CERT_CHAIN_SUCCESS,
> TLS_CERT_CHAIN_FAILURE,
> TLS_PEER_CERTIFICATE,
> - TLS_ALERT
> + TLS_ALERT,
> + TLS_UNSAFE_RENEGOTIATION_DISABLED,
> };
> 
> /
> @@ -112,6 +113,7 @@
> #define TLS_CONN_ENABLE_TLSv1_1 BIT(15)
> #define TLS_CONN_ENABLE_TLSv1_2 BIT(16)
> #define TLS_CONN_TEAP_ANON_DH BIT(17)
> +#define TLS_CONN_ALLOW_UNSAFE_RENEGOTIATION BIT(18)
> 
> /**
> * struct tls_connection_params - Parameters for TLS connection
> 
> 
> Allow use of TLS 1.0 and renegotiation - patch 3/5
> 
> Index: src/crypto/tls_openssl.c
> --- src/crypto/tls_openssl.c.orig
> +++ src/crypto/tls_openssl.c
> @@ -2919,6 +2919,13 @@
> SSL_clear_options(ssl, SSL_OP_NO_TICKET);
> #endif /* SSL_OP_NO_TICKET /
> 
> +
> +#ifdef SSL_OP_LEGACY_SERVER_CONNECT
> + if (flags & TLS_CONN_ALLOW_UNSAFE_RENEGOTIATION)
> + SSL_set_options(ssl, SSL_OP_LEGACY_SERVER_CONNECT);
> +#endif / SSL_OP_LEGACY_SERVER_CONNECT */
> +
> +
> #ifdef SSL_OP_NO_TLSv1
> if (flags & TLS_CONN_DISABLE_TLSv1_0)
> SSL_set_options(ssl, SSL_OP_NO_TLSv1);
> @@ -4133,6 +4140,7 @@
> static struct wpabuf *
> openssl_handshake(struct tls_connection *conn, const struct wpabuf *in_data)
> {
> + struct tls_context *context = conn->context;
> 
> int res;
> struct wpabuf *out_data;
> 
> @@ -4162,7 +4170,20 @@
> wpa_printf(MSG_DEBUG, "SSL: SSL_connect - want to "
> "write");
> else {
> + unsigned long error = ERR_peek_last_error();
> +
> tls_show_errors(MSG_INFO, func, "SSL_connect");
> +
> + if (context->event_cb &&
> 
> + ERR_GET_LIB(error) == ERR_LIB_SSL &&
> + ERR_GET_REASON(error) ==
> + SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED) {
> + context->event_cb(
> 
> + context->cb_ctx,
> 
> + TLS_UNSAFE_RENEGOTIATION_DISABLED,
> + NULL);
> + }
> +
> conn->failed++;
> 
> if (!conn->server && !conn->client_hello_generated) {
> 
> /* The server would not understand TLS Alert
> @@ -4185,8 +4206,6 @@
> if ((conn->flags & TLS_CONN_SUITEB) && !conn->server &&
> 
> os_strncmp(SSL_get_cipher(conn->ssl), "DHE-", 4) == 0 &&
> 
> conn->server_dh_prime_len < 3072) {
> 
> - struct tls_context *context = conn->context;
> 
> -
> /*
> * This should not be reached since earlier cert_cb should have
> * terminated the handshake. Keep this check here for extra
> 
> 
> Allow use of TLS 1.0 and renegotiation - patch 4/5
> 
> Index: src/eap_peer/eap.c
> --- src/eap_peer/eap.c.orig
> +++ src/eap_peer/eap.c
> @@ -2108,6 +2108,11 @@
> eap_notify_status(sm, "remote TLS alert",
> data->alert.description);
> 
> break;
> + case TLS_UNSAFE_RENEGOTIATION_DISABLED:
> + wpa_printf(MSG_INFO,
> + "TLS handshake failed due to the server not supporting safe renegotiation 
> (RFC 5746); phase1 parameter allow_unsafe_renegotiation=1 can be used to work 
> around this");
> + eap_notify_status(sm, "unsafe server renegotiation", "failure");
> + break;
> }
> 
> os_free(hash_hex);
> 
> 
> Allow use of TLS 1.0 and renegotiation - patch 5/5
> 
> Index: src/eap_peer/eap_tls_common.c
> --- src/eap_peer/eap_tls_common.c
> +++ src/eap_peer/eap_tls_common.c
> @@ -102,6 +102,10 @@
> params->flags |= TLS_CONN_SUITEB_NO_ECDH;
> 
> if (os_strstr(txt, "tls_suiteb_no_ecdh=0"))
> params->flags &= ~TLS_CONN_SUITEB_NO_ECDH;
> 
> + if (os_strstr(txt, "allow_unsafe_renegotiation=1"))
> + params->flags |= TLS_CONN_ALLOW_UNSAFE_RENEGOTIATION;
> 
> + if (os_strstr(txt, "allow_unsafe_renegotiation=0"))
> + params->flags &= ~TLS_CONN_ALLOW_UNSAFE_RENEGOTIATION;
> 
> }

I should also note that in order to bypass the renegotiation error,
the following should also be added to the phase 1 directive of the
wpa_supplicant configuration file:

allow_unsafe_renegotiation=1

Reply via email to