Ключ шифрования — простыми словами
Что это такое: единственный секретный пароль, который принадлежит именно вашей установке TSync и больше никому. TSync использует его, чтобы запирать конфиденциальные учётные данные, которые он хранит за вас.
Почему это важно: это как главный ключ от сейфа внутри вашей системы. Пока этот ключ у вас, TSync может открыть сейф и пользоваться тем, что внутри. Если вы когда-нибудь поменяете ключ, сейф закроется навсегда — а то, что внутри, будет потеряно. Поэтому золотое правило короткое: задайте один раз, сохраните копию, никогда не меняйте.
Что именно он защищает
Ключ шифрует данные подключений и учётные записи, которые нужны TSync для общения с другими сервисами, например:
- пароли для отправки и получения почты (SMTP / IMAP)
- платёжные подключения (вроде Stripe) и их ключи
- ссылки для входа через Google или Microsoft
- другие сторонние логины, которые TSync хранит от вашего имени
Чего он НЕ касается: паролей, под которыми входят ваши сотрудники и клиенты. Они защищены отдельно, односторонним методом, который не может обратить вспять даже сам TSync — а это как раз то, что нужно для паролей входа. Чтобы это работало, вам ничего делать не нужно.
Где он находится
Ключ хранится в одном файле настроек, application/config/app-config.php, в строке, которая выглядит так:
define('APP_ENC_KEY', 'a8K3jD9mP2xQ7vR4nL5wT8sF1bC6yU9z');
Эта длинная мешанина букв и цифр и есть сам ключ.
Три правила, которые стоит запомнить
1. Длина должна быть ровно 32 символа
Не 31 и не 33 — ровно 32. Если длина неверная, TSync не запустится и сообщит вам:
Encryption key length should be 32 characters
Если вы когда-нибудь увидите это сообщение, исправление простое — вернуть ключу длину 32 символа.
2. Используйте только обычные буквы, цифры и простые символы
Заглавные и строчные буквы и цифры — идеальный вариант. Избегайте чего-то экзотического — никаких переносов строк, табуляций или необычных символов — чтобы ключ оставался читаемым везде.
3. Никогда не меняйте его после установки — это самое главное
Вот правило, которое действительно важно. Всё, что TSync запер исходным ключом, можно отпереть только этим же ключом. Поменяйте ключ — и всё это станет нечитаемым: вы разом потеряете сохранённые почтовые пароли, платёжные ключи и подключения Google/Microsoft.
Не переживайте — такое случается, только если ключ меняют намеренно. Обычная работа, обновления и резервные копии его никогда не трогают.
Если ключ когда-нибудь утечёт (например, случайно попадёт в публичный репозиторий с кодом) — тогда, и только тогда, его стоит заменить, понимая, что это означает начать с чистого листа:
- Сгенерируйте новый ключ.
- Заново вручную введите учётные данные каждой интеграции (почтовые пароли, платёжные ключи и т. д.).
- Попросите всех, кто пользуется входом через Google/Microsoft, заново подключить свою учётную запись.
Создание ключа (только при первой установке)
Лёгкий путь: пусть установщик сделает это сам
Когда вы устанавливаете TSync и завершаете шаг с базой данных, установщик автоматически создаёт надёжный случайный ключ за вас. Вам не нужно и пальцем шевелить — просто загляните потом в app-config.php и убедитесь, что в строке APP_ENC_KEY есть значение.
Вручную (если вдруг понадобится)
На Linux или macOS эта команда выведет свежий ключ из 32 символов:
LC_ALL=C tr -dc 'A-Za-z0-9' < /dev/urandom | head -c 32
Или, с помощью PHP, эта команда тоже выведет ключ:
php -r "echo bin2hex(random_bytes(16));"
(Есть сайты, которые генерируют ключи, но используйте их только для тестов — никогда для настоящей, рабочей системы.)
Сохраните безопасную копию — именно об этом часто забывают
Пожалуйста, сохраните этот ключ в надёжном месте сегодня. Лучший дом для него — менеджер паролей (например, 1Password или Bitwarden). Вот сценарий, которого стоит избежать: у вас есть идеальная резервная копия базы данных, вы теряете сервер, восстанавливаете базу на новом — но без исходного ключа ни одну из запертых учётных записей прочитать уже нельзя. Одной резервной копии недостаточно; ключ — это вторая её половина.
Полная резервная копия на самом деле означает три вещи вместе:
- Резервную копию базы данных
- Копию файла
application/config/app-config.php(в нём хранится ключ) - Копию вашей папки
uploads/(логотипы, вложения)
Как посмотреть свой текущий ключ
Чтобы просто увидеть ключ в его строке:
grep "APP_ENC_KEY" application/config/app-config.php
Чтобы убедиться, что длина правильная (должно вывести 32):
php -r "include 'application/config/app-config.php'; echo strlen(APP_ENC_KEY) . PHP_EOL;"
Что произойдёт, если ключ перестанет работать
Начиная с v11.1.1 ответ короткий: система откажется сохранять и объяснит почему.
Это важнее всего для национальных идентификационных номеров (CNP / IDNP) в карточке сотрудника. Это персональные данные особой категории, поэтому они хранятся только в зашифрованном виде.
Если ключ отсутствует или не работает, а вы сохраняете сотрудника с заполненным CNP или IDNP:
- сотрудник не сохраняется вообще — даже частично;
- вы получаете сообщение об этом и о том, что нужно проверить;
- остальные введённые данные остаются в форме.
Сохранение сотрудника без идентификатора работает как обычно. Отказ касается только тех данных, которые он защищает.
Почему отказ, а не «сохранить что получится»? До v11.1.1 идентификатор молча заменялся пустым значением, а последние четыре цифры оставались на экране — карточка выглядела заполненной, а номера уже не было. Об этом узнавали только тогда, когда номер кому-то понадобился. Сотрудник, которого пришлось сохранить дважды, — это неудобство; исчезнувший персональный номер не восстановить.
Уже есть такие записи? Страница Здоровье (Настройки → Здоровье) показывает их двумя отдельными группами, потому что это разные проблемы:
- хранятся открыто — номер на месте, но без защиты. Это исправимо: откройте сотрудника и введите номер заново, он сохранится зашифрованным.
- утрачены — остались только последние четыре цифры. Никакое исправление их не вернёт; нужно спросить сотрудника и ввести номер заново.