Chef Server私有证书配置问题:knife ssl check提示无法获取本地颁发者证书
解决Chef 12 Server私有证书
knife ssl check验证失败问题 这个错误unable to get local issuer certificate的核心原因是OpenSSL无法构建完整的证书信任链——虽然你已经下载了服务器证书和根证书,但可能存在证书链不完整、文件未正确合并,或者服务端配置缺失的情况。下面是一步步的解决方法:
1. 先确认证书链的完整性
首先手动验证你的证书是否能形成完整的信任链:
执行以下命令(Windows下需要安装OpenSSL工具):
openssl verify -CAfile root.crt server.test.com.crt如果同样报错
unable to get local issuer certificate,说明:- 要么你的根证书
root.crt并非签发服务器证书的真正根CA; - 要么你的私有证书体系存在中间CA,你漏掉了中间CA证书。
可以用以下命令查看证书的签发关系:
# 查看服务器证书的签发者 openssl x509 -in server.test.com.crt -text -noout | grep -A 2 "Issuer" # 查看根证书的主体 openssl x509 -in root.crt -text -noout | grep -A 2 "Subject"如果两者不匹配,说明你需要补充中间CA证书。
- 要么你的根证书
2. 合并完整的证书链文件
最稳妥的方式是把服务器证书 + 中间CA证书(如果有) + 根CA证书按顺序合并成一个文件:
- 打开文本编辑器,先粘贴服务器证书的完整内容(从
-----BEGIN CERTIFICATE-----到-----END CERTIFICATE-----); - 接着粘贴中间CA证书的完整内容(如果存在);
- 最后粘贴根CA证书的完整内容;
- 将合并后的文件保存为
server.test.com.crt。
3. 清理并重新配置本地trusted_certs目录
- 先清空旧的证书文件(Windows系统替换成对应路径):
rm -rf ~/.chef/trusted_certs/* - 将合并好的
server.test.com.crt复制到~/.chef/trusted_certs/目录(Windows路径是c:/Users/test/.chef/trusted_certs/); - 可选:在你的
config.rb中指定CA文件路径,避免自动查找问题:ssl_ca_file "#{ENV['HOME']}/.chef/trusted_certs/server.test.com.crt"
4. 验证Chef Server端的Nginx配置
确保服务端的Nginx使用的是完整的证书链:
- 找到Chef Server的Nginx配置文件(通常在
/var/opt/opscode/nginx/etc/nginx.conf或对应的子配置文件); - 确认
ssl_certificate指向的是合并后的证书链文件,而不是单独的服务器证书:ssl_certificate /var/opt/opscode/nginx/ca/server_chain.crt; ssl_certificate_key /var/opt/opscode/nginx/ca/server.key; - 重启Chef Server的Nginx服务:
opscode-ctl restart nginx
5. 重新执行验证命令
现在再次运行:
knife ssl check
如果还是有问题,手动指定CA文件强制验证:
knife ssl check --ca-file ~/.chef/trusted_certs/server.test.com.crt
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

