summaryrefslogtreecommitdiff
path: root/crypto
diff options
context:
space:
mode:
authorDaniel P. Berrangé <berrange@redhat.com>2025-10-29 14:07:57 +0000
committerDaniel P. Berrangé <berrange@redhat.com>2025-11-03 10:45:55 +0000
commitd58f9b20c71caec2a4ce271dadb5d6a6d9444875 (patch)
tree3e7a446dad3c2c8f0a190d5be50e3ab647be97ff /crypto
parentfac244b0190bbffa7ff6811549ff1cea1ecbb3a1 (diff)
downloadqemu-d58f9b20c71caec2a4ce271dadb5d6a6d9444875.tar.gz
qemu-d58f9b20c71caec2a4ce271dadb5d6a6d9444875.zip
crypto: deprecate use of external dh-params.pem file
GNUTLS has deprecated use of externally provided diffie-hellman parameters. Since 3.6.0 it will automatically negotiate DH params in accordance with RFC7919. Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/tlscreds.c24
-rw-r--r--crypto/tlscredsanon.c6
-rw-r--r--crypto/tlscredspsk.c6
-rw-r--r--crypto/tlscredsx509.c4
4 files changed, 19 insertions, 21 deletions
diff --git a/crypto/tlscreds.c b/crypto/tlscreds.c
index 9912e3ffbf..3d25efe425 100644
--- a/crypto/tlscreds.c
+++ b/crypto/tlscreds.c
@@ -22,6 +22,7 @@
#include "qapi/error.h"
#include "qapi-types-crypto.h"
#include "qemu/module.h"
+#include "qemu/error-report.h"
#include "tlscredspriv.h"
#include "trace.h"
@@ -38,22 +39,7 @@ qcrypto_tls_creds_get_dh_params_file(QCryptoTLSCreds *creds,
trace_qcrypto_tls_creds_load_dh(creds, filename ? filename : "<generated>");
- if (filename == NULL) {
- ret = gnutls_dh_params_init(dh_params);
- if (ret < 0) {
- error_setg(errp, "Unable to initialize DH parameters: %s",
- gnutls_strerror(ret));
- return -1;
- }
- ret = gnutls_dh_params_generate2(*dh_params, DH_BITS);
- if (ret < 0) {
- gnutls_dh_params_deinit(*dh_params);
- *dh_params = NULL;
- error_setg(errp, "Unable to generate DH parameters: %s",
- gnutls_strerror(ret));
- return -1;
- }
- } else {
+ if (filename != NULL) {
GError *gerr = NULL;
gchar *contents;
gsize len;
@@ -67,6 +53,10 @@ qcrypto_tls_creds_get_dh_params_file(QCryptoTLSCreds *creds,
g_error_free(gerr);
return -1;
}
+ warn_report_once("Use of an external DH parameters file '%s' is "
+ "deprecated and will be removed in a future release",
+ filename);
+
data.data = (unsigned char *)contents;
data.size = len;
ret = gnutls_dh_params_init(dh_params);
@@ -87,6 +77,8 @@ qcrypto_tls_creds_get_dh_params_file(QCryptoTLSCreds *creds,
filename, gnutls_strerror(ret));
return -1;
}
+ } else {
+ *dh_params = NULL;
}
return 0;
diff --git a/crypto/tlscredsanon.c b/crypto/tlscredsanon.c
index 646574d6ae..1551382e1f 100644
--- a/crypto/tlscredsanon.c
+++ b/crypto/tlscredsanon.c
@@ -68,8 +68,10 @@ qcrypto_tls_creds_anon_load(QCryptoTLSCredsAnon *creds,
return -1;
}
- gnutls_anon_set_server_dh_params(box->data.anonserver,
- box->dh_params);
+ if (box->dh_params) {
+ gnutls_anon_set_server_dh_params(box->data.anonserver,
+ box->dh_params);
+ }
} else {
ret = gnutls_anon_allocate_client_credentials(&box->data.anonclient);
if (ret < 0) {
diff --git a/crypto/tlscredspsk.c b/crypto/tlscredspsk.c
index 8879c84ea7..e1b1e1a613 100644
--- a/crypto/tlscredspsk.c
+++ b/crypto/tlscredspsk.c
@@ -129,8 +129,10 @@ qcrypto_tls_creds_psk_load(QCryptoTLSCredsPSK *creds,
gnutls_strerror(ret));
goto cleanup;
}
- gnutls_psk_set_server_dh_params(box->data.pskserver,
- box->dh_params);
+ if (box->dh_params) {
+ gnutls_psk_set_server_dh_params(box->data.pskserver,
+ box->dh_params);
+ }
} else {
box = qcrypto_tls_creds_box_new_client(GNUTLS_CRD_PSK);
diff --git a/crypto/tlscredsx509.c b/crypto/tlscredsx509.c
index 397ff4caa9..e28fcdc6ff 100644
--- a/crypto/tlscredsx509.c
+++ b/crypto/tlscredsx509.c
@@ -683,7 +683,9 @@ qcrypto_tls_creds_x509_load(QCryptoTLSCredsX509 *creds,
errp) < 0) {
return -1;
}
- gnutls_certificate_set_dh_params(box->data.cert, box->dh_params);
+ if (box->dh_params) {
+ gnutls_certificate_set_dh_params(box->data.cert, box->dh_params);
+ }
}
creds->parent_obj.box = g_steal_pointer(&box);