On Tue, Jul 01, 2025 at 11:38:37 +0100, Daniel P. Berrangé wrote:
On Tue, Jul 01, 2025 at 10:59:06AM +0200, Peter Krempa wrote:
> On Tue, Jul 01, 2025 at 09:49:57 +0100, Daniel P. Berrangé wrote:
> > On Mon, Jun 30, 2025 at 07:25:05PM +0200, Peter Krempa via Devel wrote:
> > > From: Peter Krempa <pkrempa(a)redhat.com>
> > >
> > > Key encipherment is required only for RSA key exchange algorithm. With
> > > TLS 1.3 this is not even used as RSA is used only for authentication.
> > >
> > > Since we can't really check when it's required ahead of time drop
the
> > > check completely. GnuTLS will moan if it will not be able to use RSA
> > > key exchange.
> >
> > GNUTLS only reports problems at runtime, while the libvirt code is
> > used at system startup. This greatly improves the debuggability of
> > sysadmin config screwups, so we don't really want to delegate to
> > GNUTLS for this.
> >
> > > In commit 11867b0224a2 I tried to relax the check for some eliptic
> > > curve algorithm that explicitly forbid it. Based on the above the proper
> > > solution is to completely remove it.
> >
> > We need to invert the check - instead of excluding just ECDSA, we
> > need to include only DSA and GHOST algorithms.
>
> Originally I did the same but then I read (and verified; see my
> followup) that with TLS 1.3 the RSA key exchange algorithm isn't even
> used so keyEncipherment capability isn't even needed.
Ok, yeah, I've found that now too.
If we're removing this entirely from the impl, we should also update
the docs/kbase/tlscerts.rst.
IIRC, we need to remove the 'encryption_key' flag to stop gnutls
adding 'key encipherment' to DSA certs.
I've found that removing the flag isn't necessary. gnutls just doesn't
use it with keys that don't support it.
I've actually used my very old script built on the examples from the
above page and just added use of one of the fancy new "post quantum"
signature algorithms and it simply worked ven with "encryption_key"
being present in the 'info' file.
> If you thing it's important to stay compatible in the pre-check also
> with older protocols then I can keep it but to me it didn't make too
> much sense.
Yeah, TLS 1.3 is effectively the baseline for libvirt unless talking to
very old systems, as gnutls will preferentially negotiate it, we only
need care about libvirt clients.
Based on this I guess we could drop it from the examples. I think that
it'd be much more beneficial to hint to better ciphers (but that'd also
effectively make it obsolete).