Настройка электронной подписи (ЭП) в Linux — это всегда приключение. Но попытка завести плагин Госуслуг на свежей Ubuntu 24.04 LTS превращается в настоящий хардкорный квест. Официальные инструкции безнадежно устарели, инсталляторы выдают ошибки, а техническая поддержка обычно разводит руками.
В этой статье я пошагово разберу, как заставить всё это работать, когда «всё против вас»: от конфликтов OpenSSL 3.0 до капризов Wayland и Native Messaging.
В чем проблема?
Ubuntu 24.04 принесла много обновлений, которые «сломали» старое криптографическое ПО:
OpenSSL 3.0 по умолчанию. Плагин Госуслуг требует старый libssl1.1, которого в репозиториях больше нет.
Wayland. Графические окна плагина (ввод ПИН-кода) часто не отрисовываются или вешают процесс.
Native Messaging Host. Яндекс.Браузер и Chromium часто «не видят» плагин из-за жестких ограничений безопасности и путаницы в ID расширений.
Шаг 1. Подготовка «фундамента» (Библиотеки)
Плагин Госуслуг (версии 1.3.18/19) — это 64-битное приложение на Qt5. Ему нужны системные библиотеки, которые в 24.04 называются иначе или отсутствуют.
1.1. Ставим зависимости Qt5 и XCB
code Bash
sudo apt update sudo apt install -y libqt5gui5t64 libqt5widgets5t64 libqt5network5t64 libqt5sql5t64 \ libxcb-xinerama0 libxcb-cursor0 libxcb-util1 libxkbcommon-x11-0
1.2. Решаем проблему libssl1.1
Плагин не запустит модуль crypto без OpenSSL 1.1. Скачаем его из архивов предыдущих версий: code Bash
wget http://azure.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1\_1.1.1f-1ubuntu2\_amd64.deb sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb
1.3. Исправляем libxcb-util
Системная библиотека в Ubuntu 24.04 имеет версию .1, а плагин ищет .0. Лечим симлинком: code Bash
sudo ln -s /usr/lib/x86_64-linux-gnu/libxcb-util.so.1 /usr/lib/x86_64-linux-gnu/libxcb-util.so.0
Шаг 2. Установка плагина и «чистка» модулей
Установите плагин в /opt/iitrust/gosuslugi_plugin/. Но не спешите запускать. Внутри папки bin лежат модули для всех типов токенов (eSmart, JaCarta и т.д.). Если вы используете Rutoken, другие модули могут вызывать конфликты и «вечную крутилку» при поиске сертификатов.
Отключаем лишнее:
code Bash
sudo find /opt/iitrust/gosuslugi_plugin/bin/ -name "*esmart*.so" -exec mv {} {}.bak \; sudo find /opt/iitrust/gosuslugi_plugin/bin/ -name "*jacarta*.so" -exec mv {} {}.bak \;
Шаг 3. Native Messaging: связываем Браузер и Плагин
Это критический этап. Браузер запускает плагин не сам, а через JSON-манифест.
3.1. Создаем универсальный «скрипт-шпион»
Вместо прямого запуска бинарника мы создадим обертку в /usr/bin/ifc_chrome_host. Это позволит нам прокинуть нужные переменные окружения и вести лог ошибок. code Bash
sudo bash -c 'cat > /usr/bin/ifc_chrome_host << "EOF" #!/bin/bash export QT_QPA_PLATFORM=xcb export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins export LD_LIBRARY_PATH=/opt/iitrust/gosuslugi_plugin/lib:$LD_LIBRARY_PATH # Лог для отладки echo "=== ЗАПУСК ПЛАГИНА $(date) ===" >> /tmp/gosuslugi_err.log /opt/iitrust/gosuslugi_plugin/bin/gosuslugi_plugin "$@" 2>> /tmp/gosuslugi_err.log EOF' sudo chmod 755 /usr/bin/ifc_chrome_host
3.2. Настраиваем манифест (JSON)
Важно: Яндекс.Браузер часто использует специфичный ID расширения. В моем случае это был jabjbhgjaidecageckilhonbggakppme.
Создаем файл /etc/opt/yandex/browser/native-messaging-hosts/ru.rtlabs.ifcplugin.json: code JSON
{ "name": "ru.rtlabs.ifcplugin", "description": "IFC Plugin", "path": "/usr/bin/ifc_chrome_host", "type": "stdio", "allowed_origins":[ "chrome-extension://jabjbhgjaidecageckilhonbggakppme/", "chrome-extension://pbefkdcndngodfeigfdgiodgnmbgcfha/", "chrome-extension://nkfegcglffejfnakfkihkegdkfmomgid/" ] }
Шаг 4. КриптоПро: Ошибка 30033 и привязка провайдера
Даже если плагин запущен, вы можете увидеть бесконечную загрузку или ошибку «Провайдер не поддерживается» (30033). Это происходит потому, что в свойствах установленного сертификата не прописано имя провайдера КриптоПро.
Исправляем через консоль:
Найдите ваш контейнер (например, через csptest -keyset -enum_cont -fqcn) и переустановите сертификат с явным указанием имени провайдера: code Bash
/opt/cprocsp/bin/amd64/certmgr -inst -cont '\\.\Aktiv Rutoken lite 00 00\ВАШ_ID_КОНТЕЙНЕРА' \ -provname "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider" -provtype 80
Шаг 5. Тонкости ПИН-кода и Wayland
В Ubuntu 24.04 (Wayland) окно ввода ПИН-кода может прятаться за окном браузера.
Совет: Если нажали «Вход по ЭП» и ничего не происходит — нажмите Alt+Tab. Окно «Госплагин» может ждать вас там.
ПИН-код по умолчанию: Для Rutoken Lite это обычно 12345678.
Итог
После всех манипуляций цепочка начинает работать:
Портал Госуслуг обращается к расширению.
Расширение через манифест запускает наш скрипт /usr/bin/ifc_chrome_host.
Скрипт подтягивает libssl1.1 и отрисовывает окно ввода ПИН-кода через xcb.
Плагин через явно указанный provname подписывает данные в КриптоПро.
Если вы всё сделали правильно, но видите сообщение «Вход по электронной подписи отключён» — поздравляю! Это победа. Это значит, портал успешно принял вашу подпись, узнал вас, и вам осталось только включить соответствующий тумблер в настройках безопасности своего профиля.
Надеюсь, этот опыт сэкономит вам пару дней жизни!
Комментарии (7)

