ssl - 来自带有自签名证书的 https 站点的 Chef remote_file

标签 ssl chef-infra

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

如果你有一个带有自签名证书的 https 站点,例如可以使用具有的配方复制

remote_file "/tmp/image.png" do
  source "https://mywebsite.com/image.png"
end

你当然可以使用knife来获取目标节点上的证书,例如如下

vagrant@devops:~$ knife ssl fetch https://mywebsite.com/
WARNING: No knife configuration file found
WARNING: Certificates from mywebsite.com will be fetched and placed in your trusted_cert directory (/home/vagrant/.chef/trusted_certs).
Knife has no means to verify these are the correct certificates. You should verify the authenticity of these certificates after downloading.

这似乎没什么作用。 Chef 将继续显示消息

==> default: [2015-06-08T06:30:33+00:00] ERROR: remote_file[/tmp/image.png] (jenkins::remote_file_test line 1) had an error: OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed

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

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

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

最佳答案

根据 tensibai 的技术(在原始问题中发表评论)我有以下安装证书的方法:

bash 'pull certificate from gitlab' do
  code <<-EOH
    openssl s_client -connect hqdevgit01.my.lan:443 -showcerts | openssl x509 -outform PEM > /opt/chef/embedded/ssl/certs/gitlab.pem
    cat /opt/chef/embedded/ssl/certs/gitlab.pem >> /opt/chef/embedded/ssl/certs/cacert.pem
  EOH
  not_if { ::File.exists?('/opt/chef/embedded/ssl/certs/gitlab.pem') }
end

我下载 pem 并将其存储在一个单独的文件中,并在将来触发该存在的操作。我想我应该检查 cacert.pem,但如果证书被附加多次,似乎没有太大问题。

最终,我需要为我的内部工具服务器获取一些证书 - 但该组织规模很小,并且没有明确指示我们将在 6 个月内做什么和在哪里。对于我的短期需求(我们 100% 在防火墙后面),这个解决方案很好(不理想)。

关于ssl - 来自带有自签名证书的 https 站点的 Chef remote_file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702620/

相关文章:

security - HTTPS 是否可以防止 session 骑马?

ssl - 通过 Iridium 连接使用 SSL

encryption - 引导节点时 Chef Cookbook 编译错误

ruby - 无需 Chef 或 Knife 从 metadata.rb 生成 metadata.json

linux - ChefServer - 服务器返回错误 502

ruby - 使用 vagrant 和 chef-solo,我如何指定要运行的 ruby​​ 版本?

ssl - "config.force_ssl = true"不强制 HTTPS

ssl - 防火墙 TCP 超时是否需要 TLS 恢复?

python-3.x - 即使在 scapy 中调用 load_layer ('tls' 之后也无法读取 tls 部分)

elasticsearch - 是否可以通过单个运行列表动态构建弹性集群?