Skip to main content
Skip to content

过期的 TLS 证书

如果 你的 GitHub Enterprise Server 实例 使用的证书已过期,服务将无法再验证 TLS 连接。 用户可能无法访问实例,依赖于内部连接的功能可能会停止工作。

故障特征

  • 用户无法访问该实例。
  • 拉取请求不会随着新的推送而更新。
  • Webhook 不会被传递,并且 GitHub Actions 工作流不会被触发。
  • /var/log/github/exceptions.log 包含 certificate verify failed 错误。

原因

每个证书仅在其 notBefore 至 notAfter 期间有效。 如果你的实例的证书或其证书链中的任何中间证书或根证书已过期,验证将失败。

实例上安装的自定义证书颁发机构 (CA) 证书可以以相同的方式过期。

确认该问题

  1. 通过 SSH 连接到管理 shell。 有关详细信息,请参阅“访问管理 shell (SSH)”。

  2. 检查实例正在使用的证书的有效期。

    openssl x509 -in /etc/haproxy/ssl.crt -noout -subject -dates
    

notAfter如果日期已过,则证书已过期。

  1. 如果已安装自定义 CA 证书,请列出它们。

    ghe-ssl-ca-certificate-install -l
    
  2. 逐一检查其有效期日期,将 CERTIFICATE 替换为列表中的文件名。

    openssl x509 -in /usr/local/share/ca-certificates/CERTIFICATE -noout -subject -dates
    

解决问题

警告

替换证书将启动配置运行,这会重启服务。 首先启用维护模式以减少对用户的影响。 有关详细信息,请参阅“启用和排定维护模式”。

  1. 上传有效的证书,或启用 Let's Encrypt 来管理证书。 有关详细信息,请参阅“配置 TLS”。

    在您上传的文件中包含完整的证书链。 有关详细信息,请参阅“排查 TLS 错误”。

  2. 对于每个过期的自定义 CA 证书,如果不再需要, ghe-ssl-ca-certificate-install -r 请将其删除。 如果实例仍需要信任该 CA,请改为使用 ghe-ssl-ca-certificate-install -c 安装有效的替代项。 然后应用配置。 有关详细信息,请参阅“命令行实用程序”。

  3. 如果启用了维护模式,请在配置运行完成后将其禁用。

联系 GitHub 支持

如果证书仍在有效期内,但出现上述症状,则链中的中间证书或根证书可能已过期。 如果无法确认此问题,或者替换证书后问题继续,请联系 GitHub 支持。 有关详细信息,请参阅“创建支持工单”。

不要将私钥发送到 GitHub 支持。

如果已打开支持工单,附加支持包有助于 GitHub 支持 更快地诊断问题。 有关详细信息,请参阅“向GitHub支持提供数据”。

延伸阅读