我正在嘗試運行 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.crt
myserver.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_server
得openssl 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"