GitLab fornece lista de certificados de 1 certificado

GitLab fornece lista de certificados de 1 certificado

Estou tentando executar o instalador omnibus do GitLab e usar o certificado SSL da minha organização, mas os clientes SSL reclamam que o emissor do certificado é desconhecido. Como devo configurar certificados intermediários na cadeia confiável?

Minha configuração começa executando a versão mais recente do GitLab, expondo portas para HTTPS e HTTP, entre outras:

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

Isso cria um monte de configurações padrão /srv/gitlab/config, então eu defino a URL do servidor em gitlab.rb:

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

Recebi um arquivo de certificado e um arquivo de chave da minha organização, então copio-os para o /srv/gitlab/config/ssldiretório como myserver.myorg.org.crte myserver.myorg.org.key. Então eu reconfigurei o servidor GitLab:

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

Agora tento validar a configuração SSL:

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

Recebo vários erros na saída, incluindo estes:

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

Parece que não tenho a cadeia de confiança completa. O emissor do certificado da nossa organização é "CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US". Encontrei seus certificados emo site delese baixei aquele específico:

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

Extraí a versão em texto do certificado:

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

Anexei isso ao certificado da minha organização para /srv/gitlab/config/ssl/myserver.myorg.org.crtque agora ele tenha primeiro o certificado da organização e depois o certificado Digicert.

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

Este é o passo em que estou menos confiante. Estou me baseando noInstruções do GitLab:

Certifique-se de usar a cadeia de certificados completa para evitar erros de SSL quando os clientes se conectarem. A ordem completa da cadeia de certificados deve consistir primeiro no certificado do servidor, seguido por todos os certificados intermediários, com a CA raiz por último.

Isso significa apenas juntar os dois certificados no mesmo arquivo?

Enfim, executei o reconfigurecomando e testei novamente:

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

Ainda recebo os mesmos erros, incluindo "Obtive uma lista de certificados com 1 certificado". Isso me faz pensar que não adicionei o certificado Digicert à cadeia corretamente. Também tentei colocar o certificado Digicert antes do certificado da nossa organização.

Só para ter certeza de que os certificados são válidos, seguiesta postagem. O openssl s_servere openssl s_clientfuncionaram bem juntos, então acho que o problema é minha configuração do GitLab.

Responder1

Quando li oDocumentação do GitLabmais de perto, percebi que havia entendido mal a diferença entre reconfiguree hup nginx.

Se o conteúdo dos seus certificados SSL tiver sido atualizado, mas nenhuma alteração de configuração tiver sido feita no gitlab.rb, a reconfiguração do gitlab-ctl não afetará o NGINX. Em vez disso, execute sudo gitlab-ctl hup nginx para fazer com que o NGINX recarregue a configuração existente e os novos certificados normalmente.

Achei reconfigureque faria tudo e hup nginxmuito mais. Acontece que você reconfigurenão notará nenhuma alteração nos arquivos do certificado se não tiver alterado nada no /srv/gitlab/config/gitlab.rbarquivo.

Resolvi meu problema executando este comando após anexar o certificado intermediário em /srv/gitlab/config/ssl/myserver.myorg.org.crt:

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

informação relacionada