baldr
12.03.2026 16:10Хочется посоветовать использовать Chromium-GOST - отдельный браузер на базе Chromium. Для того, чтобы не хранить сертификаты и расширение в основном Chromium в системе.
Ну и интересно бы ваш сетап иметь в виде какого-нибудь контейнера типа snap или flatpack, чтобы легче поддерживать.

okop2000
12.03.2026 16:10"А у вас нет такого же, только с перламутровыми пуговицами?“ ©
Нужно для Debian 13 —мне не для себя, просто друг интересуется

ashumkin
12.03.2026 16:10Спасибо за статью (у самого руки не дошли написать: я часть этого проходил осенью с Ubuntu 22.04, когда открыл себе ИП)
Однако, выглядит не как квест, а набор предзнаний в виде магических заклинаний: сделай это и тогда у тебя всё заработает.
Мне бы больше зашëл формат: запускаем плагин, не работает. Почему? Ага, ошибка. Исправляем тут-то такое-то. Запускаем опять. Ага, опять не работает (и так в цикле, пока не заработает )) кажется, такое больше было бы похоже на квест )
Ну и развивает инженерный подход у читателей: что у каждой проблемы есть явная причина, а на линуксе практически всегда есть возможность узнать такие причины и исправить их

Daiichi
12.03.2026 16:10Обычно вместо вот этого:
sudo bash -c 'cat > /usr/bin/ifc_chrome_host << "EOF" ... EOF'используют вот такой конструкт:
sudo tee /usr/bin/ifc_chrome_host <<'EOF' ... EOFЭто проще, нагляднее и удобнее. Кроме того, одинарные кавычки непосредственно вокруг EOF гарантируют, что в тексте document here не будет выполняться подстановка переменных.
Также, если речь идёт об установке программ и скриптов в /usr/bin, рекомендуется использовать install, а не запись скрипта непосредственно в /usr/bin с последующей командой chmod a+x. Всё вместе это выглядит вот так:
TEMP_SCRIPT=$(mktemp) \ && tee "${TEMP_SCRIPT}" <<'EOF' \ && sudo install -Dpv "${TEMP_SCRIPT}" /usr/bin/ifc_chrome_host \ && rm -vf $TEMP_SCRIPT \ ... EOFinstall рекомендуется использовать, в частности, потому, что с опцией -D эта команда автоматически создаст все каталоги пути назначения, и это не считая установки бита исполнения устанавливаемой программы или скрипта.
Использование mktemp рекомендовано для противодействия подмене содержимого скрипта до его установки в /usr/bin. Вроде бы некогда была изловлена какая-то малварь, которая тихо сидела в системе от обычного пользователя, мониторила /tmp, дожидалась, пока туда в процессе обновления будет распакован пакет с оболочкой системы или какими другими утилитами, и немедленно их троянила, успевая сделать это до их установки по месту назначения. Ну а затем они запускались от рута, например, в процессе загрузки системы.

Evpolov Автор
12.03.2026 16:10Благодарим, за рекомендации. Что скажете касательно комментария:
"А у вас нет такого же, только с перламутровыми пуговицами?“ ©
Нужно для Debian 13 —мне не для себя, просто друг интересуется"
?
Было бы интересно, Ваше профессиональное мнение.
Daiichi
12.03.2026 16:10Что скажете касательно комментария:
Скажу, что, на мой взгляд, рекомендации будут теми же самыми, за исключением того, что пакет SSL v1.1 логичнее будет брать из репозитория Debian, а не Ubuntu.
Также хотелось бы отметить, что и для Ubuntu 24.04 логичнее было бы скачивать пакет SSL v1.1 непосредственно с того репозитория, который указан в
/etc/apt/sources.listили в/etc/apt/sources.list.d/*.sources, если он есть, для серии (suite)"$(lsb_release -sc)"компонента (component)main, и потому алгоритм скачивания окажется универсальным независимо от разновидности ОС, а также то, что символ подчёркивания не требует экранирования обратной косой чертой.Само собой, желательно изложить этот алгоритм в виде функции bash. К сожалению, это потребует самостоятельной разработки и отладки процедур извлечения URI репозитория из текстовых файлов sources.list различных форматов (man 5 sources.list), на что у меня, к сожалению, сейчас нет времени.
RoasterToaster
А теперь lkul.nalog.ru )