Puppetホスト名がサーバー証明書と一致しません


10

ローカルで本番環境のセットアップをテストできるように、puppetがインストールされたUbuntu VMをセットアップしようとしています。PuppetmasterとPuppetが互いに会話するのに問題があります。私の手順を説明します。(サーバーのhostnameFQDNは「web1.xxx.xxx.net」形式です)。

したがって、最初に、/etc/puppet/sslディレクトリからすべてのPEMファイル(もちろん、CA PEMを除く)をクリアして、新たに開始できるようにします。 puppetca --list結果は返されません。

次に、puppetd --testpuppetmasterのCSRを生成するために実行します。puppetca --list現在、ホスト名( "web1.xxx.xxx.net")が含まれています。

次に、実行しpuppetca --sign web1.xxx.xxx.netます。これpuppetca --listで再び空になりました-これまでのところすべて正常に動作しています。

最後にpuppetd --testもう一度走ります。次の出力が表示されます。

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

/etc/puppet/sslディレクトリの内容をリストすると、myに一致する正しいサーバー名のPEMファイルが表示されますhostname。この問題を攻撃する方法について誰かがアイデアを持っていますか?

回答:


9

このエラーは、クライアントがデフォルトでサーバーのホスト名「puppet」に接続しているが、提示された証明書のサブジェクトまたはSubjectAltName属性として「puppet」が含まれていないために発生します。

それを修正するには、次の方法があります(1つ選択)。

  1. を実行してpuppetmasterの証明書を初期化する代わりに、を実行puppetdして初期化します。これによりpuppetmasterd、証明書のサブジェクト名に「puppet」が含まれます。

  2. 物事を偶然に任せる代わりにpuppetca --generate --certdnsnames puppet:puppet.mydomain.com web1.xx.xx.xx.net、-certdnsnamesオプションは、証明書に含まれるSubjectAltNamesのリストを指定します。クライアントがサーバーに接続するために使用する名前のコロンで区切られたリストが必要です。

  3. puppetd --testクライアントで実行するだけでなくpuppetd --test --server=web1.xx.xx.xx.net、クライアントが接続するサーバー名が、サーバーによって提示された証明書に実際に存在する名前になるように実行します。

さらにトラブルシューティングを行うには、masterzenの優れたブログエントリを確認してください:Puppet SSLの説明


3

puppetmasterログファイルを確認しましたか?同じ問題が見つかり、サーバーが証明書情報を記録していることがわかりました。

[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

Subjectフィールドは、CNが "ubuntu.localdomain"であることを示しているため、次のようにしてパペットを実行しました。

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

お役に立てれば :-)


2

Pauの回答に加えて、以下を使用してpuppetmasters証明書を検査できることを強調しておきます。

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

次に、クライアントからの場合とまったく同じホスト名を使用していることを確認します。

puppetd --server <hostname_of_puppet_master> <etc>

0

両方のサーバーは互いに解決できますか?私の推測では、VMingしているため、名前解決が行われていない可能性があります。DNSを使用してサーバーが相互に解決できない場合は/etc/hosts、両方のサーバーのファイルにエントリを追加する必要があります。

Puppetは、正しいIPに解決するためにホスト名を必要とします。これを行わないと、言及したエラーが発生します。これを行った後、証明書を再作成する必要がある場合があります。両方のマシンは、ホスト名でそれぞれにpingできるはずです。

VMで注意すべきもう1つのことは、サーバーの時刻を同期することです。そうしないと、証明書が無効になる可能性があります。


ああ、指定すべきだった。PuppetとPuppetmasterはどちらも同じサーバー上で実行されています。私のVM。そして、はい、FQDNを使用してコンピュータ自体にpingを実行できます。
RISCfuture 2010年

申し訳ありませんが、不正解です。puppetは、提示された証明書に対してDNS-> IP検証を行いません。それはありません、エラーの原因となっているものであるcertname検証にホスト名を行います。
エリックソレンソン、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.