В ELMA365 при аутентификации пользователей применяются JWT‑токены (JSON Web Token). Они автоматически выдаются сотрудникам после успешного ввода логина и пароля и используются для их авторизации при обращении к системе.
Для проверки актуальности выданных токенов применяются TLS‑сертификат и ключ. Они генерируются автоматически при установке системы. Для повышения безопасности рекомендуется регулярно обновлять эти ключи — не реже одного раза в год.
Чтобы минимизировать влияния этого процесса на работу пользователей, в ELMA365 можно настроить плавный переход на обновлённые ключи. Для этого нужно:
- Создать новые TLS‑сертификат и ключ для проверки JWT‑токена пользователя и сохранить их в секретах сервиса vahter.
- Определить дату удаления старого TLS‑сертификата и ключа для JWT‑токена.
- Пока старый TLS‑сертификат и ключ остаются активными, заверенные ими JWT‑токены обновятся автоматически, когда пользователь совершит какое‑либо действие в системе.
- Если в процессе смены ключей пользователь не работает в системе, при следующем входе ему нужно повторно ввести логин и пароль, чтобы получить JWT‑токен, проверенный новым ключом.
Настройка обновления TLS‑сертификата и ключа для JWT‑токенов отличается в зависимости от способа установки системы:
- установка в Kubernetes — параметры задаются в файле
values-elma365.yaml; - установка в Kubernetes‑in‑Docker (KinD) — используются команды в интерфейсе Docker.
Обновление ключей JWT‑токенов для ELMA365 в Kubernetes
Для вариантов установки ELMA365 On‑Premises Standard Kubernetes и ELMA365 On‑Premises Enterprise выполните шаги:
- Получите TLS‑сертификат и ключ одним из способов:
- Используйте готовый TLS-сертификат и ключ.
- Сформируйте их при помощи команд:
- TLS‑сертификат:
openssl req -newkey rsa:4096 -nodes -keyout cryptedjwtTls.key -x509 -sha256 -days 365 -subj "/C=RU/O=ELMA365/CN=MYDOMAIN.COM" -addext "subjectAltName = DNS:MYDOMAIN.COM" -out jwtTls.crt
- ключ:
openssl rsa -in cryptedjwtTls.key -traditional -out jwtTls.key
Где:
-days 365— срок действия TLS-сертификата в днях;MYDOMAIN.COM— домен компании;jwtTls.crt— имя файла TLS‑сертификата;jwtTls.key— имя файла ключа.
- Откройте файл
values-elma365.yamlи в блоке Настройка микросервиса vahter включите параметрrenewToken, установив значениеtrue:
vahter:
secrets:
renewToken:
enabled: true
- Настройте параметры обновления TLS‑сертификата и ключа для JWT‑токенов:
vahter:
secrets:
renewToken:
enabled: true
schedule: "0 * * * *"
oldTokenExpiry: "2025-05-14"
certNew: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
keyNew: |
-----BEGIN RSA PRIVATE KEY-----
...
-----END RSA PRIVATE KEY-----
Где:
schedule— установите расписание, по которому будут выполняться автоматический запуск cronjob и замена старых ключей. Для примера указан запуск каждый час, каждый день.
cronjob — это инструмент в Kubernetes, который позволяет задать расписание повторяющейся операции. Подробнее о правилах настройки cronjob читайте на официальном сайте Kubernetes;oldTokenExpiry— дата, когда пользователи со старыми JWT‑токенами больше не смогут войти в систему. Для примера указано:2025-05-14;certNew— укажите TLS-сертификат, скопировав содержимое файлаjwtTls.crt, который вы получили на первом шаге;keyNew— укажите ключ, скопировав содержимое файлаjwtTls.key, который вы получили на первом шаге.
- Выполните обновление сервисов системы при помощи команды:
helm upgrade elma365 elma365/elma365 values-elma365.yaml
После обновления новый TLS‑сертификат и ключ запишутся в секреты сервиса vahter. Когда наступит дата, указанная в параметре oldTokenExpiry, старый TLS‑сертификат и ключ для JWT токенов удалятся.
- Для повышения безопасности удалите введённые на шаге три данные TLS‑сертификата и ключа из файла конфигурации
values-elma365.yamlлибо ограничьте доступ к этому файлу.
Обновление ключей JWT-токенов для ELMA365 в KinD
Для варианта установки ELMA365 On-Premises Standard в KinD выполните шаги:
- Чтобы настроить обновление ключей JWT‑токенов, перейдите в docker‑контейнер приложения ELMA365 с помощью команды:
docker exec -it elma365 /bin/bash
Где elma365 — имя docker-контейнера.
- Получите TLS‑сертификат и ключ одним из способов:
- Используйте готовый TLS‑сертификат и ключ.
- Сформируйте в docker‑контейнере TLS‑сертификат и ключ с помощью команды:
openssl genrsa -out jwtTls.key 4096 && openssl req -new -key jwtTls.key -nodes -x509 -sha256 -days 365 -subj "/C=RU/O=ELMA365/CN=MYDOMAIN.COM" -addext "subjectAltName = DNS:MYDOMAIN.COM" -out jwtTls.crt
Где:
-days 365— срок действия TLS-сертификата в днях;MYDOMAIN.COM— домен компании;jwtTls.crt— имя файла TLS-сертификата;jwtTls.key— имя файла ключа.
- Для процесса замены JWT‑токенов, который не потребует от пользователей повторного ввода логина и пароля, добавьте новые TLS‑сертификат и ключ в секреты сервиса vahter с помощью команд:
BASE64_KEY=$(cat jwtTls.key | base64 -w 0) && kubectl patch secret vahter-jwt -n <namespace> --type='json' -p="[{\"op\": \"add\", \"path\": \"/data/tls_new.key\", \"value\": \"$BASE64_KEY\"}]"
BASE64_CERT=$(cat jwtTls.crt | base64 -w 0) && kubectl patch secret vahter-jwt -n <namespace> --type='json' -p="[{\"op\": \"add\", \"path\": \"/data/tls_new.crt\", \"value\": \"$BASE64_CERT\"}]"
Где:
namespace— пространство имён, в котором установлено приложение ELMA365;jwtTls.crt— имя файла TLS-сертификата;jwtTls.key— имя файла ключа.
- Чтобы обновить данные о ключах, перезапустите под vahter с помощью команды:
kubectl rollout restart deployment vahter -n <namespace>
Где namespace — пространство имён, в котором установлено приложение ELMA365.
- В запланированную дата окончания перехода убедитесь, что сгенерированные на втором шаге TLS‑сертификат и ключ находятся в docker‑контейнере, и замените старые TLS‑сертификат и ключ на новые следующими командами:
BASE64_KEY=$(cat jwtTls.key | base64 -w 0) && kubectl patch secret vahter-jwt -n <namespace> --type='json' -p="[{\"op\": \"add\", \"path\": \"/data/tls.key\", \"value\": \"$BASE64_KEY\"}]"
BASE64_CERT=$(cat jwtTls.crt | base64 -w 0) && kubectl patch secret vahter-jwt -n <namespace> --type='json' -p="[{\"op\": \"add\", \"path\": \"/data/tls.crt\", \"value\": \"$BASE64_CERT\"}]"
Где:
namespace— пространство имён, в котором установлено приложение ELMA365;jwtTls.crt— имя файла TLS-сертификата;jwtTls.key— имя файла ключа.
- Удалите секреты промежуточного хранения ключей с помощью команд:
kubectl patch secret vahter-jwt -n <namespace> --type='json' -p='[{"op": "remove", "path": "/data/tls_new.crt"}]'
kubectl patch secret vahter-jwt -n <namespace> --type='json' -p='[{"op": "remove", "path": "/data/tls_new.key"}]'
Где namespace — пространство имён, в котором установлено приложение ELMA365.