GitLab предоставляет список сертификатов из 1 сертификата

GitLab предоставляет список сертификатов из 1 сертификата

Я пытаюсь запустить установщик GitLab omnibus и использовать 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как myserver.myorg.org.crtи myserver.myorg.org.key. Затем я перенастраиваю сервер GitLab:

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

Я все еще получаю те же ошибки, включая "Got a certificate list of 1 certificates". Это заставляет меня думать, что я не добавил сертификат Digicert в цепочку должным образом. Я также пробовал поместить сертификат Digicert перед сертификатом нашей организации.

Чтобы убедиться, что сертификаты действительны, я следовалэта почта. openssl s_serverИ openssl 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"

Связанный контент