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/ssl
diretório como myserver.myorg.org.crt
e 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.crt
que 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 reconfigure
comando 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_server
e openssl s_client
funcionaram 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 reconfigure
e 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 reconfigure
que faria tudo e hup nginx
muito mais. Acontece que você reconfigure
não notará nenhuma alteração nos arquivos do certificado se não tiver alterado nada no /srv/gitlab/config/gitlab.rb
arquivo.
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"