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-----

这是我最没有信心的一步。我基于GitLab 说明

确保使用完整的证书链,以防止客户端连接时出现 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

当我读到GitLab 文档reconfigure仔细一看,我意识到我误解了和之间的区别hup nginx

如果您的 SSL 证书内容已更新,但未对 gitlab.rb 进行任何配置更改,则 gitlab-ctl reconfigure 将不会影响 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"

相关内容