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

Для обеспечения безопасного взаимодействия между администратором и системой NAICE реализована защита пользовательских интерфейсов: lemmus, gavialarus, castor и sterna. HTTP-трафик полностью зашифрован с использованием протокола TLS, что предотвращает перехват данных и несанкционированный доступ. 

При этом генерируется различные сертификаты для двух групп сервисов:

  1. Административные сервисы:
    • Gavia REST API Gateway - внешнее API для управления сущностями;
    • Lemmus, Authorization Server - сервер авторизации для администраторов;
    • Larus - WEB GUI для администратора;
  2. Портальные сервисы:
    • 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_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 через OVA-образ замена выполняется по инструкции v1.0_3.3.6 Замена портальных/WEB сертификатов.

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

Сертификат должен соответствовать всем нижеуказанным требованиям для обеспечения корректной работы с сервисом 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Имя домена, указанное в сертификате.
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 при замене сертификата необходимо выполнить следующие действия:

  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 и 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
Пример полной информации о сертификате в формате 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>:<8080 (gavia) или 8083 (lemmus) или 8095 (castor)>/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

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

  • Нет меток