База знанийSC DeskРуководство по выпуску SSL-сертификатов

Руководство по выпуску SSL-сертификатов

НастройкаОбновлено: 15.07.2026

Инструкция по выпуску SSL-сертификатов через AD CS и настройке для ServiceDesk

Этот документ содержит пошаговую инструкцию по созданию доменных SSL-сертификатов с использованием корпоративного Центра сертификации Active Directory (AD CS) и их интеграции в Docker-окружение нашего ServiceDesk.


Архитектура SSL в проекте ServiceDesk

В нашем проекте веб-интерфейс развертывается в Docker-контейнере frontend на базе Nginx.

  • Настройки HTTPS и проксирования запросов к бэкенду описаны в файле nginx.https.conf.
  • При запуске контейнера скрипт docker-entrypoint.sh проверяет наличие двух файлов в директории /etc/nginx/ssl/:
    • server.crt — файл SSL-сертификата (включая цепочку).
    • server.key — приватный ключ.
  • Если эти файлы найдены, Nginx автоматически включает HTTPS (порт 443) и настраивает редирект с HTTP (порт 80) на HTTPS.
  • Скрипт использует inotifywait, поэтому при любом обновлении файлов сертификатов в этой папке Nginx автоматически перезагрузит конфигурацию без остановки контейнеров.
  • Папка с сертификатами является общим Docker-томом (ssl_certs), примонтированным как /etc/nginx/ssl во frontend и как /app/certs в backend.


Содержание

  1. Шаг 1. Подготовка шаблона сертификата в AD CS
  2. Шаг 2. Генерация приватного ключа и запроса (CSR)
  3. Шаг 3. Подписание запроса в AD CS и подготовка server.crt
  4. Шаг 4. Установка сертификатов в Docker (ServiceDesk)
  5. Шаг 5. Распространение корневого сертификата на доменные ПК через GPO
  6. Диагностика неполадок

Шаг 1. Подготовка шаблона сертификата в AD CS

По умолчанию стандартный шаблон "Веб-сервер" не разрешает экспорт закрытого ключа. Нам нужно создать шаблон с разрешением на экспорт приватного ключа.

  1. Зайдите на сервер Центра Сертификации (CA) и запустите оснастку Центр сертификации (certsrv.msc).
  2. Нажмите правой кнопкой мыши на Шаблоны сертификатов (Certificate Templates) и выберите Управление (Manage).
  3. Найдите шаблон Веб-сервер (Web Server), нажмите на него правой кнопкой мыши и выберите Скопировать шаблон (Duplicate Template).
  4. Задайте настройки:
    • Общие (General): Имя шаблона — ServiceDeskWebServer (Имя на латинице без пробелов).
    • Обработка запроса (Request Handling): Отметьте флаг Разрешить экспорт закрытого ключа (Allow private key to be exported).
    • Безопасность (Security): Убедитесь, что у администраторов или серверов есть права Чтение (Read) и Заявка (Enroll).
    • Субъект (Subject Name): Должен быть выбран вариант Определяется в запросе (Supply in the request).
  5. Сохраните шаблон и закройте окно управления.
  6. В консоли certsrv.msc нажмите правой кнопкой мыши на Шаблоны сертификатов -> Создать -> Выдаваемый шаблон сертификата (New -> Certificate Template to Issue).
  7. Выберите ServiceDeskWebServer и нажмите ОК.


Шаг 2. Генерация приватного ключа и запроса (CSR)

Для безопасности приватный ключ server.key генерируется локально и никогда не передается в AD CS. Будем генерировать запрос с использованием OpenSSL.

Создайте файл конфигурации запроса san.cnf. Замените значения CN и альтернативные имена ALT_NAMES на ваши доменные имена ServiceDesk:

INI
[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
C  = RU
O  = MyCompany
CN = servicedesk.company.local

[ req_ext ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = servicedesk
DNS.2 = servicedesk.company.local
IP.1  = 192.168.1.50
Важно! Современные браузеры (Chrome, Edge, Яндекс) требуют обязательного указания доменных имен в поле Subject Alternative Name (SAN) (блок [ alt_names ]). Без этого браузеры будут выдавать ошибку NET::ERR_CERT_COMMON_NAME_INVALID даже при доверенном корневом сертификате.

Выполните команду генерации приватного ключа server.key и запроса server.csr:

BASH
openssl req -new -out server.csr -newkey rsa:2048 -nodes -keyout server.key -config san.cnf

Сохраните файл server.key — это секретный приватный ключ вашего сервера.


Шаг 3. Подписание запроса в AD CS и подготовка server.crt

  1. Скопируйте содержимое файла server.csr (текст между -----BEGIN CERTIFICATE REQUEST----- и -----END CERTIFICATE REQUEST-----).
  2. Перейдите в веб-интерфейс AD CS: https://<CA-Server>/certsrv/ -> Request a certificate -> advanced certificate request.
  3. Вставьте скопированный CSR-код в поле Saved Request.
  4. В выпадающем меню Certificate Template выберите созданный ранее шаблон ServiceDeskWebServer.
  5. Нажмите Submit.
  6. Скачайте выпущенный сертификат в кодировке Base 64 encoded как server_cert.cer.
  7. Также скачайте корневой сертификат вашего Центра Сертификации (RootCA.cer) в кодировке Base64.

Сборка цепочки сертификатов (Certificate Bundle)

Для корректной проверки цепочки сертификатов веб-сервером Nginx необходимо объединить ваш сертификат server_cert.cer и корневой сертификат RootCA.cer в один файл.
Файл сертификата сервера должен находиться на первой строчке, а корневой — после него:

BASH
cat server_cert.cer RootCA.cer > server.crt

Полученный файл server.crt теперь готов к использованию в Nginx.


Шаг 4. Установка сертификатов в Docker (ServiceDesk)

Поскольку папка с сертификатами монтируется через общий именованный Docker-том ssl_certs, мы можем загрузить файлы сертификатов прямо в запущенный контейнер.

Выполните следующие команды на хост-сервере, где запущен ServiceDesk (в папке с проектом):

BASH
# Копируем сертификат и ключ в контейнер бэкенда в папку /app/certs
docker cp server.crt servicedesk_api_prod:/app/certs/server.crt
docker cp server.key servicedesk_api_prod:/app/certs/server.key

# Выставляем правильные права внутри контейнера
docker exec -it servicedesk_api_prod chmod 644 /app/certs/server.crt
docker exec -it servicedesk_api_prod chmod 600 /app/certs/server.key

Что произойдет после выполнения команд:

  1. Файлы запишутся в общий Docker-том ssl_certs.
  2. Изменения мгновенно отобразятся в папке /etc/nginx/ssl/ контейнера frontend (servicedesk_ui_prod).
  3. Демон inotifywait во фронтенд-контейнере среагирует на появление файлов, вызовет configure_nginx (который применит nginx.https.conf) и выполнит команду nginx -s reload.
  4. Веб-интерфейс ServiceDesk автоматически перейдет на работу по протоколу HTTPS.

Шаг 5. Распространение корневого сертификата на доменные ПК через GPO

Для автоматического доверия к вашему ServiceDesk на всех компьютерах домена, экспортируйте корневой сертификат CA (RootCA.cer) и импортируйте его через групповые политики.

  1. На сервере CA экспортируйте корневой сертификат:
    CMD
    certutil -ca.cert C:\RootCA.cer
  2. На контроллере домена откройте консоль управления групповыми политиками (gpmc.msc).
  3. Создайте новый объект групповой политики: GPO_ServiceDesk_SSL_Trust.
  4. Нажмите правой кнопкой мыши по созданному GPO -> Изменить (Edit).
  5. Перейдите по пути:
    Конфигурация компьютера -> Политики -> Конфигурация Windows -> Параметры безопасности -> Политики открытого ключа -> Доверенные корневые центры сертификации
    (Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Public Key Policies -> Trusted Root Certification Authorities)
  6. Нажмите правой кнопкой мыши на пустом месте справа и выберите Импорт (Import).
  7. Укажите путь к файлу RootCA.cer и завершите импорт.
  8. Привяжите созданный GPO к домену или OU с компьютерами пользователей.
  9. Для применения политики на клиентских машинах выполните команду:
    CMD
    gpupdate /force


Диагностика неполадок

Если после настройки браузер всё равно пишет "Незащищенное соединение":

  1. Проверьте логи Nginx:
    Выполните команду:
    BASH
    docker logs servicedesk_ui_prod

В логах должно быть сообщение: SSL certificates found. Enabling HTTPS mode... и Nginx reloaded successfully..

  1. Проверьте наличие файлов в томе через контейнер:
    BASH
    docker exec -it servicedesk_ui_prod ls -l /etc/nginx/ssl

Файлы server.crt и server.key должны присутствовать и иметь размер больше 0 байт.

  1. Проверьте соответствие адреса и SAN:
    Если вы открываете сайт по адресу https://sd-server/, а в сертификате (в SAN) прописан только servicedesk.company.local, браузер выдаст ошибку несоответствия имени.