Travis CI 企业版 SSL 证书管理

此页面包含与 SSL 证书及其在 Travis CI 企业版 (TCIE) 中的使用相关的的信息。

默认情况下,Travis CI 企业版会验证内部平台组件、RabbitMQ 和例如 Github.com/Github 企业版之间所有流量的 SSL。SSL 验证有助于确保流量安全传递。

强烈建议您使用来自受信任机构的有效证书配置您的安装。

如果您对特定部分有疑问,或者遇到了未涵盖的问题,请联系我们 enterprise@travis-ci.com 寻求帮助。

使用自签名证书 #

我们强烈建议您在配置安装时使用来自受信任证书颁发机构的有效证书。也就是说,我们认识到在某些情况下,使用自签名证书可能对您的组织更有意义。

在所有使用自签名证书的情况下,您必须在设置中禁用 SSL 证书验证。这可以在安装完成后完成。

安装后,您可以随时通过管理面板 上传证书。

使用试用版许可证 #

如果您使用试用版许可证评估 Travis CI 企业版,使用受信任证书可能没有意义。为此,我们提供使用由 Travis CI 企业版本身生成的,自签名证书的功能。

TCIE 3.x 中的试用版 #

您可以使用您的管理控制台上传您的自签名 SSL 证书,或者您可能需要禁用 SSL 验证 机制。

TCIE 2.x 中的试用版 #

在安装过程中提示您提供自定义 SSL 证书时,您可以选择“使用自签名证书”选项。

具有内部管理的证书颁发机构的组织 #

一些组织管理他们自己的内部证书颁发机构。内部机构可以使用由受信任的根证书颁发机构提供的根证书。

没有来自受信任证书颁发机构的根证书 #

如果您的内部证书颁发机构未使用来自受信任证书颁发机构的根证书,则产生的任何证书都被大多数工具和浏览器视为“不受信任”,与自签名证书相同。

由内部证书颁发机构创建的证书可以在安装过程中以与任何其他证书相同的方式上传。

请注意,您还需要按照禁用 SSL 验证的说明进行操作,才能使用 Travis CI 企业版。

具有来自受信任证书颁发机构的根证书 #

如果您的组织的内部证书颁发机构确实使用从受信任证书颁发机构购买的根证书,则上述内容不适用。您不需要禁用 SSL 验证,可以像使用直接来自受信任证书颁发机构的证书一样进行操作。

在某些情况下,可能需要在设置中包含中间证书链,才能使 SSL 验证正常工作。这背后的原因可能因您的内部设置和根证书提供商而异。请参阅以下有关如何设置中间证书链的说明。

禁用 SSL 验证 #

SSL 验证有助于确保 Travis CI 企业版组件之间所有流量都受到保护。禁用 SSL 验证会产生严重后果!

在 TCIE 3.x 中禁用 SSL 验证 #

  1. 访问 https://#:8800 下的管理控制台配置页面。如果不可用,请尝试运行 kubectl kots admin-console --namespace [namespace] 并访问 https://#:8800(管理控制台在本地机器上运行)。
  2. 浏览至“配置”
  3. 查找“高级设置”
  4. 通过勾选相应的复选框禁用 SSL 验证并保存设置
  5. 单击页面底部的“保存配置”。
  6. 新版本将出现在仪表盘中。单击“部署”。更改将在您的 Kubernetes 集群中部署。

Disabling SSL in TCIE 3.x

在 TCIE 2.x 中禁用 SSL 验证 #

要在 Travis CI 企业版 2.x 中禁用 SSL 验证

  1. 登录到您在 https://<your-travis-ci-enterprise-domain>:8800 上的仪表盘。
  2. 单击最顶部菜单中的“设置”。
  3. 单击左侧菜单中的“高级设置”(或向下滚动)。
  4. 选中“禁用 SSL 证书验证”的复选框。
  5. 单击页面底部的“保存”。

请注意,这将需要重新启动 Travis CI 企业版才能生效,并且可能会导致短暂的停机时间。

