Wiki
Отпечаток TLS
Сервер создаёт самоподписанный сертификат при установке. Каждый клиент подтверждает его отпечаток при первом соединении.
uVersion по умолчанию шифрует все соединения по HTTPS, без доменного имени и без купленного сертификата. Сервер создаёт свой сертификат при первом запуске, администратор делится его отпечатком с командой, и каждая рабочая станция подтверждает его один раз. Это модель TOFU: доверие при первом контакте, точно как SSH, когда он в первый раз просит вас сверить отпечаток машины. Затем клиент сверяет его при каждом соединении и отказывается общаться с сервером, который изменился.
Действие состоит из двух этапов: один раз найти отпечаток на сервере, затем подтвердить его на каждой рабочей станции, по одному разу на станцию. Остальная часть этой страницы носит справочный характер, её читают в тот день, когда что-то меняется.
Найти отпечаток
Он показывается в конце установки, рядом с паролем администратора. Затем есть три способа найти его снова, от самого простого до самого ручного.
1. Из браузера, ничего не устанавливая
Сервер предоставляет информационную страницу без аутентификации: откройте https://ВАШ-СЕРВЕР:8443/api/server-info. Ни sudo, ни доступа по SSH, ни учётной записи uVersion: это, безусловно, самый короткий путь.
Браузер сначала показывает предупреждение безопасности. Это нормально и ожидаемо: сертификат самоподписанный, ни один публичный удостоверяющий центр его не знает. Продолжите переход на сайт.
Появляющаяся затем страница представляет собой необработанный блок данных. Отпечаток является значением поля tls_fingerprint: последовательность байтов в шестнадцатеричном виде, разделённых двоеточиями. Именно эту строку целиком вы передадите команде.
2. Из журналов сервера
Сервер при каждом запуске заново записывает отпечаток в свои журналы. Этот способ работает независимо от того, куда вы поместили каталог данных:
# Linux (paquet .deb)
sudo journalctl -u uversion-server | grep "TLS fingerprint" | tail -1
# Docker
docker compose logs server | grep "TLS fingerprint" | tail -1
3. В файле fingerprint
Этот файл записывается рядом с сертификатом, то есть в каталоге [tls] cert_path, как он указан в вашем config.toml. Пути ниже являются значениями по умолчанию: если вы переместили каталог данных, сначала прочитайте cert_path в вашей конфигурации.
# Linux, dossier de donnees par defaut
sudo cat /var/lib/uversion/data/tls/fingerprint
# Windows
Get-Content "C:\ProgramData\uVersion\data\tls\fingerprint"
# Docker : chemin fixe par l'entrypoint, sur le volume de donnees
docker compose exec server cat /data/tls/fingerprint
Подтвердить на клиенте
Один раз на рабочую станцию, и раз и навсегда. Действие зависит от инструмента.
Настольный клиент
Заполните экран входа как обычно. При первом соединении с этим сервером вместо входа откроется окно Verify server identity. Сравните показанный отпечаток с тем, которым поделился ваш администратор, и нажмите Trust this server, если они совпадают: соединение сразу же продолжится само. Если они различаются, Cancel, и идите выяснять почему.
CLI uversion
uversion trust https://uversion.example.com:8443 # interactif
uversion trust https://uversion.example.com:8443 --yes # sans question (CI, script)
uversion trusted # liste les serveurs epingles
uversion login <url> # propose l'epinglage si besoin
uversion trust является интерактивным: он показывает хост, версию сервера, режим TLS и отпечаток, напоминает сравнить с тем, что передал администратор, а затем ждёт подтверждения y/N. Любой другой ответ отменяет, ничего не закрепляя. Опция --yes пропускает этот вопрос, для скрипта или непрерывной интеграции: она закрепляет без чьего-либо участия, и её стоит приберечь для сети, которую вы контролируете.
uversion login сам предлагает то же подтверждение, когда сервер ещё не закреплён: на рабочей станции обычно нечего запускать заранее.
Плагин Unreal Engine
Выполните uversion trust <url> один раз в терминале перед открытием проекта или сначала войдите из настольного клиента: плагин следует его закреплению (pin). Нативное диалоговое окно в редакторе запланировано на будущее.
Плагин Rider
Он использует uversion под капотом. Один раз uversion trust <url>, и Rider проходит.
Если отпечаток изменился
Клиент отказывается подключаться и прямо об этом сообщает. Не подтверждайте повторно на автомате: сначала сверьтесь с вашим администратором, по каналу, отличному от рассматриваемого соединения. Три возможных объяснения: переустановка сервера, намеренная ротация сертификата или кто-то, вставший между вашими рабочими станциями и вашим сервером. Получив объяснение:
- Настольный клиент: кнопка Trust new fingerprint в окне предупреждения.
- CLI:
uversion mistrust <url>, затемuversion login <url>.
Перегенерировать сертификат
Сертификат по умолчанию действителен десять лет: никакого продления планировать не нужно. Чтобы принудительно выполнить ротацию (подозрение на компрометацию, требование аудита):
# Linux
sudo rm /var/lib/uversion/data/tls/cert.pem /var/lib/uversion/data/tls/key.pem
sudo systemctl restart uversion-server
# Windows
Remove-Item "C:\ProgramData\uVersion\data\tls\cert.pem"
Remove-Item "C:\ProgramData\uVersion\data\tls\key.pem"
Restart-Service uVersionServer
Сервер при запуске заново создаёт сертификат и новый отпечаток. Предупредите команду и поделитесь им снова: каждой рабочей станции придётся подтвердить заново.
Использовать свой сертификат
Вы можете положить свой собственный сертификат, выпущенный вашим внутренним PKI или публичным удостоверяющим центром. Никакой опции включать не нужно: при запуске сервер повторно использует файлы, имеющиеся по путям [tls] cert_path и [tls] key_path, и пересчитывает отпечаток. Это работает, только если ваш сервер имеет имя DNS: ни один центр не выпускает сертификат для частного IP-адреса.
Три требования к формату, каждое из которых уже стоило кому-то вечера:
- файл сертификата содержит полную цепочку, конечный сертификат первым (файл
fullchain.pemот certbot имеет ровно такой вид); - приватный ключ является незашифрованным PEM: ключ, защищённый парольной фразой, расшифрован не будет;
- положите оба файла перед перезапуском. Если найдётся только один, сервер сочтёт состояние неполным и заново создаст самоподписанную пару поверх оставшегося.
Что это меняет для рабочих станций:
- Браузер: больше никаких предупреждений, при условии что вы открываете сервер по имени, которое несёт сертификат. По его IP-адресу предупреждение остаётся.
- Уже закреплённые рабочие станции: отпечаток меняется, поэтому каждая увидит описанное выше предупреждение и должна будет подтвердить заново. Предупредите до замены, иначе вся команда столкнётся с сообщением о перехвате в один и тот же момент.
- Продления: каждое продление меняет отпечаток и заново запускает этот ритуал, а сертификат перечитывается только при запуске сервера. С публичным сертификатом на 90 дней это выходит шесть общекомандных повторных подтверждений в год: предпочитайте длительный срок, пока эта издержка не будет устранена.