Chef apt_repository执行失败 出现SSL证书验证错误问题咨询
根因说明
该报错是Chef 12.19.36内置的根证书库版本过旧导致:postgresql.org的SSL证书使用了近年更新的根证书机构签发,而停止维护的Chef 12版本内置CA列表中没有对应根证书,因此拉取APT源GPG密钥时无法完成SSL校验,触发apt_repository资源执行失败。
解决方案
方案1(优先推荐,无安全风险)
调整cookbook逻辑,绕开远程拉取密钥的流程:
- 提前将postgresql官方GPG公钥
ACCC4CF8.asc下载后存放到对应cookbook的files/default目录下 - 在调用
apt_repository资源前,先通过cookbook_file资源将密钥上传到节点本地可信密钥目录 - 配置
apt_repository时直接指定本地密钥路径即可,参考代码:
# 上传本地存储的GPG密钥到节点可信目录 cookbook_file '/etc/apt/trusted.gpg.d/postgresql.asc' do source 'ACCC4CF8.asc' mode '0644' end # 配置PostgreSQL APT源 apt_repository 'postgresql' do uri 'http://apt.postgresql.org/pub/repos/apt/' distribution "#{node['lsb']['codename']}-pgdg" components ['main'] key '/etc/apt/trusted.gpg.d/postgresql.asc' # 直接使用本地密钥,不走HTTPS远程拉取 end
方案2(次推荐,影响范围小)
单独更新Chef内置的根证书库:
将节点系统中已更新的系统根证书直接替换Chef内置的CA证书文件,默认路径为/opt/chef/embedded/ssl/certs/cacert.pem,可以在cookbook中添加逻辑批量更新所有节点的该文件,后续所有Chef发起的HTTPS请求都会使用新的根证书完成校验。
方案3(临时应急,不建议长期使用)
临时关闭Chef全局SSL校验:
在chef-solo的配置文件solo.rb中添加配置ssl_verify_mode :verify_none,即可跳过所有HTTPS请求的证书校验,故障恢复后建议尽快替换为更安全的方案避免安全风险。
方案4(长期迭代方案)
升级Chef Client版本到14.x及以上的LTS版本:
Chef 12属于已经停止维护的旧版本,升级到仍在维护期的LTS版本后,内置根证书库会同步更新,不会再出现同类旧根证书不兼容问题。
内容的提问来源于stack exchange,提问作者Parepallykiran
相关产品推荐
相关产品推荐