这将删除 Travis CI 组件之间内部流量的 SSL 验证检查。这也将导致在 Github 上创建的所有存储库钩子关闭进入 Travis CI 的流量的 SSL 验证。

请注意,此设置仅适用于在启用该设置之后创建的钩子。

安装后添加或更新证书 #

您可以在安装后的任何时间通过管理面板添加或更新证书。

在 TCIE 3.x 中添加或更新证书 #

  1. 访问 https://#:8800 下的管理控制台配置页面。如果不可用,请尝试运行 kubectl kots admin-console --namespace [namespace] 并访问 https://#:8800(管理控制台在本地机器上运行)。
  2. 浏览至“配置”
  3. 查找“HTTP 设置”
  4. 请选择以下选项:
    1. 如果您想使用 TCIE 3.x 自动生成的,自签名证书:选择“HTTPS 已启用”选项。
    2. 如果您想上传您自己的 SSL 证书:选择“HTTPS 已启用”和“上传 SSL 密钥”选项 - 将显示两个文本字段,用于上传 TLS 证书和密钥。将适当的数据粘贴进去。
    3. 如果您想使用生成的Let’s Encrypt 证书:选择“Let’s Encrypt HTTPS 选项”

      请注意,在 TCIE 3.x 的首次安装期间,当 DNS 记录尚未指向 Kubernetes 集群中的正确负载均衡器时,无法正确生成 Let’s Encrypt 证书。因此,首先配置一个自签名证书,并在平台部署和 DNS 设置完成后,重新配置 TCIE 平台以使用 Let’s Encrypt 证书。

  5. 单击页面底部的“保存配置”。
  6. 新版本将出现在仪表盘中。单击“部署”。更改将在您的 Kubernetes 集群中部署。

Adding or updating SSL in TCIE 3.x

请注意,选择“HTTPS 禁用”将禁用整个平台安装的 https。

在 TCIE 2.x 中添加或更新证书 #

要上传您的证书

  1. 登录到您在 https://<your-travis-ci-enterprise-domain>:8800 上的仪表盘。
  2. 单击顶部菜单最右侧的齿轮图标,并从下拉菜单中选择“控制台设置”。
  3. 单击左侧菜单中的“TLS 密钥和证书”(或向下滚动)。
  4. 根据您的证书文件的位置选择适当的选项。
  5. 输入路径或选择要上传的文件。
  6. 单击页面底部的“保存”。

请注意,这将需要重新启动 Travis CI 企业版才能生效,并且可能会导致短暂的停机时间。

需要有效的 x509 证书和私钥文件。证书和密钥必须为 PEM 格式。密钥必须未加密。

使用中间证书链 #

在某些情况下,可能需要提供中间证书链,以获得您想要的证书。这背后的原因可能因您的内部设置和根证书提供商而异。

如果您已上传有效证书,但仍遇到与 SSL 验证错误相关的意外问题,您可以在设置中设置您的中间证书链。

TCIE 3.x 中的中间证书链 #

目前不可用。很快就会添加。

TCIE 2.x 中的中间证书链 #

要添加您的证书链

  1. 登录到您在 https://<your-travis-ci-enterprise-domain>:8800 上的仪表盘。
  2. 单击最顶部菜单中的“设置”。
  3. 单击左侧菜单中的“高级设置”(或向下滚动)。
  4. 将您的证书链复制并粘贴到标记为“自定义证书颁发机构 (CA) 捆绑包”的文本框中。
  5. 单击页面底部的“保存”。

请注意,这将需要重新启动 Travis CI 企业版才能生效,并且可能会导致短暂的停机时间。

重新启动后,您可以验证 SSL 验证是否现在正常工作。如果您在设置链后仍然遇到问题,请联系我们 enterprise@travis-ci.com 寻求帮助。

使用 Let’s Encrypt SSL 证书 #

您可以使用来自Let’s Encrypt 的证书,而不是自签名证书或从受信任证书颁发机构购买的证书。来自 Let’s Encrypt 的证书是免费的,并且与从受信任证书颁发机构购买的证书的行为相同。

您需要什么

  • 一个电子邮件地址(Let’s Encrypt 将发送有关紧急续订和安全问题的通知)。
  • 您的安装可用的域名。

