首页 > 解决方案 > 构建失败:https://apt.puppetlabs.com,证书链使用过期证书

问题描述

今天下午我的构建开始失败,原因如下:

Notice: /Stage[main]/Server_init::Apt_get_update/Exec[apt-get-update]/returns:
Err:16 https://apt.puppetlabs.com bionic Release

Notice: /Stage[main]/Server_init::Apt_get_update/Exec[apt-get-update]/returns: 
Certificate verification failed: The certificate is NOT trusted. 
The certificate chain uses expired certificate.  Could not handshake: 
Error in the certificate verification. [IP: 13.33.171.122 443]

我假设过期的证书今天早上过期了,因为早期的成功构建。

我如何找出哪个证书失败了?我可以做些什么来更新它。这表示它是链中的某个证书,我认为这意味着它不一定是 apt.puppetlabs.com 的证书。

有什么方法可以让我暂时忽略这个 repo 上的证书,这样我就可以恢复我的票证工作,而不是这个新错误?

标签: ssl-certificatepuppetapt

解决方案


可能有更方便的方法可以做到这一点,但这是我在证书链中找到断开链接的方法:

openssl s_client </dev/null -showcerts -connect apt.puppetlabs.com:443 -servername apt.puppetlabs.com | awk 'BEGIN { pem_to_text = "openssl x509 -noout -text" }; /BEGIN CERTIFICATE/ { on = 1 }; on == 1 { print $0 | pem_to_text }; /END CERTIFICATE/ { on = 0; close(pem_to_text) }'

在撰写本文时,链中的一个证书 ( CN = USERTrust RSA Certification Authority) 已于格林威治标准时间 2020 年 5 月 30 日 10:48:38 过期。

但是请注意,在较新的操作系统版本(如 Ubuntu 20.04)上,该问题不会导致错误,因为该ca-certificates软件包包含相同实体和公钥的更新 CA 证书,有效期至 1 月 18 日 23:59:59格林威治标准时间 2038 和较新版本的 libssl(OpenSSL)利用这一事实(似乎)来验证叶证书。


推荐阅读