puppetca永远不会返回任何东西

嗨:我试图在Ubuntu上configurationPuppet,奇怪我永远不能生成证书,因为我的服务器从不显示任何挂起的证书请求。

换句话说,在服务器上我正在运行puppetmasterd,在客户端上,我可以连接到服务器,但客户端继续打印

notice: Did not receive certificate warning: peer certificate won't be verified in this SSL session 

而服务器却从来没有看到这个请求

 mrisher@lab2$ puppetca --list [nothing shows up] mrisher@lab2$ puppetca --sign clientname.domain.com clientname.domain.com err: Could not call sign: Could not find certificate request for clientname.domain.com 

编辑:有一个build议自动签名正在发生,但似乎并不是这样。 没有autosign.conf文件,并且当我运行puppetmasterd --no-daemonize -d -v我收到以下输出:info:每次客户端提示时都找不到“clientname.domain.com”的证书。没有收到证书

我检查了服务器上的证书,似乎没有任何:

 mrisher@lab2:~$ puppetca --list --all mrisher@lab2:~$ sudo puppetca --list --all + lab2.domain.com // this is the server (master) mrisher@lab2:~$ sudo puppetca --list [blank line] mrisher@lab2:~$ 

注意:这主要是运行从Ubuntu的默认安装,如果这给出任何线索。

谢谢你的帮助。

编辑看来这是由于不一致的运行puppetd作为不同的用户。 由于我不明白守护进程的原因,木偶将其某些设置(包括证书)存储在〜/ .puppet而不是像/var/lib/puppet这样的中央目录中,因此,重新testing你自己与sudo.

你的证书请求是否曾经把它交给服务器? (使用puppetmasterd --configprint ssldir的值puppetmasterd --configprint ssldir ,在这里我写了$ssldir

$ssldir/ca应该有一个像这样的目录结构:

  private/ requests/ serial signed/ 

并根据requests ,如果您的客户的请求实际上,它应该看到一个名为clientname.domain.com.pem的文件。 如果它在那里,需要签名,你可以通过指定puppetca --ssldir=/path/to/ssldir --sign clientname.domain.com直接指向puppetca --ssldir=/path/to/ssldir --sign clientname.domain.com ; 如果不在那里,那么客户端的CSR上传可能会失败。 一个简单而安全的解决方法是使用puppetca --generate clientname.domain.com在您的puppetmaster上puppetca --generate clientname.domain.com为客户端创build密钥对和签名证书。 一个简单而不安全的解决方法是通过在puppetmaster的$confdir '* .domain.com'放入autosign.conf来为您的域打开自动$confdir

实际上,如果启用了自动签名,您将会看到这种行为。 您可以查看/etc/puppet/autosign.conf的内容来查看启用了哪些域。 例如,假设该文件包含以下内容:

 *.example.com 192.168.0.0/24 

这将意味着来自example.com树下的主机名或来自192.168.0.0/24地址块的任何证书将由puppetca签署,而没有任何pipe理员交互。

您可以通过发出该命令来查看所有已签署或未签署的证书

 /usr/sbin/puppetca --list --all 

尝试排除木偶大师certname不匹配。

在代理节点上:

 $ sudo puppetd --configprint server 

主人:

 $ sudo puppetca --print lab2.domain.com 

…并在它转储的输出中查找这些行:

 ... Subject: CN={A hostname} ... X509v3 Subject Alternative Name: DNS:{a hostname}, DNS:{another hostname}, {etc.} 

如果代理用于联系主服务器的主机名是主服务器的有效主机名,但不在主服务器的SSL证书中的“主题公用名”(certname)或“主题替代名”(certdnsnames)字段中,将处于一个痛苦的世界。

(如果事实certificate是这个问题,可以将代理上的puppet.conf改为指向puppet master的工作certname或certdnsname,或者停止puppet master,编辑puppet.conf来获得你想要的certname和certdnsnames ,吹走它的ssldir( puppetmaster --configprint ssldir ),并重新启动master。)

我想要解释一下我发现的一些东西:假设这是中途工作(客户可以联系木偶大师,但现在证书请求不再出现)。 就我而言,我已经中途工作了,但是我甚至无法从客户那里骗取傀儡大师。 奇。 在这种情况下,我必须通过客户站点上的相同的ssl目录来删除客户端和puppet-master证书,并清除puppet-master的ca文件。 在puppet-master上,我必须执行从所有目录删除客户端证书痕迹的镜像操作,并在/var/lib/puppet/ssl/ca/inventory.txt文件中列出客户端列表。

做完这个并重新启动后,我可以看到请求。 问题在于puppet-master曾经在/ var / lib / puppet / ssl / ca目录下的inventory.txt文件中为客户端提供了有效的证书列表,但是我已经清除或删除了实际的证书。 我的木偶大师系统日志显示:“证书没有find主机…”,这意味着它知道一个库存,但实际的证书是在隐喻的“订单”或只是失踪。

所以,清理旧的证书,在客户端的木偶大师。 然后删除inventory.txt中的证书和证书列表,这应该工作。