帶有 CA 簽名證書的 GitLab 伺服器的 GitLab Runner 失敗:證書鏈中的自簽名證書
我的公司更改了證書頒發機構(它是一個單一的 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 證書部分。
到目前為止我已經嘗試過,但沒有成功:
- 我將根 CA 證書添加到
/etc/gitlab-runner/certs/ca.crt
.- 我還嘗試使用鏈中包含根 CA 和中間 CA 的文件。
- 我添加
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
並且工作正在執行。