qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v2 00/15] Implement TLS support to QEMU NBD server & client
@ 2016-01-11 15:00 Daniel P. Berrange
  2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 01/15] qom: add helpers for UserCreatable object types Daniel P. Berrange
                   ` (14 more replies)
  0 siblings, 15 replies; 17+ messages in thread
From: Daniel P. Berrange @ 2016-01-11 15:00 UTC (permalink / raw)
  To: qemu-devel; +Cc: Paolo Bonzini

This is an update of the series previously posted:

  v1: https://lists.gnu.org/archive/html/qemu-devel/2015-11/msg06126.html

This series of patches implements support for TLS in the QEMU NBD
server and client code.

It is implementing the NBD_OPT_STARTTLS option that was previously
discussed here:

  https://www.redhat.com/archives/libvir-list/2014-October/msg00506.html

And is also described in the NBD spec here:

  https://github.com/yoe/nbd/blob/master/doc/proto.md

To ensure that clients always get a suitable error message from the
NBD server when it is configured with TLS, a client speaking the
new style protocol will always send NBD_OPT_LIST as the first thing
it does, so that we can see the NBD_REP_ERR_TLS_REQD response.

Usage of TLS is described in the commit messages for each patch,
but for sake of people who don't want to explore the series, here's
the summary

Starting QEMU system emulator with a disk backed by an TLS encrypted
NBD export

  $ qemu-system-x86_64 \
       -object tls-creds-x509,id=tls0,endpoint=client,dir=/home/berrange/security/qemutls \
       -drive driver=nbd,host=localhost,port=9000,tls-creds=tls0

Starting a standalone NBD server providing a TLS encrypted NBD export

  $ qemu-nbd \
       --object tls-creds-x509,id=tls0,endpoint=server,dir=/home/berrange/security/qemutls
       --tls-creds tls0 \
       --exportname default

NB, exportname is mandatory, since TLS requires the fixed-new style
NBD protocol negotiation.

Starting a QEMU system emulator built-in NBD server

  $ qemu-system-x86_64 \
       -qmp unix:/tmp/qmp,server \
       -hda /home/berrange/Fedora-Server-netinst-x86_64-23.iso \
       -object tls-creds-x509,id=tls0,dir=/home/berrange/security/qemutls,endpoint=server

  $ qmp-shell /tmp/qmp
    (qmp) nbd-server-start addr={"host":"localhost","port":"9000"} tls-creds=tls0
    (qmp) nbd-server-add device=ide0-hd0

The first 2 patches may be familiar as they are also posted
as part of a block device series:

  https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg04354.html

The next 4 patches are the conversion to the I/O channels
framework.

The next 5 patches are general tweaks to QEMU's impl of the
NBD protocol for better compliance and/or future proofing.

The next patch provides the NBD protocol TLS implementation.

The final 3 patches allow TLS to be enabled in the QEMU NBD
client and servers.

Changed in v2:

 - Fix error codes used during NBD TLS option negotiate
 - Update patch with helpers for UserCreatable object types

Daniel P. Berrange (15):
  qom: add helpers for UserCreatable object types
  qemu-nbd: add support for --object command line arg
  nbd: convert block client to use I/O channels for connection setup
  nbd: convert qemu-nbd server to use I/O channels for connection setup
  nbd: convert blockdev NBD server to use I/O channels for connection
    setup
  nbd: convert to using I/O channels for actual socket I/O
  nbd: invert client logic for negotiating protocol version
  nbd: make server compliant with fixed newstyle spec
  nbd: make client request fixed new style if advertized
  nbd: allow setting of an export name for qemu-nbd server
  nbd: pick first exported volume if no export name is requested
  nbd: implement TLS support in the protocol negotiation
  nbd: enable use of TLS with NBD block driver
  nbd: enable use of TLS with qemu-nbd server
  nbd: enable use of TLS with nbd-server-start command

 Makefile                        |   6 +-
 block/nbd-client.c              |  74 ++--
 block/nbd-client.h              |  10 +-
 block/nbd.c                     | 105 ++++-
 blockdev-nbd.c                  | 132 +++++-
 hmp.c                           |  54 +--
 include/block/nbd.h             |  27 +-
 include/monitor/monitor.h       |   3 -
 include/qom/object_interfaces.h |  48 +++
 nbd.c                           | 895 ++++++++++++++++++++++++++++++++--------
 qapi/block.json                 |   4 +-
 qemu-nbd.c                      | 210 ++++++++--
 qemu-nbd.texi                   |  13 +
 qmp-commands.hx                 |   2 +-
 qmp.c                           |  76 +---
 qom/object_interfaces.c         | 139 +++++++
 tests/Makefile                  |   2 +-
 vl.c                            |  48 +--
 18 files changed, 1395 insertions(+), 453 deletions(-)

-- 
2.5.0

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-01-13 10:35 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-11 15:00 [Qemu-devel] [PATCH v2 00/15] Implement TLS support to QEMU NBD server & client Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 01/15] qom: add helpers for UserCreatable object types Daniel P. Berrange
2016-01-13 10:35   ` Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 02/15] qemu-nbd: add support for --object command line arg Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 03/15] nbd: convert block client to use I/O channels for connection setup Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 04/15] nbd: convert qemu-nbd server " Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 05/15] nbd: convert blockdev NBD " Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 06/15] nbd: convert to using I/O channels for actual socket I/O Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 07/15] nbd: invert client logic for negotiating protocol version Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 08/15] nbd: make server compliant with fixed newstyle spec Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 09/15] nbd: make client request fixed new style if advertized Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 10/15] nbd: allow setting of an export name for qemu-nbd server Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 11/15] nbd: pick first exported volume if no export name is requested Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 12/15] nbd: implement TLS support in the protocol negotiation Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 13/15] nbd: enable use of TLS with NBD block driver Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 14/15] nbd: enable use of TLS with qemu-nbd server Daniel P. Berrange
2016-01-11 15:00 ` [Qemu-devel] [PATCH v2 15/15] nbd: enable use of TLS with nbd-server-start command Daniel P. Berrange

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).