Я пытаюсь запустить установщик 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"