КриптоПро в Linux контейнере для использования КЭП от ФНС
С Нового Года от Индивидуальных Предпринимателей (ИП) и директоров Обществ с
Ограниченной Ответственностью (ООО) требуют использовать Квалифицированную
Электронную Подпись (КЭП) выданную Федеральной Налоговой Службой (ФНС).
Это требует от пользователей ряда действий:
Купить токен (похожее на флешку устройство для хранения КЭП)
Настроить КриптоПро на своём рабочем месте
Добавить свой сертификат в хранилище сертификатов на рабочем месте
Настроить работу со всеми теми сервисами где КЭП будет использоваться
Ниже будет пример, как можно настроить контейнер Linux для работы с КЭП от ФНС,
а так же сервисов nalog.ru, gosuslugi.ru, moedelo.com и diadoc.kontur.ru (на этих тестировалось, но будет работать и на других, хотя и потребует дополнительных действий).
Мотивация для настройки именно в таком виде:
Подойдёт для любого Linux дистрибутива
Однажды сделав легко запускать на любой из версий с Linux и на любом из компьютеров с Linux
Желающие настроить локально без контейнера легко смогут повторить по шагам описанным в Dockerfile
В предлагаемом вариант настройка следующая:
На хост систему устанавливается pcsc (соответствующие пакеты входят во многие дистрибутивы) соответствующее вашему токену (на сайте токена подробно описываются настройки, например для Рутокена есть такое описание)
В контейнер прокидывается socket от фоновой программы pcscd
Внутри контейнера установлено всё необходимое, достаточно только добавить личный сертификат
Используется браузер firefox прямо из контейнера
Могут быть разные варианты этой схемы.
Описанный подход позволяет пользоваться КЭП от ФНС под любым дистрибутивом Linux.
Тестировалось с Рутокен ЭЦП 3.0 (должно работать и с любыми другими, которые поддерживаются pcsc и КриптоПро).
Репозиторий с Dockerfile — https://github.com/YuraBeznos/cryptopro-in-container
Сам образ не предлагается т.к. лицензии на входящее программное обеспечение не позволяют это, хотя конечно, никто не может запретить создать свой образ и хранить его у себя.
Потребуется:
Установить всё необходимое для работы токена на хост системе, обычно это pcsc и библиотеки к нему (смотреть на сайте производителя)
Проверить на хост системе, что токен определяется:
# pcsc_scan
Using reader plug'n play mechanism
Scanning present readers...
0: Aktiv Rutoken ECP 00 00
Mon Dec 19 22:36:07 2022
Reader 0: Aktiv Rutoken ECP 00 00
Event number: 0
Card state: Card inserted,
Скачать все необходимые пакеты в папку с Dockerfile
Это может занять время и эту процедуру можно проходить в самом контейнере
Например плагины можно поставить в самом Firefox, а папку с расширением потом скопировать из пользовательской
Собрать образ docker
docker build ./ -t cryptopro-in-container:first
Разрешить открыть окна в wm приложениям со стороны
xhost +local:
Запустить контейнер из полученного образа
docker run --rm -ti -v `pwd`/:/something -v /run/pcscd/pcscd.comm:/run/pcscd/pcscd.comm -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix"$DISPLAY" cryptopro-in-container:first /bin/bash -i
# Где /run/pcsсd/pcscd.comm сокет для обращений
# /tmp/.X11-unix доступ к активной сессии
# DISPLAY переменная определяющая где открывать окна
# something папка внутри контейнера с содержимым той папки из которой запускаете
root@d66b9560c771:/# csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.12455 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 17693171
\\.\Aktiv Rutoken ECP 00 00\0c686f35c-328c-0cf8-e404-900dcf68a53
OK.
Total: SYS: 0.010 sec USR: 0.040 sec UTC: 0.820 sec
[ErrorCode: 0x00000000]
Копировать публичный сертификат с токена в файл (подставив имя своего криптоконтейнера)
certmgr -export -dest mine.crt -container '\\.\Aktiv Rutoken ECP 00 00\0c686f35c-328c-0cf8-e404-900dcf68a53'
Установить свой сертификат внутри контейнера (подставив имя своего криптоконтейнера)
certmgr -install -store uMy -file mine.crt -cont '\\.\Aktiv Rutoken ECP 00 00\0c686f35c-328c-0cf8-e404-900dcf68a53'
Запустить браузер
firefox
и пользоваться необходимыми сайтами.
Поздравляю, теперь вы можете используя токен аутентифицироваться на таких сайтах как nalog.ru и gosuslugi.ru, подписывать документы в diadoc.kontur.ru и сдавать отчётность в moedelo.ru .
Прикрепляю сам Dockerfile (в репозитории может быть более свежая версия https://github.com/YuraBeznos/cryptopro-in-container):
Dockerfile
# 2022 December
FROM debian:stable@sha256:880aa5f5ab441ee739268e9553ee01e151ccdc52aa1cd545303cfd3d436c74db
ENV DEBIAN_FRONTEND noninteractive
ENV PATH="${PATH}:/opt/cprocsp/bin/amd64/"
# Downloaded from https://www.cryptopro.ru/fns_experiment
ADD csp-fns-amd64_deb.tgz /cryptopro
# Downloaded from https://www.rutoken.ru/support/download/pkcs/#linux
COPY librtpkcs11ecp_2.6.1.0-1_amd64.deb /cryptopro
# Downloaded from https://restapi.moedelo.org/eds/crypto/plugin/api/v1/installer/download?os=linux&version=latest
COPY moedelo-plugin_*_amd64.deb /cryptopro
# Downloaded from install.kontur.ru
COPY kontur.plugin_amd64.deb /cryptopro
# Downloaded from https://ds-plugin.gosuslugi.ru/plugin/upload/Index.spr
COPY IFCPlugin-x86_64.deb /cryptopro
# Downloaded from https://www.rutoken.ru/support/download/get/rtPlugin-deb-x64.html
COPY libnpRutokenPlugin_*_amd64.deb /cryptopro
RUN apt-get update && \
apt-get install -y whiptail libccid libpcsclite1 pcscd pcsc-tools opensc \
libgtk2.0-0 libcanberra-gtk-module libcanberra-gtk3-0 libsm6 \
firefox-esr && \
cd /cryptopro/fns-amd64_deb && \
dpkg -i /cryptopro/librtpkcs11ecp_*_amd64.deb && \
sed -i s#install_gui#install# _FNS_INSTALLER.sh && \
./_FNS_INSTALLER.sh && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-pki-cades-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-rdr-gui-gtk-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-pki-plugin-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-cptools-gtk-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-rdr-pcsc-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-rdr-rutoken-64_*_amd64.deb && \
dpkg -i /cryptopro/fns-amd64_deb/cprocsp-rdr-cryptoki-64_*_amd64.deb && \
dpkg -i /cryptopro/moedelo-plugin_*_amd64.deb && \
dpkg -i /cryptopro/kontur.plugin_amd64.deb && \
dpkg -i /cryptopro/IFCPlugin-x86_64.deb && \
dpkg -i /cryptopro/libnpRutokenPlugin_*_amd64.deb
# Downloaded from https://www.cryptopro.ru/sites/default/files/products/cades/extensions/firefox_cryptopro_extension_latest.xpi
COPY firefox_cryptopro_extension_latest.xpi /usr/lib/firefox-esr/distribution/extensions/ru.cryptopro.nmcades@cryptopro.ru.xpi
# Downloaded from install.kontur.ru (firefox addon)
COPY kontur.toolbox@gmail.com.xpi /usr/lib/firefox-esr/distribution/extensions/kontur.toolbox@gmail.com.xpi
# Downloaded from https://ds-plugin.gosuslugi.ru/plugin/upload/Index.spr
COPY addon-1.2.8-fx.xpi /usr/lib/firefox-esr/distribution/extensions/pbafkdcnd@ngodfeigfdgiodgnmbgcfha.ru.xpi
# Downloaded from https://addons.mozilla.org/ru/firefox/addon/adapter-rutoken-plugin/
COPY rutokenplugin@rutoken.ru.xpi /usr/lib/firefox-esr/distribution/extensions/rutokenplugin@rutoken.ru.xpi
CMD ["bash"]
Стоит добавить, что лицензия на КриптоПро идёт в составе сертификата (записывается на токен) выданного в ФНС. Если спустя время лицензию перестанут предоставлять, то криптопро позволяет работать в демо режиме ну и наконец можно приобрести. Ввод лицензии потребует дополнительные шаги.
Надеюсь это поможет пользователям Linux операционок пользоваться КЭП от ФНС без лишней головной боли.
Спасибо за внимание!