主服务器上的 puppet.conf
[master]
certname = myname.mydomain.com
ca_server = myname.mydomain.com
certdnsnames = puppet;puppet.local;myname.dyndns.org;hivemind.local;
根据我的理解,certdnsnames 定义如下应该可以工作:
puppet agent --server myname.dyndns.org --test
但我收到以下错误:
err: Could not retrieve catalog from remote server: hostname was not match with the server certificate
如何避免此错误?如何正确定义 certdnsnames?我找到了关于此问题的不同文档,但没有简单的例子。如果我使用“,”进行分隔,我根本无法签名。我还看到了类似这样的语法
certdnsnames = puppet:puppet.intra.myserver.fr,puppet.myserver.fr:puppet,puppet:puppet,puppet.intra.myserver.fr,puppet.myserver.fr
http://projects.puppetlabs.com/issues/5776
但对我来说,不清楚何时添加“puppet:”,何时不添加。
答案1
为了让其他偶然发现这个答案的人受益:
由于CVE-2011-3872,Puppet 不再支持该certdnsnames
选项。摘自文档:
在 CVE-2011-3872 之后,certdnsnames 设置不再起作用。我们完全忽略了该值。对于您自己的证书请求,您可以在配置中设置 dns_alt_names,它将在本地应用。没有配置选项可以为其他节点证书设置 DNS 替代名称或任何其他 subjectAltName 值。或者,您可以使用 --dns_alt_names 命令行选项来设置在生成您自己的 CSR 时添加的标签。
您可以使用 subjectAlternativeName 为您的服务器生成 SSL 证书,如下所示:
$ puppet cert generate <puppet master's certname> --dns_alt_names=<comma-separated list of DNS names>
答案2
对于 Puppet 4+,使用以下命令更改 puppetserver 证书接受的 DNS 名称:
将现有证书重命名为 *.backup:
mv /etc/puppetlabs/puppet/ssl/private_keys/$(hostname -f).pem{,.backup}
mv /etc/puppetlabs/puppet/ssl/ca/signed/$(hostname -f).pem{,.backup}
mv /etc/puppetlabs/puppet/ssl/certs/$(hostname -f).pem{,.backup}
生成新证书(添加您想要的备用名称):
puppet cert generate $(hostname -f) --dns_alt_names=$(hostname -f),puppet
重新启动 puppetserver 以使用新证书
service puppetserver restart
答案3
- 首先,
certdnsnames
是一个以冒号分隔的列表。 - 其次,出现此错误的原因是代理使用证书签名时未包含的主机名联系主服务器: http://docs.puppetlabs.com/guides/troubleshooting.html
答案4
要将 SAN 条目添加到 Puppet 服务器证书,请使用:
systemctl stop puppetserver
puppetserver ca setup --subject-alt-names $(hostname -f),puppet
systemctl start puppetserver
rm -rf $(puppet master --configprint ssldir)
可能还需要通过以下方式清除现有证书