Chef infra 使用自定义SSL证书引导Chef节点

Chef infra 使用自定义SSL证书引导Chef节点,chef-infra,knife,Chef Infra,Knife,通过Chef安装(12.0.3),我们已经从内部私有CA安装了一个新的SSL证书。但是,一旦安装了证书,我们现在在尝试引导新节点时会出现以下错误,例如: C:\ws\devops\chef\cookbooks>knife bootstrap windows winrm WIN-e9073a7mffd.mydomain.local -N CHEF_TEST_DELETE_ME -x administrator -P password -r "recipe[test]" WIN-e9073

通过Chef安装(12.0.3),我们已经从内部私有CA安装了一个新的SSL证书。但是,一旦安装了证书,我们现在在尝试引导新节点时会出现以下错误,例如:

C:\ws\devops\chef\cookbooks>knife bootstrap windows winrm WIN-e9073a7mffd.mydomain.local -N CHEF_TEST_DELETE_ME -x administrator -P password -r "recipe[test]"


WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:14+00:00] INFO: *** Chef 12.0.3 ***
WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:14+00:00] INFO: Chef-client pid: 1644
WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:21+00:00] INFO: Client key c:/chef/client.pem is not present - registering
WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:21+00:00] ERROR: SSL Validation failure connecting to host: chef.mydomain.local - SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed
WIN-e9073a7mffd.mydomain.local
WIN-e9073a7mffd.mydomain.local     ================================================================================
WIN-e9073a7mffd.mydomain.local Chef encountered an error attempting to create the client "CHEF_TEST_DELETE_ME"
WIN-e9073a7mffd.mydomain.local     ================================================================================
WIN-e9073a7mffd.mydomain.local
WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:21+00:00] FATAL: Stacktrace dumped to c:/chef/cache/chef-stacktrace.out
WIN-e9073a7mffd.mydomain.local [2015-02-11T17:45:21+00:00] FATAL: NoMethodError: undefined method `run_id' for nil:NilClass
ERROR: Failed to execute command on WIN-e9073a7mffd.mydomain.local return code 1
如果我手动将CA的证书添加到
/opscode/chef/embedded/ssl/certs/cacert.pem
文件中,则服务器将允许随后的引导尝试


关于如何修复此问题,以便在第一次尝试时正确引导节点,您有什么想法吗?

要修复此问题,您有一些选择

  • 将您的CA证书添加到trusted_certs目录(请参阅)

  • ssl\u verify\u mode
    设置为
    :验证knife.rb中的\u none
    (第一次运行成功时,client.rb应该从它开始),然后分发更新的
    cacert.pem
    ,并与chef itslef一起管理target
    client.rb
    (chef\u client cookbook有这方面的食谱)


您是否检查了节点和Chef服务器之间的时间同步?SSL期望时钟非常接近,并且产生的错误看起来可能相同。

我将CA和Chef服务器的证书文件都放在工作站的trusted_certs目录中,但在我引导时,这些证书不会复制到客户端。我将尝试设置ssl\u verify\u模式,看看这是否能解决问题,但老实说,这似乎更像是一种黑客行为,因为必须在每个工作站上设置该模式。如果可能的话,我更喜欢一次性修复。更清楚地说,即使手动将文件复制到客户端也不起作用。如果我执行“刀ssl获取”并手动安装CA证书,则后续运行的“刀ssl检查”将通过。但是,来自工作站的引导命令仍然失败,原因是“错误:连接到主机的SSL验证失败:chef.mydomain.local-SSL\u connect returned=1 errno=0 state=SSLv3读取服务器证书B:certificate verify failed”我将根据您的建议向GitHub添加一个票证。谢谢你的帮助!我有这个问题,坚持我的第一个选择,一个新的cacert.pem的发行版,包括caI也有同样的问题。这方面有更新吗?你能给我GitHub门票的链接吗?谢谢你的回复。客户端和Chef服务器都使用相同的内部NTP服务器,并且具有相同的日期/时间。在这一点上,我相当有信心12.0.3 chef客户端处理私有CA和复制可信证书的方式存在缺陷。我更改了服务器名称,以便使用Thawte颁发的通配符证书,问题就消失了。