Настройка электронной подписи (ЭП) в 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 подписывает данные в КриптоПро.

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

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