故障特征
- 用户无法访问该实例。
- 拉取请求不会随着新的推送而更新。
- Webhook 不会被传递,并且 GitHub Actions 工作流不会被触发。
/var/log/github/exceptions.log包含certificate verify failed错误。
原因
每个证书仅在其 notBefore 至 notAfter 期间有效。 如果你的实例的证书或其证书链中的任何中间证书或根证书已过期,验证将失败。
实例上安装的自定义证书颁发机构 (CA) 证书可以以相同的方式过期。
确认该问题
-
通过 SSH 连接到管理 shell。 有关详细信息,请参阅“访问管理 shell (SSH)”。
-
检查实例正在使用的证书的有效期。
openssl x509 -in /etc/haproxy/ssl.crt -noout -subject -dates
notAfter如果日期已过,则证书已过期。
-
如果已安装自定义 CA 证书,请列出它们。
ghe-ssl-ca-certificate-install -l -
逐一检查其有效期日期,将 CERTIFICATE 替换为列表中的文件名。
openssl x509 -in /usr/local/share/ca-certificates/CERTIFICATE -noout -subject -dates
解决问题
警告
替换证书将启动配置运行,这会重启服务。 首先启用维护模式以减少对用户的影响。 有关详细信息,请参阅“启用和排定维护模式”。
-
上传有效的证书,或启用 Let's Encrypt 来管理证书。 有关详细信息,请参阅“配置 TLS”。
在您上传的文件中包含完整的证书链。 有关详细信息,请参阅“排查 TLS 错误”。
-
对于每个过期的自定义 CA 证书,如果不再需要,
ghe-ssl-ca-certificate-install -r请将其删除。 如果实例仍需要信任该 CA,请改为使用ghe-ssl-ca-certificate-install -c安装有效的替代项。 然后应用配置。 有关详细信息,请参阅“命令行实用程序”。 -
如果启用了维护模式,请在配置运行完成后将其禁用。
联系 GitHub 支持
如果证书仍在有效期内,但出现上述症状,则链中的中间证书或根证书可能已过期。 如果无法确认此问题,或者替换证书后问题继续,请联系 GitHub 支持。 有关详细信息,请参阅“创建支持工单”。
不要将私钥发送到 GitHub 支持。
如果已打开支持工单,附加支持包有助于 GitHub 支持 更快地诊断问题。 有关详细信息,请参阅“向GitHub支持提供数据”。