Skip to main content

排查 TLS 错误

如果你的设备遇到 TLS 问题,可以采取相应措施加以解决。

将密码从密钥文件中移除

如果您的 Linux 机器上安装了 OpenSSL,可以移除密码。

  1. 重命名原始密钥文件。

    mv yourdomain.key yourdomain.key.orig
    
  2. 生成不含密码的新密钥。

    openssl rsa -in yourdomain.key.orig -out yourdomain.key
    

运行此命令时系统会提示您输入密钥的密码。

有关 OpenSSL 的详细信息,请参阅 OpenSSL 文档

将 TLS 证书或密钥转换为 PEM 格式

如果安装了 OpenSSL,可以使用 openssl 命令将密钥转换为 PEM 格式。 例如,您可以将密钥从 DER 格式转换为 PEM 格式。

openssl rsa -in yourdomain.der -inform DER -out yourdomain.key -outform PEM

否则,可以使用 SSL Converter 工具将证书转换为 PEM 格式。 有关详细信息,请参阅 SSL 转换器工具的文档

上传密钥后安装无响应

如果上传 TLS 密钥后 你的 GitHub Enterprise Server 实例 无响应,请联系 GitHub Enterprise 支持部门,并提供具体详细信息,包括 TLS 证书的副本。 请确保未包含私钥。

证书有效性错误

如果 Web 浏览器和命令行 Git 等客户端无法验证 TLS 证书的有效性,则会显示错误消息。 这种情况通常发生在自签名证书以及由不被客户端承认的中间根证书颁发的“链式根”证书上。

如果您要使用由证书颁发机构 (CA) 签名的证书,那么您上传到 GitHub Enterprise Server 的证书文件必须包含具有该 CA 的根证书的证书链。 要创建此类文件,请将整个证书链(“或证书包”)连接到证书末端,确保包含主机名的主要证书在前。 在大多数系统中,您可以使用与下列命令相似的命令来执行此操作:

cat yourdomain.com.crt bundle-certificates.crt > yourdomain.combined.crt

可以从证书颁发机构或 TLS 供应商处下载证书捆绑包(例如 bundle-certificates.crt)。

安装自签名或不受信任的证书颁发机构 (CA) 根证书

如果您的 GitHub Enterprise Server 设备与网络中使用自签名或不受信证书的其他机器进行交互,您需要将签名 CA 的根证书导入到系统范围的证书库中,以通过 HTTPS 访问这些系统。 如果想要使用由内部证书颁发机构签名的证书,则必须安装根证书和任何中间证书。

  1. 从本地证书颁发机构获取 CA 的根证书并确保其为 PEM 格式。

  2. 以“admin”用户身份在端口 122 上通过 SSH 将文件复制到您的 GitHub Enterprise Server 设备。

    scp -P 122 rootCA.crt admin@HOSTNAME:/home/admin
    
  3. 以“admin”用户身份在端口 122 上通过 SSH 连接到 GitHub Enterprise Server 管理 shell。

    ssh -p 122 admin@HOSTNAME
    
  4. 将证书导入到系统范围的证书库中。

    ghe-ssl-ca-certificate-install -c rootCA.crt
    
  5. 若要应用配置,请运行以下命令。

    Note

    在配置运行过程中,你的 GitHub Enterprise Server 实例 上的服务可能会重启,这可能会导致用户短暂停机。

    Shell
    ghe-config-apply
    
  6. 等待配置运行完毕。

更新 TLS 证书

你可以生成新的自签名证书,或者使用 ghe-ssl-certificate-setup 命令行实用工具更新 你的 GitHub Enterprise Server 实例 的现有 TLS 证书。 有关详细信息,请参阅“命令行实用程序”。

排查更新 TLS 证书后服务器通信的问题

如果在更新证书后在服务器上遇到通信问题或其他问题,则安装过程中可能缺失文件或符号链接。 检查 Web 日志输出中是否有以下消息。

 certificate verify failed (unable to get issuer certificate)

如果看到此消息,则可能存在缺失或配置错误的证书。 这可能会阻止应用程序服务相互通信。

要修正该问题:

  1. 备份当前的 TLS 证书目录。

  2. 要刷新 /etc/ssl/certs 目录中可能缺失的证书和内容,请运行以下命令。

    Shell
    sudo update-ca-certificates --verbose --fresh
    

如果有任何问题,请联系 GitHub Enterprise 支持