[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 03/15] block/nbd: support override of hostname for TLS certificate
|
From: |
Eric Blake |
|
Subject: |
[PULL 03/15] block/nbd: support override of hostname for TLS certificate validation |
|
Date: |
Mon, 7 Mar 2022 19:44:07 -0600 |
From: Daniel P. Berrangé <berrange@redhat.com>
When connecting to an NBD server with TLS and x509 credentials,
the client must validate the hostname it uses for the connection,
against that published in the server's certificate. If the client
is tunnelling its connection over some other channel, however, the
hostname it uses may not match the info reported in the server's
certificate. In such a case, the user needs to explicitly set an
override for the hostname to use for certificate validation.
This is achieved by adding a 'tls-hostname' property to the NBD
block driver.
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20220304193610.3293146-4-berrange@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
---
qapi/block-core.json | 3 +++
block/nbd.c | 18 +++++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index f13b5ff942b6..e89f2dfb5be7 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -4079,6 +4079,8 @@
#
# @tls-creds: TLS credentials ID
#
+# @tls-hostname: TLS hostname override for certificate validation (Since 7.0)
+#
# @x-dirty-bitmap: A metadata context name such as "qemu:dirty-bitmap:NAME"
# or "qemu:allocation-depth" to query in place of the
# traditional "base:allocation" block status (see
@@ -4109,6 +4111,7 @@
'data': { 'server': 'SocketAddress',
'*export': 'str',
'*tls-creds': 'str',
+ '*tls-hostname': 'str',
'*x-dirty-bitmap': { 'type': 'str', 'features': [ 'unstable' ] },
'*reconnect-delay': 'uint32',
'*open-timeout': 'uint32' } }
diff --git a/block/nbd.c b/block/nbd.c
index f04634905584..0a9b6cde5bd3 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -90,9 +90,10 @@ typedef struct BDRVNBDState {
uint32_t reconnect_delay;
uint32_t open_timeout;
SocketAddress *saddr;
- char *export, *tlscredsid;
+ char *export;
+ char *tlscredsid;
QCryptoTLSCreds *tlscreds;
- const char *tlshostname;
+ char *tlshostname;
char *x_dirty_bitmap;
bool alloc_depth;
@@ -121,6 +122,8 @@ static void nbd_clear_bdrvstate(BlockDriverState *bs)
s->export = NULL;
g_free(s->tlscredsid);
s->tlscredsid = NULL;
+ g_free(s->tlshostname);
+ s->tlshostname = NULL;
g_free(s->x_dirty_bitmap);
s->x_dirty_bitmap = NULL;
}
@@ -1765,6 +1768,11 @@ static QemuOptsList nbd_runtime_opts = {
.type = QEMU_OPT_STRING,
.help = "ID of the TLS credentials to use",
},
+ {
+ .name = "tls-hostname",
+ .type = QEMU_OPT_STRING,
+ .help = "Override hostname for validating TLS x509 certificate",
+ },
{
.name = "x-dirty-bitmap",
.type = QEMU_OPT_STRING,
@@ -1836,7 +1844,10 @@ static int nbd_process_options(BlockDriverState *bs,
QDict *options,
error_setg(errp, "TLS only supported over IP sockets");
goto error;
}
- s->tlshostname = s->saddr->u.inet.host;
+ s->tlshostname = g_strdup(qemu_opt_get(opts, "tls-hostname"));
+ if (!s->tlshostname) {
+ s->tlshostname = g_strdup(s->saddr->u.inet.host);
+ }
}
s->x_dirty_bitmap = g_strdup(qemu_opt_get(opts, "x-dirty-bitmap"));
@@ -2038,6 +2049,7 @@ static const char *const nbd_strong_runtime_opts[] = {
"port",
"export",
"tls-creds",
+ "tls-hostname",
"server.",
NULL
--
2.35.1
- [PULL 00/15] NBD patches for 7.0-rc0, Eric Blake, 2022/03/07
- [PULL 01/15] crypto: mandate a hostname when checking x509 creds on a client, Eric Blake, 2022/03/07
- [PULL 03/15] block/nbd: support override of hostname for TLS certificate validation,
Eric Blake <=
- [PULL 02/15] block: pass desired TLS hostname through from block driver client, Eric Blake, 2022/03/07
- [PULL 05/15] block/nbd: don't restrict TLS usage to IP sockets, Eric Blake, 2022/03/07
- [PULL 04/15] qemu-nbd: add --tls-hostname option for TLS certificate validation, Eric Blake, 2022/03/07
- [PULL 06/15] tests/qemu-iotests: add QEMU_IOTESTS_REGEN=1 to update reference file, Eric Blake, 2022/03/07
- [PULL 07/15] tests/qemu-iotests: expand _filter_nbd rules, Eric Blake, 2022/03/07
- [PULL 12/15] tests/qemu-iotests: validate NBD TLS with UNIX sockets and PSK, Eric Blake, 2022/03/07
- [PULL 10/15] tests/qemu-iotests: validate NBD TLS with hostname mismatch, Eric Blake, 2022/03/07
- [PULL 09/15] tests/qemu-iotests: convert NBD TLS test to use standard filters, Eric Blake, 2022/03/07
- [PULL 08/15] tests/qemu-iotests: introduce filter for qemu-nbd export list, Eric Blake, 2022/03/07
- [PULL 11/15] tests/qemu-iotests: validate NBD TLS with UNIX sockets, Eric Blake, 2022/03/07