Настройка электронной подписи (ЭП) в Linux — это всегда приключение. Но попытка завести плагин Госуслуг на свежей Ubuntu 24.04 LTS превращается в настоящий хардкорный квест. Официальные инструкции безнадежно устарели, инсталляторы выдают ошибки, а техническая поддержка обычно разводит руками.

В этой статье я пошагово разберу, как заставить всё это работать, когда «всё против вас»: от конфликтов OpenSSL 3.0 до капризов Wayland и Native Messaging.

В чем проблема?

Ubuntu 24.04 принесла много обновлений, которые «сломали» старое криптографическое ПО:

  1. OpenSSL 3.0 по умолчанию. Плагин Госуслуг требует старый libssl1.1, которого в репозиториях больше нет.

  2. Wayland. Графические окна плагина (ввод ПИН-кода) часто не отрисовываются или вешают процесс.

  3. 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.

Итог

После всех манипуляций цепочка начинает работать:

  1. Портал Госуслуг обращается к расширению.

  2. Расширение через манифест запускает наш скрипт /usr/bin/ifc_chrome_host.

  3. Скрипт подтягивает libssl1.1 и отрисовывает окно ввода ПИН-кода через xcb.

  4. Плагин через явно указанный provname подписывает данные в КриптоПро.

Если вы всё сделали правильно, но видите сообщение «Вход по электронной подписи отключён» — поздравляю! Это победа. Это значит, портал успешно принял вашу подпись, узнал вас, и вам осталось только включить соответствующий тумблер в настройках безопасности своего профиля.

Надеюсь, этот опыт сэкономит вам пару дней жизни!

Комментарии (7)


  1. RoasterToaster
    12.03.2026 16:10

    А теперь lkul.nalog.ru )


  1. baldr
    12.03.2026 16:10

    Хочется посоветовать использовать Chromium-GOST - отдельный браузер на базе Chromium. Для того, чтобы не хранить сертификаты и расширение в основном Chromium в системе.

    Ну и интересно бы ваш сетап иметь в виде какого-нибудь контейнера типа snap или flatpack, чтобы легче поддерживать.


  1. okop2000
    12.03.2026 16:10

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


  1. ashumkin
    12.03.2026 16:10

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


  1. 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 \
    ...
    EOF

    install рекомендуется использовать, в частности, потому, что с опцией -D эта команда автоматически создаст все каталоги пути назначения, и это не считая установки бита исполнения устанавливаемой программы или скрипта.

    Использование mktemp рекомендовано для противодействия подмене содержимого скрипта до его установки в /usr/bin. Вроде бы некогда была изловлена какая-то малварь, которая тихо сидела в системе от обычного пользователя, мониторила /tmp, дожидалась, пока туда в процессе обновления будет распакован пакет с оболочкой системы или какими другими утилитами, и немедленно их троянила, успевая сделать это до их установки по месту назначения. Ну а затем они запускались от рута, например, в процессе загрузки системы.


    1. Evpolov Автор
      12.03.2026 16:10

      Благодарим, за рекомендации. Что скажете касательно комментария:

      "okop20003 часа назад

      "А у вас нет такого же, только с перламутровыми пуговицами?“ ©
      Нужно для Debian 13 —мне не для себя, просто друг интересуется"
      ?
      Было бы интересно, Ваше профессиональное мнение.


      1. 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), на что у меня, к сожалению, сейчас нет времени.