在厨师期间使用 AWS SDK 运行 错误,但 运行 在厨师工作之外使用它

Using the AWS SDK during a chef run errors but running it outside of chef works

我有一个帮助程序库,AWS-SDK 可以提取信息,因此它可以 return 一个名称列表,如下所示:

def get_load_balancer_names
    self.elb_client.describe_load_balancers[:load_balancer_descriptions].map { |elb| elb[:load_balancer_name] }
end

当此代码在厨师期间 运行 时 运行 我收到此错误:

SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed[0m

但是当我 运行 主厨之外的代码 运行 它起作用时(我得到了我期望的 ELB 名称列表)。

我使用 IAM 角色进行身份验证。

我确实发现 this 添加了一个(潜在的)修复程序,因此您可以:

AWS.config(:ssl_ca_path => '/...')

但这不是一个真正的选择,因为我宁愿自己处理问题(当然除非没有其他方法)。

我认为可能是 AWS-SDK 在 chef 运行 期间使用了 chef SSL 证书,这可能就是原因。

为什么会出现这样的错误,我该如何解决?

据我所知,这与 Mozilla 有关,Mozilla 在 2014 年底删除了 1024 位根 CA 证书。从技术上讲,这很好,但不幸的是破坏了许多旧证书链。

此问题在 "RSA-1024 removed" http://curl.haxx.se/docs/caextract.html 部分描述。

并且在 https://github.com/chef/chef-dk/issues/199#issuecomment-60643682

的 ChefDK 中

最近从 Omnibus (https://downloads.chef.io/) 发布的 ChefDK 和 Chef-Client 版本包括一个带有旧 RSA-1024 根证书的根信任。

我建议你更新厨师客户端。

如果您还没有使用 chef.io 的 Omnibus 安装程序,您需要手动更新 distro/OpenSSL 的根证书。