diff --git a/src/crypto/tls.h b/src/crypto/tls.h index 3e7e9c750..a9ba7d11a 100644 --- a/src/crypto/tls.h +++ b/src/crypto/tls.h @@ -111,6 +111,7 @@ struct tls_config { #define TLS_CONN_ENABLE_TLSv1_0 BIT(14) #define TLS_CONN_ENABLE_TLSv1_1 BIT(15) #define TLS_CONN_ENABLE_TLSv1_2 BIT(16) +#define TLS_CONN_TEAP_ANON_DH BIT(17) /** * struct tls_connection_params - Parameters for TLS connection diff --git a/src/crypto/tls_openssl.c b/src/crypto/tls_openssl.c index 19271d3d6..ff6f72bab 100644 --- a/src/crypto/tls_openssl.c +++ b/src/crypto/tls_openssl.c @@ -3079,6 +3079,37 @@ static int tls_set_conn_flags(struct tls_connection *conn, unsigned int flags, } #endif /* CONFIG_SUITEB */ + if (flags & TLS_CONN_TEAP_ANON_DH) { +#if OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER) +#ifndef TEAP_DH_ANON_CS +#define TEAP_DH_ANON_CS \ + "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:" \ + "ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:" \ + "ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:" \ + "DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:" \ + "DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:" \ + "DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:" \ + "ADH-AES256-GCM-SHA384:ADH-AES128-GCM-SHA256:" \ + "ADH-AES256-SHA256:ADH-AES128-SHA256:ADH-AES256-SHA:ADH-AES128-SHA" +#endif + static const char *cs = TEAP_DH_ANON_CS; + /* + * Need to drop to security level 0 to allow anonymous + * cipher suites for EAP-TEAP. + */ + SSL_set_security_level(conn->ssl, 0); +#endif + + wpa_printf(MSG_DEBUG, + "OpenSSL: Enable cipher suites for anonymous EAP-TEAP provisioning: %s", + cs); + if (SSL_set_cipher_list(conn->ssl, cs) != 1) { + tls_show_errors(MSG_INFO, __func__, + "Cipher suite configuration failed"); + return -1; + } + } + return 0; }