以下步骤需要您的 Travis CI 企业版实例停机。因此,我们建议您在维护窗口期间执行这些步骤。

TCIE 3.x 中的 Let’s Encrypt SSL 证书 #

由于 certbot 已经安装在 TCIE 3.0 镜像中,您无需单独安装它。

  1. 访问 https://#:8800 下的管理控制台配置页面。如果不可用,请尝试运行 kubectl kots admin-console --namespace [namespace] 并访问 https://#:8800(管理控制台在本地机器上运行)。
  2. 浏览至“配置”
  3. 查找“HTTP 设置”
  4. 从现有方法中选择“Let’s Encrypt HTTPS 选项”
  5. 单击页面底部的“保存配置”。
  6. 新版本将出现在仪表盘中。单击“部署”。更改将在您的 Kubernetes 集群中部署。

Let's Encrypt 证书将自动生成并安装。部署期间将重启 nginx。

在 TCIE 2.x 中安装 certbot #

我们将使用 certbot 从 Let's Encrypt 获取 SSL 证书。要安装 certbot

  1. 打开到平台机器的 SSH 连接。
  2. 添加 certbot 个人软件包档案
      sudo add-apt-repository ppa:certbot/certbot
    
  3. 更新可用软件包
      sudo apt-get update
    
  4. 安装所需的 certbot 依赖项
      sudo apt-get install software-properties-common
    
  5. 安装 certbot 软件包
      sudo apt-get install certbot
    

在 TCIE 2.x 中生成新的 Let's Encrypt 证书 #

certbot 工具提供多种获取证书的方法。我们将选择“临时 Web 服务器”选项,因为它不需要任何额外的设置或配置。唯一的先决条件是 Travis CI Enterprise 容器必须停止,以便 certbot Web 服务器能够正确绑定到端口 443。

在 TCIE 2.x 中生成新的 Let's Encrypt 证书 #

在此过程中,您的 Travis CI Enterprise 实例将不可用。

  1. 打开到平台机器的 SSH 连接。
  2. 停止您的 Travis CI Enterprise
      replicatedctl app stop
    
  3. 启动交互式证书过程
      sudo certbot certonly
    
  4. 在提示中选择选项 1启动临时 Web 服务器
      How would you like to authenticate with the ACME CA?
      -------------------------------------------------------------------------------
      1: Spin up a temporary webserver (standalone)
      2: Place files in webroot directory (webroot)
      -------------------------------------------------------------------------------
      Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
    
  5. 填写您的电子邮件地址
      Enter email address (used for urgent renewal and security notices) (Enter 'c' to
      cancel): ops@example.com
    
  6. 接受服务条款
      -------------------------------------------------------------------------------
      Please read the Terms of Service at
      https://letsencrypt.openssl.ac.cn/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
      in order to register with the ACME server at
      https://acme-v01.api.letsencrypt.org/directory
      -------------------------------------------------------------------------------
      (A)gree/(C)ancel: A
    
  7. 决定是否要与 EFF 共享您的电子邮件地址(此决定不会影响您的证书或您的 Travis CI Enterprise 实例)
      -------------------------------------------------------------------------------
      Would you be willing to share your email address with the Electronic Frontier
      Foundation, a founding partner of the Let's Encrypt project and the non-profit
      organization that develops Certbot? We'd like to send you email about EFF and
      our work to encrypt the web, protect its users and defend digital rights.
      -------------------------------------------------------------------------------
      (Y)es/(N)o: N
    
  8. 提供您的域名
      Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
      to cancel): <your-travis-ci-enterprise-domain>
    
  9. 成功完成后,您应该会看到类似于以下内容的消息
      IMPORTANT NOTES:
      Congratulations! Your certificate and chain have been saved at:
      /etc/letsencrypt/live/<your-travis-ci-enterprise-domain>/fullchain.pem
      Your key file has been saved at:
      /etc/letsencrypt/live/<your-travis-ci-enterprise-domain>/privkey.pem
      Your cert will expire on 2018-02-07. To obtain a new or tweaked
      version of this certificate in the future, simply run certbot
      again. To non-interactively renew *all* of your certificates, run
      "certbot renew"
    
  10. 重新启动您的 Travis CI Enterprise 实例
      replicatedctl app start
    

