GitLab 提供 1 張憑證的證書列表

GitLab 提供 1 張憑證的證書列表

我正在嘗試運行 GitLab 的綜合安裝程式並使用我組織的 SSL 證書,但 SSL 用戶端抱怨證書頒發者未知。我應該如何在信任鏈中設定中間憑證?

我的設定從運行最新版本的 GitLab 開始,公開 HTTPS 和 HTTP 連接埠等:

sudo docker run --detach --hostname myserver.myorg.org --publish 1443:443 --publish 1080:80 \
--publish 2222:22 --publish 5005:5005 --name gitlab1 \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.2.3-ce.0

這會在 中創建一堆預設配置/srv/gitlab/config,因此我在 中設定伺服器的 URL gitlab.rb

external_url 'https://myserver.myorg.org'

我從我的組織收到了證書文件和密鑰文件,因此我將它們複製到和/srv/gitlab/config/ssl目錄中。然後我重新配置 GitLab 伺服器:myserver.myorg.org.crtmyserver.myorg.org.key

sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"

現在我嘗試驗證 SSL 配置:

echo | gnutls-cli -p1443 myserver.myorg.org

我在輸出中收到一堆錯誤,包括:

...
Processed 129 CA certificate(s).
Resolving 'myserver.myorg.org:1443'...
Connecting to '127.0.0.1:1443'...
- Certificate type: X.509
- Got a certificate list of 1 certificates.
...
- Status: The certificate is NOT trusted. The certificate issuer is unknown. 
*** PKI verification of server certificate failed...
*** Fatal error: Error in the certificate.

看來我沒有完整的信任鏈。我們組織的憑證的頒發者是「CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US」。我找到了他們的證書他們的網站,並下載了特定的一個:

wget https://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt.pem

我提取了證書的文字版本:

openssl x509 -in DigiCertTLSRSASHA2562020CA1-1.crt.pem -text
...
-----BEGIN CERTIFICATE-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----END CERTIFICATE-----

我將其附加到我的組織的證書中,/srv/gitlab/config/ssl/myserver.myorg.org.crt因此現在它首先具有組織的證書,然後是 Digicert 證書。

-----BEGIN CERTIFICATE-----
... our organization's certificate ...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
... Digicert certificate I just downloaded
-----END CERTIFICATE-----

這是我最沒有信心的一步。我是基於亞搏體育appGitLab說明

確保使用完整的憑證鏈,以防止客戶端連線時出現 SSL 錯誤。完整的證書鏈順序應首先包含伺服器證書,然後是所有中間證書,最後是根 CA。

這是否意味著將兩個證書放在同一個文件中?

無論如何,我運行reconfigure命令並再次測試:

sudo docker exec -it gitlab1 bash -c "gitlab-ctl reconfigure"
...
echo | gnutls-cli -p1443 myserver.myorg.org

我仍然遇到相同的錯誤,包括「獲得了 1 個證書的證書清單」。這讓我認為我沒有正確地將 Digicert 憑證新增到鏈中。我還嘗試將 Digicert 憑證放在我們組織的憑證之前。

只是為了確保證書有效,我遵循了這個帖子。和一起工作openssl s_serveropenssl s_client很好,所以我認為問題出在我的 GitLab 配置上。

答案1

當我讀到亞搏體育appGitLab文檔reconfigure更仔細地,我意識到我誤解了和之間的差異hup nginx

如果您的 SSL 憑證內容已更新,但未對 gitlab.rb 進行設定更改,則 gitlab-ctl 重新配置不會影響 NGINX。相反,執行 sudo gitlab-ctl hup nginx 以使 NGINX 正常地重新載入現有配置和新憑證。

我以為reconfigure我會做所有事情,hup nginx甚至更多。事實證明,reconfigure如果您沒有更改文件中的任何內容,則不會注意到證書文件中的變更/srv/gitlab/config/gitlab.rb

我透過在將中間憑證附加到後運行此命令來解決我的問題/srv/gitlab/config/ssl/myserver.myorg.org.crt

sudo docker exec -it gitlab1 bash -c "gitlab-ctl hup nginx"

相關內容