Общее описание
Для обеспечения безопасного взаимодействия между администратором и системой NAICE реализована защита пользовательских интерфейсов: lemmus, gavia и larus. HTTP-трафик полностью зашифрован с использованием протокола TLS, что предотвращает перехват данных и несанкционированный доступ.
- Gavia REST API Gateway - внешнее API для управления сущностями;
- Lemmus, Authorization Server - сервер авторизации для администраторов;
- Larus, WEB GUI для администратора.
Использование самоподписанного сертификата
Во время установки сервисов NAICE для пользовательских интерфейсов lemmus, gavia и larus автоматически выполняется генерация самоподписанного сертификата. то позволяет обеспечить защищённое взаимодействие через HTTPS на основе параметров, указанных в конфигурации. Подробнее про установку сервисов NAICE здесь.
Генерация самоподписанного сертификата
Для создания самоподписанного сертификата используется плейбук 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.
- Сертификат должен быть в формате 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 | Имя домена указанное в сертификате |
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-адреса нод.
Дополнительную информацию о настройке резервирования можно найти здесь.
Сертификат сервера всегда сохраняется под именем server.crt
, приватный ключ от сертификата сервера - под именем server.key.
При копировании или генерации сертификатов файлы будут записаны с этими именами.
Замена на собственный сертификат
Прежде чем производить замену сертификата убедитесь, что значение переменных server_domain, 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 по параметрам SSL сертификатов
Посмотреть метрики / получить параметры nginx можно командой:
echo | openssl s_client -showcerts -connect <IP-адрес или доменное имя>:443 2>&1 | openssl x509 -noout -dates
Nginx реализует метод, возвращающий информацию о SSL-сертификате в виде JSON.
Метод возвращает следующую информацию о сертификате: кем выдан, дата начала действия, дата окончания действия.
Пример вывода:
notBefore=Oct 17 10:18:25 2024 GMT notAfter=Oct 17 10:18:25 2026 GMT
Получение метрик GAVIA и LEMMUS по параметрам SSL сертификатов
По ссылке actuator/info
Ссылка для получения полной информации о сертификате:
https://<IP-адрес или доменное имя хоста для NAICE>:<8083 или 8080>/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>:<8083 или 8080>/actuator/prometheus