我使用的 ChefDK 具有以下版本:
Chef Development Kit Version: 0.17.17
chef-client version: 12.13.37
delivery version: master (f68e5c5804cd7d8a76c69b926fbb261e1070751b)
berks version: 4.3.5
kitchen version: 1.11.1
Chef 与服务器的连接似乎使用 Knife 工作正常,因为我可以正确运行所有命令。但是当我运行
berks upload
命令我收到此错误
Ridley::Errors::ClientError: SSL_connect returned=1 errno=0 state=error: certificate verify failed
我在使用 Knife 命令时也遇到了这个问题,但是当我在默认路径 ~/.chef/trusted_certs/中复制证书时解决了这个问题
我可以通过将证书设置为指向证书文件的环境变量 SSL_CERT_FILE 来解决问题,但我无法永久使用它,因为如果设置了它,则运行命令时会出现另一个错误
berks vendor
/opt/chefdk/embedded/lib/ruby/gems/2.1.0/gems/httpclient-2.7.2/lib/httpclient/ssl_socket.rb:46:in `connect': SSL_connect returned=1 errno=0 state=error: certificate verify failed (Faraday::SSLError)
所以基本上我必须不断地设置和取消设置该变量才能正常工作,你可以想象这非常烦人。
如何正确配置berkshelf才能工作?
谢谢, 米歇尔。
最佳答案
不幸的是,Berkshelf 使用自己的 HTTP 客户端层,因此它(还?)不支持 Chef 的 trusted_certs/
文件夹。这意味着您必须使用 $SSL_CERT_FILE
或 $SSL_CERT_DIR
以老式 OpenSSL 方式执行操作。正如 Tensibai 提到的,您需要以某种方式为 OpenSSL 构建一个新的信任数据库。这不是直接等价的,但我要记录一下,Policyfile 工具确实支持 trusted_certs/
。
关于chef-infra - 如何正确配置berks以避免证书问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39660990/