来自 https 站点的 Chef Remote_file 并带有自签名证书

onk*_*ows 5 ssl chef-infra

我想知道 Chef 是否可以使用remote_file使用自签名证书的 https 源中的资源。好像不可以。文档未提及证书并提供禁用 SSL 检查的配置。

如果您有一个带有自签名证书的 https 站点,则可以使用具有以下内容的配方进行复制:

remote_file "/tmp/image.png" do
  source "https://mywebsite.com/image.png"
end
Run Code Online (Sandbox Code Playgroud)

您当然可以使用knife在目标节点上获取证书,如下所示

vagrant@devops:~$ Knife ssl fetch https://mywebsite.com/
警告:未找到 Knife 配置文件
警告:来自 mywebsite.com 的证书将被获取并放置在您的 trust_cert 目录中 (/home/vagrant/.chef/trusted_certs )。
Knife 无法验证这些证书是否正确。下载后您应该验证这些证书的真实性。

这似乎没有做太多/任何事情。厨师将继续显示消息

==>默认值:[2015-06-08T06:30:33+00:00]错误:remote_file[/tmp/image.png](jenkins::remote_file_test第1行)有错误:OpenSSL::SSL::SSLError : SSL_connect 返回=1 errno=0 state=SSLv3 读取服务器证书 B: 证书验证失败

也许这是一个错误?Chef 似乎忽略了受信任的证书。

有解决方法吗?我们能让 Chef 以某种方式信任该证书吗?

更新 Tensibai 给出了正确答案。看他的评论。

onk*_*ows 1

我使用certificate说明书来安装我的自签名证书。所以我的解决方案就是基于此。在我的食谱中,我使用certificate_manage安装存储在加密数据包中的证书。

cert_resource = certificate_manage node['hostname'] do
  action :create
  ignore_missing false
end
Run Code Online (Sandbox Code Playgroud)

然后我可以添加证书,cacert.pem例如

ruby_block 'add_self_signed_certificate_to_cacert' do
  block do
    cert_file_path = ::File.join(cert_resource.cert_path, 'certs', cert_resource.cert_file)
    cacert = ::File.read('/opt/chef/embedded/ssl/certs/cacert.pem')
    pem = ::File.read(::File.join(cert_resource.cert_path, 'certs',cert_resource.cert_file))
    unless cacert.include? pem
      File.open('/opt/chef/embedded/ssl/certs/cacert.pem', 'w') {|f| f.write(cacert + "\n" + pem) }
    end
  end
end
Run Code Online (Sandbox Code Playgroud)