]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
OpenSSL: Generate DH parameters automatically if not set with dh_file
authorJouni Malinen <j@w1.fi>
Sat, 16 Apr 2022 08:38:44 +0000 (11:38 +0300)
committerJouni Malinen <j@w1.fi>
Sat, 16 Apr 2022 08:38:44 +0000 (11:38 +0300)
This is the recommended way of using DH in OpenSSL TLS handshake.

Signed-off-by: Jouni Malinen <j@w1.fi>
hostapd/hostapd.conf
src/crypto/tls_openssl.c

index 6930ad20de124dfe7b3774a333c097523b4f6117..7fad30227c9560633b9e7d12554ca574d2c5ff6c 100644 (file)
@@ -1254,12 +1254,11 @@ eap_server=0
 
 # dh_file: File path to DH/DSA parameters file (in PEM format)
 # This is an optional configuration file for setting parameters for an
-# ephemeral DH key exchange. In most cases, the default RSA authentication does
-# not use this configuration. However, it is possible setup RSA to use
-# ephemeral DH key exchange. In addition, ciphers with DSA keys always use
-# ephemeral DH keys. This can be used to achieve forward secrecy. If the file
-# is in DSA parameters format, it will be automatically converted into DH
-# params. This parameter is required if anonymous EAP-FAST is used.
+# ephemeral DH key exchange. If the file is in DSA parameters format, it will
+# be automatically converted into DH params. If the used TLS library supports
+# automatic DH parameter selection, that functionality will be used if this
+# parameter is not set. DH parameters are required if anonymous EAP-FAST is
+# used.
 # You can generate DH parameters file with OpenSSL, e.g.,
 # "openssl dhparam -out /etc/hostapd.dh.pem 2048"
 #dh_file=/etc/hostapd.dh.pem
index e2515323aae57a49fb83a97bdbc09e8da4955256..65ffd03a2866aa81aab70f77c3145ffa369d381a 100644 (file)
@@ -4001,10 +4001,12 @@ static int tls_global_dh(struct tls_data *data, const char *dh_file)
        EVP_PKEY *pkey = NULL, *tmpkey = NULL;
        bool dsa = false;
 
-       if (!dh_file)
-               return 0;
        if (!ssl_ctx)
                return -1;
+       if (!dh_file) {
+               SSL_CTX_set_dh_auto(ssl_ctx, 1);
+               return 0;
+       }
 
        bio = BIO_new_file(dh_file, "r");
        if (!bio) {
@@ -4066,10 +4068,14 @@ static int tls_global_dh(struct tls_data *data, const char *dh_file)
        DH *dh;
        BIO *bio;
 
-       if (dh_file == NULL)
-               return 0;
-       if (ssl_ctx == NULL)
+       if (!ssl_ctx)
                return -1;
+       if (!dh_file) {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+               SSL_CTX_set_dh_auto(ssl_ctx, 1);
+#endif
+               return 0;
+       }
 
        bio = BIO_new_file(dh_file, "r");
        if (bio == NULL) {