Der Hostname des Puppets stimmt nicht mit dem Serverzertifikat überein

10

Ich versuche, eine Ubuntu-VM mit installiertem Puppet einzurichten, damit ich unser Produktionssetup lokal testen kann. Ich habe Probleme, Puppenspieler und Puppe dazu zu bringen, miteinander zu reden. Lass mich dich durch meine Schritte führen. (Der Server hostnameist ein vollqualifizierter Domänenname im Format "web1.xxx.xxx.net").

Zuerst lösche ich alle PEM-Dateien (außer natürlich die CA-Pems) aus dem /etc/puppet/sslVerzeichnis, damit ich einen Neuanfang machen kann. puppetca --listgibt keine Ergebnisse zurück.

Dann puppetd --testrenne ich , um eine CSR für den Puppenmeister zu generieren. puppetca --listEnthält jetzt meinen Hostnamen ("web1.xxx.xxx.net").

Dann renne ich puppetca --sign web1.xxx.xxx.net. Jetzt puppetca --listist wieder leer - alles funktioniert soweit gut.

Zuletzt renne ich puppetd --testwieder. Ich erhalte folgende Ausgabe:

err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

Wenn Sie den Inhalt des /etc/puppet/sslVerzeichnisses auflisten, werden PEM-Dateien mit dem richtigen Servernamen angezeigt, der mit meinem übereinstimmt hostname. Hat jemand eine Idee, wie man dieses Problem angreift?

RISCfuture
quelle

Antworten:

9

Der Fehler liegt darin, dass der Client standardmäßig eine Verbindung zum Server-Hostnamen 'Puppet' herstellt, das vorgelegte Zertifikat jedoch weder als Betreff noch als SubjectAltName-Attribut 'Puppet' enthält.

Um dies zu beheben, können Sie (eine auswählen):

  1. Anstatt das Zertifikat Ihres Puppenmeisters durch Ausführen zu puppetdinitialisieren, initialisieren Sie es durch Ausführen. puppetmasterdDies führt dazu, dass der Name des Zertifikatsfachs "Marionette" enthält.

  2. Anstatt die Dinge dem Zufall zu überlassen, den Sie verwenden können, gibt puppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.netdie Option certdnsnames eine Liste von SubjectAltNames an, die im Zertifikat enthalten sein werden. Es sollte eine durch Doppelpunkte getrennte Liste aller Namen enthalten , die ein Client verwenden würde, um den Server zu kontaktieren.

  3. Anstatt nur puppetd --testauf dem Client ausgeführt zu werden, führen Sie puppetd --test --server=web1.xx.xx.xx.netden Servernamen aus, mit dem der Client eine Verbindung herstellt und der tatsächlich in dem vom Server vorgelegten Zertifikat vorhanden ist.

Weitere Informationen zur Fehlerbehebung finden Sie in Masterzens ausgezeichnetem Blogeintrag: Puppet SSL Explained

Eric Sorenson
quelle
3

Hast du die Puppetmaster-Protokolldatei überprüft? Ich habe das gleiche Problem festgestellt und festgestellt, dass der Server die Zertifikatinformationen protokolliert:

[2012-02-28 16:21:09] INFO  
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 2 (0x2)
        Signature Algorithm: sha1WithRSAEncryption
        Issuer: CN=ca
        Validity
            Not Before: Feb 26 16:32:46 2012 GMT
            Not After : Feb 24 16:32:46 2017 GMT
        Subject: CN=ubuntu.localdomain

Das Feld Betreff zeigt, dass der CN "ubuntu.localdomain" ist, also habe ich die Puppe ausgeführt, indem ich Folgendes getan habe:

puppetd -t --server=ubuntu.localdomain --fqdn=myfqdn

Hoffe das hilft :-)

Pablo Torrecilla
quelle
2

Zusätzlich zu dem, was Pau geantwortet hat, möchte ich nur hervorheben, dass Sie das Puppenspielmeister-Zertifikat überprüfen können, indem Sie:

openssl x509 -text -in /var/lib/puppet/ssl/certs/<hostname_of_puppet_master>

Stellen Sie dann sicher, dass Sie vom Client aus genau denselben Hostnamen verwenden:

puppetd --server <hostname_of_puppet_master> <etc>
3molo
quelle
0

Können sich beide Server gegenseitig auflösen? Ich vermute, dass Ihnen die Namensauflösung möglicherweise fehlt, da Sie VMing ausführen. Wenn Sie DNS nicht verwenden, damit sich die Server gegenseitig auflösen, müssen Sie Ihrer /etc/hostsDatei auf beiden Servern Einträge hinzufügen .

Bei Puppet müssen die Hostnamen auf die richtigen IP-Adressen aufgelöst werden. Ohne diese Informationen wird der von Ihnen erwähnte Fehler angezeigt. Möglicherweise müssen Sie danach Zertifikate neu erstellen. Beide Computer sollten in der Lage sein, jeweils nach Hostnamen zu pingen.

Eine andere Sache, auf die Sie bei VMs achten sollten, ist, dass Sie die Zeiten auf den Servern synchronisieren. Wenn Sie dies nicht tun, sind die Zertifikate wahrscheinlich ungültig.

Joshua Enfield
quelle
Ah, ich hätte spezifizieren sollen. Puppet und Puppetmaster laufen beide auf demselben Server. meine VM. Und ja, ich kann den Computer über den vollqualifizierten Domänennamen von sich aus anpingen.
RISCfuture
Entschuldigung Joshua, das ist falsch. Puppet führt keine DNS-> IP-Validierung für das vorgelegte Zertifikat durch. Es hat tun Hostnamen certname Validierung, das ist , was den Fehler verursacht.
Eric Sorenson