Puppet 主机名与服务器证书不匹配

RIS*_*ure 10 puppet

我正在尝试设置一个安装了 puppet 的 Ubuntu VM,以便我可以在本地测试我们的生产设置。我无法让 puppetmaster 和 puppet 相互交谈。让我带你完成我的步骤。(服务器hostname是格式为“web1.xxx.xxx.net”的 FQDN)。

因此,首先,我从/etc/puppet/ssl目录中清除了所有 pem 文件(当然 CA pem 除外),以便我可以重新开始。 puppetca --list不返回任何结果。

然后,我运行puppetd --test为 puppetmaster 生成 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
Run Code Online (Sandbox Code Playgroud)

列出目录的内容会/etc/puppet/ssl显示具有正确服务器名称的 PEM 文件,该名称与我的hostname. 有人对如何解决这个问题有任何想法吗?

eri*_*son 9

该错误是因为客户端默认连接到服务器主机名“puppet”,但提供的证书没有“puppet”作为其主题或 SubjectAltName 属性。

要修复它,您可以(选择一个):

  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 Explained


Jos*_*eld 0

两台服务器能够互相解析吗?我的猜测是,由于您正在对其进行 VMing,因此您可能会丢失名称解析。如果您不使用 DNS 让服务器相互解析,则需要将条目添加到/etc/hosts两台服务器上的文件中。

Puppet 需要主机名才能解析为正确的 IP,否则您将收到您提到的错误。执行此操作后,您可能需要重新创建证书。两台机器都应该能够通过主机名 ping 通每台机器。

使用虚拟机需要注意的另一件事是同步服务器上的时间。如果不这样做,证书可能会无效。