Hostname check bei node ACME Konfiguration

azmosult

Member
Jan 25, 2023
8
0
6
Hi

Ich habe folgenden Aufbau:
- Internes Netzwerk mit eigener DNS Domain (mydomain.internal).
- Einen Proxmox Cluster mit 3 Nodes (pve01/02/03.mydomain.internal)
- Einige VMs (dns01.mydomain.internal, stepca01.mydomain.internal, webserver01.mydomain.internal, ...)

Damit ich per ssh und im Browser nicht immer den ganzen FQDN schreiben muss spiele ich per DHCP einen "DNS search" aus (in meinem Fall "mydomain.internal").
Das erlaubt mir dann entweder den FQDN zu benutzen oder einfach nur den kurzen Hostnamen (Die Domain hängt das System bei der DNS Auflösung dann im Hintergrund automatisch an).
"ssh user@webserver01.mydomain.internal" und "ssh user@webserver01" funktionieren beide und ich lande auf meinem Webserver.

Das funktioniert auch so im Browser (Firefox, Chrome, Safari, ...):
https://webserver01.mydomain.internal
https://webserver01

Die Zertifikate für die Interne Domain beziehe ich per ACME (certbot) von meinem stepca Server.


Mein Problem:
Ich wollte jetzt auch bei den Proxmox Servern ein internes Zertifikat per ACME beziehen. Das funktioniert auch für den FQDN "pve01.mydomain.internal" einwandfrei.
Wenn ich aber ein Zertifikat beziehen will das für den FQDN und den reinen Hostnamen gültig ist, dann bekomme ich eine Fehlermeldung:
Bash:
root@pve01:~# pvenode config set --acme domains="pve01.mydomain.internal;pve01"
400 Parameter verification failed.
acme: invalid format - format error
acme.domains: invalid format - value 'pve01' does not look like a valid domain name!


pvenode config set  [OPTIONS]

Grund scheint eine Regex in /usr/share/perl5/PVE/NodeConfig.pm Zeile 23 zu sein:
Perl:
return $domain if $domain =~ /^$label(?:\.$label)+$/;
Soweit ich es verstehe muss hier mindestens "label.label" angegeben werden wobei label aus zwei Zeichen bestehen muss ("ab.ab", "0a.0a", ...).
Das funktioniert aber in meinem Fall leider nicht.

Damit es für meinen Fall funktioniert müsste die Regex auf folgendes geändert werden:
Perl:
return $domain if $domain =~ /^$label(?:\.$label)*$/;

Oder ich bräuchte eine Möglichkeit einen reinen Hostnamen irgendwie anders anzugeben (oder irgendwas anderes):
Bash:
pvenode config set --acmedomain0 domains="pve01.mydomain.internal",hostname="pve01"

Eventuell habe ich auch was in der Doku übersehen und das was ich machen will geht jetzt schon?