Ubuntu

帶有 CA 簽名證書的 GitLab 伺服器的 GitLab Runner 失敗:證書鏈中的自簽名證書

  • September 11, 2021

我的公司更改了證書頒發機構(它是一個單一的 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 說明沒有意義。我發布了有關如何解決此問題的答案。

我能夠按照Supported options for self-signed certificate targets the GitLab server中的第三個選項使其工作,即:

讀取 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並且工作正在執行。

引用自:https://serverfault.com/questions/1077239