Общее описание
Для обеспечения безопасного взаимодействия между администратором и системой NAICE реализована защита пользовательских интерфейсов: lemmus, gavia, larus, castor и sterna. HTTP-трафик полностью зашифрован с использованием протокола TLS, что предотвращает перехват данных и несанкционированный доступ.
При этом генерируется различные сертификаты для двух групп сервисов:
- Административные сервисы:
- Gavia REST API Gateway - внешнее API для управления сущностями;
- Lemmus, Authorization Server - сервер авторизации для администраторов;
- Larus - WEB GUI для администратора;
- Портальные сервисы:
- Castor - API управления настройкой порталов и портальной авторизацией;
- Sterna - WEB GUI портала.
Использование самоподписанного сертификата
Во время установки сервисов NAICE для пользовательских интерфейсов автоматически выполняется генерация двух самоподписанных сертификата, что позволяет обеспечить защищённое взаимодействие через HTTPS на основе параметров, указанных в конфигурации. Подробнее про установку сервисов NAICE здесь.
Генерация самоподписанного сертификата
При установке NAICE через OVA-образ существует возможность сгенерировать самоподписанный сертификат по инструкции v1.0_3.3.6 Замена портальных/WEB сертификатов.
Для создания самоподписанного сертификата используется плейбук https-generate-self-signed-cert.yml.
Результатом выполнения плейбука становятся следующие файлы:
server.crt - сертификат сервера;
- server.key - приватный ключ сервера, который хранится в незашифрованном виде и может использоваться без пароля.
Файлы сертификата всегда располагаются в директории установки NAICE по пути /etc/docker-naice/https/
Для перегенерации самоподписанного сертификата используется следующий плейбук:
ansible-playbook --ask-become-pass https-generate-self-signed-cert.yml -e "cert_update=true"
Параметры самоподписанного сертификата
При установке системы сертификат использует параметры указанные в group_vars/all.yml. При необходимости значения этих переменных могут быть переопределены.
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
| cert_update | false | Обновлять или не обновлять сертификат / нужно ли замещать файлы сертификата (false или true) |
| server_name | naice.eltex.loc | Имя домена, которое будет использоваться для генерации самоподписанного сертификата |
Самоподписанный сертификат генерируется с установленным сроком действия в 100 лет (36500 дней).
В случае переопределения server_name на сервере NAICE требуется обеспечить резолв доменного имени, которое будет выдано NAICE.
Для отображения подробной информации о сертификате выполните следующую команду из директории /etc/docker-naice/https/
sudo openssl x509 -in server.crt -text -noout
Использование собственного сертификата
При наличии собственного заверенного сертификата предусмотрена возможность заменить самоподписанный сертификат на собственный.
При установке NAICE через OVA-образ замена выполняется по инструкции v1.0_3.3.6 Замена портальных/WEB сертификатов.
Требования к пользовательскому сертификату
Сертификат должен соответствовать всем нижеуказанным требованиям для обеспечения корректной работы с сервисом NAICE.
- Сертификат должен быть в формате PEM или CRT.
- Использование сертификатов в формате DER или контейнеров PKCS не поддерживается.
- Сертификат должен поддерживать только шифрование AES.
- Сертификат и приватный ключ должны быть отдельными файлами.
- В пароле не допускается использование символов: $, ', ", `, скобок и пробелов.
- Сертификат должен содержать атрибуты:
- Subject: CN;
- X509v3 Key Usage: Digital Signature, Key Encipherment (обязательно critical);
- X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication;
- X509v3 Subject Alternative Name: должен включать DNS-имя, соответствующее имени сервиса.
Предварительная подготовка перед заменой сертификата
Замена самоподписанного сертификата на собственный заверенный сертификат становится возможной после завершения установки NAC-системы NAICE на целевом хосте.
Для замены сертификата на собственный необходимо указать соответствующие значения переменных в файле group_vars/all.yml.
Файлы сертификата должны быть размещены на хосте, с которого осуществляется запуск плейбука.
Описание параметров, которые необходимо настроить перед заменой сертификата:
| Переменная | Описание |
|---|---|
| server_domain | Имя домена, указанное в сертификате. |
| cert_name | Какой сертификат требуется заменить: server или portal. |
| key_password | Пароль к файлу приватного ключа сервера, который будет перезаписан в .env. Может иметь пустое значение. |
| cert_path_src | Путь до файла собственного заверенного сертификата сервера. По умолчанию - /etc/ssl/certs/server.crt |
| key_path_src | Путь до файла приватного ключа от сертификата сервера. По умолчанию - /etc/ssl/private/server.key |
На сервере NAICE требуется обеспечить резолв доменного имени, которое будет выдано NAICE.
При использовании NAICE с резервированием доменное имя должно резолвиться только в VIP-адрес NAICE.
Убедитесь, что в настройках DNS и файлах хостов отсутствуют записи, указывающие на индивидуальные IP-адреса нод.
Дополнительную информацию о настройке резервирования можно найти здесь.
Сертификаты и приватные ключи всегда сохраняются под указанным в переменной cert_name имени (server.crt / server.key и portal.crt / portal.key). При копировании или генерации сертификатов файлы будут записаны с этими именами.
Замена на собственный сертификат
Прежде чем производить замену сертификата, убедитесь, что значение переменных server_domain, cert_name, cert_path_src, key_path_src, key_password являются валидными и при необходимости замените их значения в ansible/group_vars/all.yml.
Если приватный ключ не защищён паролем, значение переменной key_password следует оставить пустым.
Для замены сертификата используется следующий плейбук:
ansible-playbook --ask-become-pass https-replacement-cert.yml
Во время выполнения плейбука для замены сертификата потребуется дважды подтвердить согласие на перезапуск системы NAICE. Это подтверждение необходимо для продолжения операции и замены сертификата.
- В случае отказа от перезапуска плейбук завершится, и процесс замены сертификата не будет выполнен.
- При подтверждении перезапуска будет произведен перезапуск системы NAICE, что может привести к кратковременной недоступности системы.
Замена сертификата без интерактивного подтверждения запуска:
ansible-playbook --ask-become-pass https-replacement-cert.yml -e "confirm_restart=yes"
Важно учитывать, что перезапуск может повлиять на текущую работу системы, поэтому рекомендуется планировать его на время с минимальной нагрузкой или в период, когда минимально возможно влияние на работу пользователей.
После завершения работы плейбука файлы будут скопированы в директорию указанную в crt_dir, по умолчанию - /etc/docker-naice/https/.
Инструкция по замене сертификата для зарезервированной установки NAICE
Для поддержания работоспособности NAICE при замене сертификата необходимо выполнить следующие действия:
- Определить, какая из нод с NAICE является
master_host, а какаяbackup_host Выполнить плейбук
https-replacement-cert.ymlнаmaster_hostПеред запуском плейбука внимательно ознакомьтесь с разделами Предварительная подготовка перед заменой сертификата и замена на собственный сертификат. `
Проверить доступность NAICE по домену, указанному в сертификате.
Выполнить плейбук
https-replacement-cert.ymlнаbackup_hostПеред запуском плейбука внимательно ознакомьтесь с разделами Предварительная подготовка перед заменой сертификата и замена на собственный сертификат.
Повторно проверить доступность NAICE по домену, указанному в сертификате.
При использовании NAICE с резервированием доменное имя должно резолвиться только в VIP-адрес NAICE.
- Убедитесь, что в настройках DNS и файлах хостов отсутствуют записи, указывающие на индивидуальные IP-адреса нод.
Дополнительную информацию про роли в резервировании можно найти здесь.
Просмотр параметров сертификата
Получение метрик LARUS и STERNA по параметрам SSL сертификатов
Посмотреть метрики / получить параметры nginx можно командой:
echo | openssl s_client -showcerts -connect <IP-адрес или доменное имя>:<443 (larus) или 8443 (sterna)> 2>&1 | openssl x509 -noout -dates
Nginx реализует метод, возвращающий информацию о SSL-сертификате в виде JSON.
Метод возвращает следующую информацию о сертификате: кем выдан, дата начала действия, дата окончания действия.
Пример вывода:
notBefore=Aug 4 08:14:38 2025 GMT notAfter=Jul 11 08:14:38 2125 GMT
Получение метрик GAVIA, LEMMUS и CASTOR по параметрам SSL сертификатов
По ссылке actuator/info
Ссылка для получения полной информации о сертификате:
https://<IP-адрес или доменное имя хоста для NAICE>:<8080 (gavia) или 8083 (lemmus) или 8095 (castor)>/actuator/info
{
"certificationInfo": "[\n[\n Version: V3\n Subject: CN=naice.eltex.loc\n Signature Algorithm: SHA256withRSA, OID = 1.2.840.113549.1.1.11\n\n Key: Sun RSA public key, 2048 bits\n params: null\n modulus: 19244592885475727591973145804052002034715276745688810459592682276624574339289714069390648805663844950493082500671680699974612649148885698147031400812366597436819722090519472978779492176874177689443467318254708203814163695096868570728315644268961799172054505486971282328942255036955199791178556482256075226107529873779029072878837743602610516019748566847538857795089954010308667413953659603937496147436360006786890382206576197887488769197674705025298289751739634932569724858451487383295432993837619972538208504938563542405133655077876461948127428572892216476675974892639568474369206197573001576242096576121618430483647\n public exponent: 65537\n Validity: [From: Thu Dec 05 10:23:44 GMT+07:00 2024,\n To: Sat Nov 11 10:23:44 GMT+07:00 2124]\n Issuer: CN=naice.eltex.loc\n SerialNumber: 4b:ba:13:9a:a4:a2:a8:a2:25:95:31:9d:a7:7a:d4:f3:ee:28:7e:ac\n\nCertificate Extensions: 4\n[1]: ObjectId: 2.5.29.37 Criticality=false\nExtendedKeyUsages [\n serverAuth\n clientAuth\n]\n\n[2]: ObjectId: 2.5.29.15 Criticality=true\nKeyUsage [\n DigitalSignature\n Non_repudiation\n Key_Encipherment\n Key_Agreement\n Key_CertSign\n]\n\n[3]: ObjectId: 2.5.29.17 Criticality=false\nSubjectAlternativeName [\n DNSName: naice.test.loc\n]\n\n[4]: ObjectId: 2.5.29.14 Criticality=false\nSubjectKeyIdentifier [\nKeyIdentifier [\n0000: 22 71 29 0D DD 79 55 15 7B 08 99 FF B7 86 1E 60 \"q)..yU........`\n0010: 88 E7 0B 7B ....\n]\n]\n\n]\n Algorithm: [SHA256withRSA]\n Signature:\n0000: 19 79 88 53 3B 6C 9E 0E 6E 55 3C C9 BA A0 A5 62 .y.S;l..nU\u003C....b\n0010: FA 13 65 6F C0 D6 A3 CC C8 19 42 02 08 B7 E2 7B ..eo......B.....\n0020: 9B 86 7B 80 6E BD 28 27 F4 2B 75 72 B6 A1 1B 84 ....n.('.+ur....\n0030: 5D 24 66 ED 07 18 53 53 CC 4C C3 D5 0A A6 4C 30 ]$f...SS.L....L0\n0040: F1 D4 C4 D1 0C A8 26 56 B6 D9 4C 9F B4 6E 46 54 ......&V..L..nFT\n0050: F9 CA 06 70 7D 28 F3 26 B7 8B 6B C1 55 74 6A 9A ...p.(.&..k.Utj.\n0060: 8C F7 3D 76 9B C7 F1 CF C0 2E A4 00 E3 3F CF B3 ..=v.........?..\n0070: 3B F8 26 B7 64 F0 70 96 59 99 6C D5 83 41 31 4B ;.&.d.p.Y.l..A1K\n0080: A6 65 B1 C1 09 86 95 AD 5A 7B 85 B1 2B 21 76 2B .e......Z...+!v+\n0090: 63 0D CB 2E FD 07 22 05 0A AE A7 4B F3 D2 9A 0C c.....\"....K....\n00A0: 40 12 4C DC 58 3E 4D 00 5D 92 52 7F 7C A1 5B F2 @.L.X\u003EM.].R...[.\n00B0: A8 B8 90 A9 52 7B 28 BF 5F 72 1A 70 0F FC 3C E2 ....R.(._r.p..\u003C.\n00C0: 40 88 96 4C 22 0D 2B 89 62 61 C8 3C 16 C8 36 ED @..L\".+.ba.\u003C..6.\n00D0: 01 00 00 53 33 26 B2 72 5C D0 CC 58 0C A7 D8 B0 ...S3&.r\\..X....\n00E0: 99 12 CC 16 4A 40 49 CA 60 BC 2B 63 4E E7 CB 24 ....J@I.`.+cN..$\n00F0: E4 67 5B B4 15 70 DE 60 86 4A 85 82 9E 9D F7 0B .g[..p.`.J......\n\n]"
}
По ссылке actuator/prometheus
Ссылка для получения информации о сроках действия сертификата:
https://<IP-адрес или доменное имя хоста для NAICE>:<8080 (gavia) или 8083 (lemmus) или 8095 (castor)>/actuator/prometheus