我们还必须处理进行SSL拦截(MITM)的透明代理。
我经常遇到由于Chef不知道CA证书而导致的SSL验证错误,有时是厨师本身的工具(berkshelf,knife;自从默认情况下,由于Chef 12启用SSL以来,第一次与服务器对话时甚至是chef客户本身)。 >
问题是:如何使Chef知道我的CA证书以获得有效的SSL交换?
#1 楼
有两种方法可以实现此结果:Chef具有一个
trusted_dir
,可以将证书添加到受信任列表中。文档中有很多详细信息。将您的CA证书添加到此目录将解决此问题。根据自己的文档,knife
的路径也略有不同。厨师在
/opt/chef/embedded/ssl/certs/cacert.pem
中使用其自己的CA证书列表。 您可以在此列表的末尾添加您的CA证书以信任它。
第二个选项的优点是可以导出指向厨师
SSL_CERT_FILE
的环境变量cacert.pem
,以允许使用openssl
库的大多数工具知道您的CA证书。对于Chef服务器(或在食谱中用作目标的另一台服务器)上的自签名证书的情况,
knife ssl_fetch
将允许所有刀具命令起作用。将服务器证书添加到cacert中。对于上述情况2的pem,您可以使用以下命令:
# For a self signed CA certiticate
openssl s_client -showcerts -connect <YOUR_CHEF_SERVER>:443 </dev/null 2>/dev/null|openssl x509 -outform PEM >> /opt/chefdk/embedded/ssl/certs/cacert.pem
# For an internal CA signed certificate:
openssl s_client -showcerts -verify 5 -connect <YOUR_CHEF_SERVER>:443 </dev/null 2>/dev/null | awk '/BEGIN/,/END/{if(/BEGIN/){a++}; certs[a]=(certs[a] "\n" q4312078q)}; END {print certs[a]}' >> /opt/chefdk/embedded/ssl/certs/cacert.pem
export SSL_CERT_FILE=/opt/chefdk/embedded/ssl/certs/cacert.pem
Chefsl-dk中包含openssl命令,因此也可以在Windows下完成。将路径更改为
c:\opscode\
而不是/opt/
。要导出环境变量,请在命令中使用set SSL_CERT_FILE=...
(将/P
永久添加到您的环境中)。