2.5 KiB
Executable File
Puppet SSL-Fehler: Zertifikat stimmt nicht mit privatem Schlüssel überein
Problem
Beim Ausführen von puppet agent -t auf einem Puppet-Agenten tritt der folgende Fehler auf, selbst nach dem Löschen des lokalen SSL-Verzeichnisses (/etc/puppetlabs/puppet/ssl):
Error: The certificate for 'CN=<agent-hostname>' does not match its private key
Der Agent generiert zwar einen neuen Schlüssel, erhält aber vom Puppet-Master ein altes, nicht passendes Zertifikat zurück, anstatt auf eine neue Signierung zu warten.
Ursache
Dieses Problem tritt auf, wenn auf dem Puppet-Master bereits ein Zertifikat für den Agenten existiert. Wenn der Agent nach dem lokalen Löschen seiner Schlüssel ein neues anfordert, gibt der Master fälschlicherweise das alte, bereits vorhandene Zertifikat aus, das nicht mehr zum neuen privaten Schlüssel des Agenten passt.
Lösung
Die korrekte Lösung besteht darin, das Zertifikat des Agenten zuerst auf dem Puppet-Master vollständig zu bereinigen (clean), bevor der Agent eine neue Anfrage stellt. Dies erzwingt einen sauberen Neuregistrierungsprozess.
Schritt-für-Schritt-Anleitung
-
Zertifikat auf dem Puppet-Master bereinigen: Führen Sie diesen Befehl auf dem System aus, auf dem Ihr Puppet-Master-Container (
openvox) läuft. Ersetzen Sie<agent-hostname>durch den Hostnamen des problematischen Agenten.# Beispiel für den Agenten 'arch-2.lxd' docker exec -it openvox puppetserver ca clean --certname arch-2.lxd -
SSL-Verzeichnis auf dem Agenten löschen: Verbinden Sie sich mit dem Agenten-System und löschen Sie das SSL-Verzeichnis, um einen sauberen Zustand zu erzwingen.
sudo rm -rf /etc/puppetlabs/puppet/ssl -
Neue Zertifikatsanfrage vom Agenten senden: Führen Sie den Puppet-Agenten auf dem Agenten-System aus. Dieser Lauf wird wie erwartet mit einem Fehler abbrechen, da der Master die neue Anfrage noch nicht kennt und signiert hat.
sudo puppet agent -t -
Zertifikat auf dem Puppet-Master signieren: Gehen Sie zurück zum Master-System und signieren Sie die neue Anfrage, die in Schritt 3 erstellt wurde.
# Beispiel für den Agenten 'arch-2.lxd' docker exec -it openvox puppetserver ca sign --certname arch-2.lxd -
Puppet-Lauf auf dem Agenten abschließen: Führen Sie den Agenten ein letztes Mal aus. Er sollte nun das korrekt signierte Zertifikat erhalten und den Lauf erfolgreich abschließen.
sudo puppet agent -t