​Общее описание

Для обеспечения безопасного взаимодействия между администратором и системой 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_updatefalseОбновлять или не обновлять сертификат / нужно ли замещать файлы сертификата (false или true)
server_namenaice.eltex.locИмя домена, которое будет использоваться для генерации самоподписанного сертификата
  • Самоподписанный сертификат генерируется с установленным сроком действия в 100 лет (36500 дней).

В случае переопределения server_name на сервере NAICE требуется обеспечить резолв доменного имени, которое будет выдано NAICE. 

Для отображения подробной информации о сертификате выполните следующую команду из директории /etc/docker-naice/https/

sudo openssl x509 -in server.crt -text -noout

Использование собственного сертификата

При наличии собственного заверенного сертификата предусмотрена возможность заменить самоподписанный сертификат на собственный. 

Требования к пользовательскому сертификату

Сертификат должен соответствовать всем нижеуказанным требованиям для обеспечения корректной работы с сервисом NAICE.

  1. Сертификат должен быть в формате PEM или CRT.
  2. Использование сертификатов в формате DER или контейнеров PKCS не поддерживается.
  3. Сертификат должен поддерживать только шифрование AES.
  4. Сертификат и приватный ключ должны быть отдельными файлами.
  5. В пароле не допускается использование символов: $, ', ", `, скобок и пробелов.
  6. Сертификат  должен содержать атрибуты:
    1. Subject: CN
    2. X509v3 Key Usage: Digital Signature, Key Encipherment (обязательно critical).
    3. X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication.
    4. 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 при замене сертификата необходимо выполнить следующие действия:

  1. Определить, какая из нод с NAICE является master_host, а какая backup_host
  2. Выполнить плейбук https-replacement-cert.yml на master_host

    Перед запуском плейбука внимательно ознакомьтесь с разделами Предварительная подготовка перед заменой сертификата и замена на собственный сертификат. 

  3. Проверить доступность NAICE по домену, указанному в сертификате.

  4. Выполнить плейбук https-replacement-cert.yml на  backup_host

    Перед запуском плейбука внимательно ознакомьтесь с разделами Предварительная подготовка перед заменой сертификата и замена на собственный сертификат. 

  5. Повторно проверить доступность 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
Пример полной информации о сертификате в формате JSON
{
  "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
# HELP cert_valid_from The start date of the validity period in milliseconds
# TYPE cert_valid_from gauge
cert_valid_from{application="Gavia"} 1.733369024E12
# HELP cert_valid_to The end date of the validity period in milliseconds
# TYPE cert_valid_to gauge
cert_valid_to{application="Gavia"} 4.886969024E12
Полученные метрик cert_valid_from и cert_valid_to соответствуют датам начала и окончания действия сертификата в миллисекундах.

Для проверки дат можно использовать следующие команды в терминале:

          Конвертация значения в целое число:

printf "%9.0f\n" <значение cert_valid_from или значение cert_valid_to>
Пример целого числа после конвертации
1733369024000

          Конвертиртация полученного целого числа в дату:

date -d@<полученное_целое_число>
Пример даты после конвертации
Sat May 23 07:06:40 +07 56781

          В результате будет получена читаемая дата начала действия сертификата.

  • Нет меток