You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:31:13