all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [pve-devel] [PATCH pve-cluster] fix #6701: Add keyUsage extension to root CA
@ 2026-01-22 10:55 Arthur Bied-Charreton
  0 siblings, 0 replies; only message in thread
From: Arthur Bied-Charreton @ 2026-01-22 10:55 UTC (permalink / raw)
  To: pve-devel

Add the keyUsage[1] extension to the PVE root CA to comply with RFC
5280. Python started to enforce this as of 3.13 by defaulting to using the 
VERIFY_X509_STRICT flag, which breaks clients like Ansible.

The authorityKeyIdentifier[2] and subjectKeyIdentifier[3] extensions are
not strictly required for fixing this issue, however RFC 5280 mandates
them for conforming CAs, so adding them makes sense as well.

[1] https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.3
[2] https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.1
[3] https://www.rfc-editor.org/rfc/rfc5280#section-4.2.1.2

Signed-off-by: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
---
This fix is not required for PBS and PDM, since they only use self-signed
certificates.

You can run the script below to test the changes, should fail with
"CA cert does not include key usage extension" before applying the patch,
and succeed afterwards. 

```
#!/usr/bin/env python3

import socket
import ssl
import sys

try:
    context = ssl.create_default_context(cafile="/etc/pve/pve-root-ca.pem")
    context.check_hostname = True
    context.verify_mode = ssl.CERT_REQUIRED

    with socket.create_connection(("localhost", 8006), timeout=10) as sock:
        with context.wrap_socket(sock, server_hostname="localhost") as ssock:
            print(f"success")

except ssl.SSLCertVerificationError as e:
    print(e)
```
    
 src/PVE/Cluster/Setup.pm | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/src/PVE/Cluster/Setup.pm b/src/PVE/Cluster/Setup.pm
index 75d3507..d95a278 100644
--- a/src/PVE/Cluster/Setup.pm
+++ b/src/PVE/Cluster/Setup.pm
@@ -426,6 +426,25 @@ sub gen_pveca_cert {
     my $uuid_str;
     UUID::unparse($uuid, $uuid_str);
 
+    my $sslconf = <<__EOD;
+[req]
+distinguished_name = req_distinguished_name
+x509_extensions = v3_ca
+
+[ req_distinguished_name ]
+
+[ v3_ca ]
+basicConstraints = critical,CA:TRUE
+keyUsage = critical,keyCertSign,cRLSign
+authorityKeyIdentifier = keyid:always,issuer
+subjectKeyIdentifier = hash
+__EOD
+
+    my $cfgfn = "/tmp/pvesslconf-$$.tmp";
+    my $fh = IO::File->new($cfgfn, "w");
+    print $fh $sslconf;
+    close($fh);
+
     eval {
         # wrap openssl with faketime to prevent bug #904
         run_silent_cmd([
@@ -439,6 +458,8 @@ sub gen_pveca_cert {
             '-new',
             '-x509',
             '-nodes',
+            '-config',
+            $cfgfn,
             '-key',
             $pveca_key_fn,
             '-out',
@@ -448,6 +469,8 @@ sub gen_pveca_cert {
         ]);
     };
 
+    unlink $cfgfn;
+
     die "generating pve root certificate failed:\n$@" if $@;
 
     return 1;
-- 
2.47.3


_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2026-01-22 10:55 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-22 10:55 [pve-devel] [PATCH pve-cluster] fix #6701: Add keyUsage extension to root CA Arthur Bied-Charreton

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal