Руководство по выпуску SSL-сертификатов
Инструкция по выпуску 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. Подготовка шаблона сертификата в AD CS
- Шаг 2. Генерация приватного ключа и запроса (CSR)
- Шаг 3. Подписание запроса в AD CS и подготовка
server.crt - Шаг 4. Установка сертификатов в Docker (ServiceDesk)
- Шаг 5. Распространение корневого сертификата на доменные ПК через GPO
- Диагностика неполадок
Шаг 1. Подготовка шаблона сертификата в AD CS
По умолчанию стандартный шаблон "Веб-сервер" не разрешает экспорт закрытого ключа. Нам нужно создать шаблон с разрешением на экспорт приватного ключа.
- Зайдите на сервер Центра Сертификации (CA) и запустите оснастку Центр сертификации (
certsrv.msc). - Нажмите правой кнопкой мыши на Шаблоны сертификатов (Certificate Templates) и выберите Управление (Manage).
- Найдите шаблон Веб-сервер (Web Server), нажмите на него правой кнопкой мыши и выберите Скопировать шаблон (Duplicate Template).
- Задайте настройки:
- Общие (General): Имя шаблона —
ServiceDeskWebServer(Имя на латинице без пробелов). - Обработка запроса (Request Handling): Отметьте флаг Разрешить экспорт закрытого ключа (Allow private key to be exported).
- Безопасность (Security): Убедитесь, что у администраторов или серверов есть права Чтение (Read) и Заявка (Enroll).
- Субъект (Subject Name): Должен быть выбран вариант Определяется в запросе (Supply in the request).
- Общие (General): Имя шаблона —
- Сохраните шаблон и закройте окно управления.
- В консоли
certsrv.mscнажмите правой кнопкой мыши на Шаблоны сертификатов -> Создать -> Выдаваемый шаблон сертификата (New -> Certificate Template to Issue). - Выберите
ServiceDeskWebServerи нажмите ОК.
Шаг 2. Генерация приватного ключа и запроса (CSR)
Для безопасности приватный ключ server.key генерируется локально и никогда не передается в AD CS. Будем генерировать запрос с использованием OpenSSL.
Создайте файл конфигурации запроса san.cnf. Замените значения CN и альтернативные имена ALT_NAMES на ваши доменные имена ServiceDesk:
[ 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:
openssl req -new -out server.csr -newkey rsa:2048 -nodes -keyout server.key -config san.cnfСохраните файл server.key — это секретный приватный ключ вашего сервера.
Шаг 3. Подписание запроса в AD CS и подготовка server.crt
- Скопируйте содержимое файла
server.csr(текст между-----BEGIN CERTIFICATE REQUEST-----и-----END CERTIFICATE REQUEST-----). - Перейдите в веб-интерфейс AD CS:
https://<CA-Server>/certsrv/-> Request a certificate -> advanced certificate request. - Вставьте скопированный CSR-код в поле Saved Request.
- В выпадающем меню Certificate Template выберите созданный ранее шаблон
ServiceDeskWebServer. - Нажмите Submit.
- Скачайте выпущенный сертификат в кодировке Base 64 encoded как
server_cert.cer. - Также скачайте корневой сертификат вашего Центра Сертификации (
RootCA.cer) в кодировке Base64.
Сборка цепочки сертификатов (Certificate Bundle)
Для корректной проверки цепочки сертификатов веб-сервером Nginx необходимо объединить ваш сертификат server_cert.cer и корневой сертификат RootCA.cer в один файл.
Файл сертификата сервера должен находиться на первой строчке, а корневой — после него:
cat server_cert.cer RootCA.cer > server.crtПолученный файл server.crt теперь готов к использованию в Nginx.
Шаг 4. Установка сертификатов в Docker (ServiceDesk)
Поскольку папка с сертификатами монтируется через общий именованный Docker-том ssl_certs, мы можем загрузить файлы сертификатов прямо в запущенный контейнер.
Выполните следующие команды на хост-сервере, где запущен ServiceDesk (в папке с проектом):
# Копируем сертификат и ключ в контейнер бэкенда в папку /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Что произойдет после выполнения команд:
- Файлы запишутся в общий Docker-том
ssl_certs. - Изменения мгновенно отобразятся в папке
/etc/nginx/ssl/контейнераfrontend(servicedesk_ui_prod). - Демон
inotifywaitво фронтенд-контейнере среагирует на появление файлов, вызоветconfigure_nginx(который применит nginx.https.conf) и выполнит командуnginx -s reload. - Веб-интерфейс ServiceDesk автоматически перейдет на работу по протоколу HTTPS.
Шаг 5. Распространение корневого сертификата на доменные ПК через GPO
Для автоматического доверия к вашему ServiceDesk на всех компьютерах домена, экспортируйте корневой сертификат CA (RootCA.cer) и импортируйте его через групповые политики.
- На сервере CA экспортируйте корневой сертификат:
CMDcertutil -ca.cert C:\RootCA.cer - На контроллере домена откройте консоль управления групповыми политиками (
gpmc.msc). - Создайте новый объект групповой политики:
GPO_ServiceDesk_SSL_Trust. - Нажмите правой кнопкой мыши по созданному GPO -> Изменить (Edit).
- Перейдите по пути:
Конфигурация компьютера -> Политики -> Конфигурация Windows -> Параметры безопасности -> Политики открытого ключа -> Доверенные корневые центры сертификации
(Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Public Key Policies -> Trusted Root Certification Authorities) - Нажмите правой кнопкой мыши на пустом месте справа и выберите Импорт (Import).
- Укажите путь к файлу
RootCA.cerи завершите импорт. - Привяжите созданный GPO к домену или OU с компьютерами пользователей.
- Для применения политики на клиентских машинах выполните команду:
CMDgpupdate /force
Диагностика неполадок
Если после настройки браузер всё равно пишет "Незащищенное соединение":
- Проверьте логи Nginx:
Выполните команду:
BASHdocker logs servicedesk_ui_prod
В логах должно быть сообщение: SSL certificates found. Enabling HTTPS mode... и Nginx reloaded successfully..
- Проверьте наличие файлов в томе через контейнер:
BASHdocker exec -it servicedesk_ui_prod ls -l /etc/nginx/ssl
Файлы server.crt и server.key должны присутствовать и иметь размер больше 0 байт.
- Проверьте соответствие адреса и SAN:
Если вы открываете сайт по адресуhttps://sd-server/, а в сертификате (в SAN) прописан толькоservicedesk.company.local, браузер выдаст ошибку несоответствия имени.