具有 CA 签名证书的 GitLab Runner for GitLab 服务器失败,原因:证书链中的自签名证书

具有 CA 签名证书的 GitLab Runner for GitLab 服务器失败,原因:证书链中的自签名证书

我的公司更改了证书颁发机构(以前只有一个 CA,现在我们有一个根 CA 和一个中间 CA)。我成功更改了 GitLab 实例中的配置,并移至运行器(位于 Ubuntu 18.04.5 LTS 上)。我尝试按照GitLab 文档没有成功。

我遵循了默认方法这里上面写着“默认 - 读取系统证书”,所以我将证书(CA 和中间证书)添加到 Ubuntu CA 列表中。一切似乎都正常,因为运行器出现在 GitLab 中。

我开始一份工作并得到:

Running with gitlab-runner 11.5.0 (3afdaba6)
  on RUN01 12ccbb74
Using Docker executor with image node:latest ...
Pulling docker image node:latest ...
Using docker image sha256:ab773999a02271b25a9f3bce46018fc3ad46a7f922a5e3e8712b6d1c7087c415 for node:latest ...
Running on runner-12ccbb74-project-73-concurrent-0 via (...)...
00:02
Fetching changes...
00:01
HEAD is now at 60b6860 Update dependency mocha to v9
fatal: unable to access 'https://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@(...).git/': SSL certificate problem: unable to get issuer certificate
ERROR: Job failed: exit code 1

然后,我在 GitLab 实例上将完整链添加到证书文件,错误变为SSL certificate problem: self signed certificate in certificate chain

我的逻辑*:它适用于 Ubuntu,但不适用于 Docker。所以我转向了信任 Docker 和 Kubernetes 执行程序的 TLS 证书部分。

我到目前为止尝试过但没有成功:

  1. 我将根 CA 证书添加到了/etc/gitlab-runner/certs/ca.crt
  2. 我还尝试使用包含根 CA 和中间 CA 链的文件。
  3. 我将其添加volumes = ["/cache", "/path/to-ca-cert-dir/ca.crt:/etc/gitlab-runner/certs/ca.crt:ro"]config.toml文件中。但我几乎确定我应该/path/to-ca-cert-dir用某些东西替换它。我只是不知道该用什么替换。

*更新:当我安装 GitLab Runner 时,我遵循使用 Debian/Ubuntu/CentOS/RedHat 的 GitLab 存储库进行安装,所以 Docker/K8s 指令没有意义。我发布了一个回答关于我如何解决这个问题。

答案1

我可以按照第三个选项让它工作针对 GitLab 服务器的自签名证书支持的选项, 说的是:

读取 PEM 证书:GitLab Runner 从预定义文件中读取 PEM 证书(不支持 DER 格式):

当 GitLab Runner 以 root 身份执行时,*nix 系统上为 /etc/gitlab-runner/certs/hostname.crt。

如果您的服务器地址是https://my.gitlab.server.com:8443/,在:/etc/gitlab-runner/certs/my.gitlab.server.com.crt创建证书文件。

因此,我只是将完整的链(GitLab 证书、中间、根)添加到文件名中/etc/gitlab-runner/certs/<gitlab-url>.crt。使用重新启动服务gitlab-runner restart,作业正在运行。

相关内容