Я пытаюсь запустить комплексный установщик 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/журналы:/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
каталог как мой сервер.myorg.org.crt
и мой сервер.myorg.org.key
. Затем я перенастраиваю сервер GitLab:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl перенастроить"
Теперь я пытаюсь проверить конфигурацию SSL:
эхо | gnutls-cli -p1443 myserver.myorg.org
Я получаю кучу ошибок в выводе, в том числе эти:
...
Обработано 129 сертификатов ЦС.
Разрешение "myserver.myorg.org:1443"...
Подключение к "127.0.0.1:1443"...
- Тип сертификата: X.509
- Получил список сертификатов из 1 сертификата.
...
- Статус: Сертификат НЕ является доверенным. Издатель сертификата неизвестен.
*** Проверка PKI сертификата сервера не удалась...
*** Фатальная ошибка: Ошибка в сертификате.
Похоже, у меня нет полной цепочки доверия. Эмитент сертификата нашей организации: «CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US». Я нашел их сертификаты на их сайт, и загрузил этот конкретный:
wget https://cacerts.digicert.com/DigiCertTLSRSASHA2562020CA1-1.crt.pem
Я извлек текстовую версию сертификата:
openssl x509 — в DigiCertTLSRSASHA2562020CA1-1.crt.pem — текст
...
-----НАЧАТЬ СЕРТИФИКАТ-----
MIIEvjCCA6agAwIBAgIQBtjZBNVYQ0b2ii+nVCJ+xDANBgkqhkiG9w0BAQsFADBh
...
A7sKPPcw7+uvTPyLNhBzPvOk
-----КОНЕЦ СЕРТИФИКАТА-----
Я добавил это к сертификату моей организации в /srv/gitlab/config/ssl/myserver.myorg.org.crt
так что теперь у него сначала сертификат организации, а затем сертификат Digicert.
-----НАЧАТЬ СЕРТИФИКАТ-----
... сертификат нашей организации ...
-----КОНЕЦ СЕРТИФИКАТА-----
-----НАЧАТЬ СЕРТИФИКАТ-----
... Digicert сертификат, который я только что скачал
-----КОНЕЦ СЕРТИФИКАТА-----
Это шаг, в котором я меньше всего уверен. Я основываюсь на Инструкции GitLab:
Убедитесь, что вы используете полную цепочку сертификатов, чтобы предотвратить ошибки SSL при подключении клиентов. Полный порядок цепочки сертификатов должен состоять из сертификата сервера, за которым следуют все промежуточные сертификаты, а корневой ЦС — в последнюю очередь.
Означает ли это просто склеивание двух сертификатов в одном файле?
Во всяком случае, я запустил переконфигурировать
команда и снова проверено:
sudo docker exec -it gitlab1 bash -c "gitlab-ctl перенастроить"
...
эхо | gnutls-cli -p1443 myserver.myorg.org
Я все еще получаю те же ошибки, в том числе «Получил список сертификатов из 1 сертификата». Это заставляет меня думать, что я неправильно добавил сертификат Digicert в цепочку. Я также попытался поставить сертификат Digicert перед сертификатом нашей организации.
Просто чтобы убедиться, что сертификаты действительны, я последовал эта почта. openssl s_server
и openssl s_client
отлично работали вместе, поэтому я думаю, что проблема в моей конфигурации GitLab.