您的证书现在已生成并保存在您的 Travis CI Enterprise 平台机器上。但是,您必须采取其他步骤来配置您的 Travis CI Enterprise 实例以使用新证书。有关说明,请参阅 使用 Let's Encrypt 证书 部分。

在 TCIE 2.x 中使用 Let's Encrypt 证书 #

在此过程中,您的 Travis CI Enterprise 实例将不可用。

要在您的 Travis CI Enterprise 2.x 实例中使用生成的证书

  1. 登录到您在 https://<your-travis-ci-enterprise-domain>:8800 上的仪表盘。
  2. 在顶部菜单的最右侧,单击齿轮图标并从下拉菜单中选择“控制台设置”。
  3. 单击左侧菜单中的“TLS 密钥和证书”(或向下滚动)。
  4. 选择“服务器路径”选项。
  5. 输入您在上面 certbot 输出中提供的证书路径。示例
      - SSL Private Key Filename: `/etc/letsencrypt/live/<your-travis-ci-enterprise-domain>/privkey.pem`
      - SSL Certificate Filename: `/etc/letsencrypt/live/<your-travis-ci-enterprise-domain>/fullchain.pem`
    
  6. 单击页面底部的“保存”。
  7. 打开到平台机器的 SSH 连接。
  8. 停止您的 Travis CI Enterprise 实例
      replicatedctl app stop
    
  9. 重新启动您的 Travis CI Enterprise 实例
      replicatedctl app start
    

续订您的证书 #

Let's Encrypt 证书的有效期很短,**将在 90 天后过期。** 因此,您需要定期续订它们。这可以通过在 TCIE 2.x 中使用 certbot 手动完成。

续订 TCIE 3.x 的 Let's Encrypt 证书 #

目前,Let's Encrypt 证书每次 nginx pod 启动时都会自动刷新。因此,要刷新它

  1. 杀死 nginx pod
  2. 再次部署它(例如,将副本数缩减为 0,然后恢复到目标数量)

续订 TCIE 2.x 的 Let's Encrypt 证书 #

在此过程中,您的 Travis CI Enterprise 实例将不可用。

要手动将您的证书续订另外 90 天

  1. 打开到平台机器的 SSH 连接。
  2. 停止您的 Travis CI Enterprise 实例
      replicatedctl app stop
    
  3. 执行证书续订
      sudo certbot renew
    
  4. 重新启动您的 Travis CI Enterprise 实例
      replicatedctl app start
    

使用 TCIE2.x 中的 cron 作业自动续订 Let's Encrypt SSL 证书 #

您可以使用 cron 作业自动执行 certbot 续订来避免手动续订

  1. 创建包含以下脚本的 /home/ubuntu/renew-certs.sh

     #!/bin/bash
    
     set -u
    
     function usage() {
       echo
       echo "Usage: $(basename $0)"
       echo
       echo "Simple script to renew certs, should be used via a cron. Assumes that certs are already set up."
       echo
       echo "See https://docs.travis-ci.cn/user/enterprise/platform-tips/#use-a-lets-encrypt-ssl-certificate for initial setup info."
       echo
    
       exit 1
     }
    
     if [[ $# -ne 0 ]]; then
       usage
     fi
    
     replicatedctl app stop
     sudo certbot renew
     replicatedctl app start
    
  2. 使脚本可执行

     $ chmod +x /home/ubuntu/renew-certs.sh
    
  3. 通过编辑 /etc/crontab 并追加以下内容来创建一个 cron 作业

     # Renews certs at 2am on the 1st of February, May, August, and November.
     # Please change the configuration that applies to the certificate you are creating.
     0 2 1 2,5,8,11 * /home/ubuntu/renew-certs.sh
    

此过程将在证书续订时造成少量停机时间。我们建议您在每次续订之前与您的用户沟通,让他们知道他们的构建将暂时停止,直到证书续订为止。