将 Berkshelf 与自定义 CA 证书结合使用

Use Berkshelf with custom CA certificate

我在本地有一个自定义 Chef 服务器,带有由我们自己的 CA 服务器签名的 TLS 证书。我将 CA 证书添加到 .chef/trusted_certs,现在 knife ssl verify 工作正常。

但是当我尝试使用 Berksfile 上传食谱时,我 运行 出现以下错误:

$ berks upload
E, [2016-03-26T15:02:18.290419 #8629] ERROR -- : Ridley::Errors::ClientError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
E, [2016-03-26T15:02:18.291025 #8629] ERROR -- : /Users/chbr/.rvm/gems/ruby-2.3-head@global/gems/celluloid-0.16.0/lib/celluloid/responses.rb:29:in `value'

我已尝试将 CA 证书附加到 /ops/chefdk/embedded/ssl/certs/cabundle.pem,但没有任何区别。

使用--no-ssl-verify。 Berkshelf 不尊重厨师的可信证书。

或者,有一个选项可以在 berks 配置文件中指定它。

创建自定义 CA 捆绑文件,然后在您的环境中设置 $SSL_CERT_FILE(或 $SSL_CERT_DIR,如果您想使用该格式)。

不要忽略证书验证。这不是最安全的选择,尤其是关于攻击者最近在节点包管理器等地方插入恶意软件的消息。您可以轻松地将 Berkshelf 配置为信任您信任 Chef 的相同证书。

在您的 ~/chef-repo/.berkshelf/config.json 文件中,确保 ca_path 设置为指向您的 Chef 信任证书,像这样(假设您厨师回购位于 ~/chef-repo)

{
  "ssl": {
    "verify": true,
    "ca_path": "~/chef-repo/.chef/trusted_certs"
  }
}

然后,使用 knife 来管理您的 Chef 证书(像这样):

$ cd ~/chef-repo
$ knife ssl fetch https://supermarket.chef.io/
$ knife ssl fetch https://my.chef.server.example.org/

您信任 Chef 的所有证书也将被 Berks 信任。