С помощью этого руководства вы узнаете, как использовать USB-ключ на локальном компьютере для подписания документов в 1C на виртуальной машине Cloud.ru Evolution. Процесс подписания описан на примере ключей RuToken и JaCarta. Для проброса USB-устройства с локального рабочего места или выделенного USB-сервера на виртуальную машину, расположенную в облаке, используется технология USB over IP (usbip).
Вы будете использовать следующие сервисы:
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.
«Публичные IP» — сервис для организации доступа.
usbipd-win — утилита, которая позволяет передавать локальные USB-устройства на другие виртуальные машины или компьютеры.
1C — экосистема программных продуктов для автоматизации бизнеса, учета и управления. Потребуется авторизация под учетной записью пользователя или партнера 1С.
RuToken, JaCarta — аппаратные и программные решения в области аутентификации, защиты информации и электронной подписи.
КриптоПро CSP — специализированная программа, которая позволяет операционной системе компьютера работать с электронной подписью (ЭЦП и КЭП) и российскими стандартами шифрования (ГОСТ).
Шаги:
Получите IP-адрес локального компьютера, к которому будет подключаться USB-ключ. Это можно сделать с помощью сервиса 2ip.io. Полученный IP-адрес понадобится при настройке VPN.
Подготовьте USB-ключ:
Установите драйверы ключа на локальный компьютер.
Активируйте USB-ключ и проверьте его работу.
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
На этом шаге вы создадите виртуальную машину, добавите ей необходимые настройки безопасности и настроите VPN-туннель между ней и компьютером с USB-ключом.
Создайте группу безопасности с названием 1c-vm и добавьте в нее правила:
Трафик | Протокол | Порт | Тип источника/адресата | Источник/Адресат |
|---|---|---|---|---|
Входящий | TCP | 3240 | IP-адрес | IP-адрес вашего локального компьютера |
Исходящий | — | — | IP-адрес | 0.0.0.0/0 |
На странице Сети → Группы безопасности убедитесь, что отображается группа безопасности 1c-vm со статусом «Создана».
Создайте виртуальную машину со следующими параметрами:
Название — 1c-vm.
Образ — публичный образ Ubuntu 22.04.
Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.
Группы безопасности — SSH-access_ru.AZ-1 и 1c-vm.
Логин — 1c-vm.
Метод аутентификации — Публичный ключ и Пароль.
Публичный ключ — укажите ключ, созданный ранее.
Пароль — задайте пароль пользователя.
Имя хоста — 1c-vm.
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
На странице Инфраструктура → Виртуальные машины убедитесь, что отображается виртуальная машина 1c-vm со статусом «Запущена».
Протокол USB/IP не обеспечивает шифрование. Поэтому для безопасности передачи данных используйте VPN. Создайте VPN-туннель между виртуальной машиной и вашим компьютером.
На этом шаге вы настроите доступ к USB-устройству с использованием утилиты usbip.
На локальном компьютере выполните команды:
Установите usbipd:
sudo apt updatesudo apt install usbip
Загрузите модуль ядра:
sudo modprobe usbip-coresudo modprobe usbip-host
Подключите USB-ключ и проверьте его:
Выполните команду для получения списка всех подключенных устройств:
usbip list --local
Пример вывода:
- 0483:a2ca (AktivCo RuToken ECK 3.0)1-2: USB device
Предоставьте доступ из сети к USB-ключу. Выполните команду, заменив значение busid на ваш:
sudo usbip bind --busid 1-2
Проверьте статус:
usbip list --local
Разрешите входящий TCP-трафик по порту 3240:
sudo ufw allow 3240/tcp
Запустите сервер в фоновом режиме или как службу:
Запуск в фоновом режиме:
sudo usbipd -D
Запуск как systemd-службу:
sudo systemctl start usbipdsudo systemctl enable usbipd
На этом шаге вы настроите доступ к USB-устройству с использованием утилиты usbip.
Обновите систему и установите usbipd:
sudo apt updatesudo apt install linux-tools-generic hwdatasudo update-alternatives --install /usr/local/bin/usbip usbip $(ls /usr/lib/linux-tools/*/usbip | tail -n1) 20
Проверьте, что usbip установлена:
usbip version
Загрузите клиентский модуль:
sudo modprobe usbip-coresudo modprobe vhci-hcd
Проверьте, что виртуальная машина определяет USB-сервер:
usbip list --remote <computer_vpn_ip_address>
Где <computer_vpn_ip_address> — IP-адрес компьютера, к которому подключено USB-устройство, в сети VPN. Например, 10.0.1.2.
Подключите USB-устройство:
sudo usbip attach --remote <computer_vpn_ip_address> --busid <busid>
Где:
<computer_vpn_ip_address> — IP-адрес компьютера, к которому подключено USB-устройство, в сети VPN.
<busid> — идентификатор устройства на компьютере.
Проверьте подключение:
Получите список подключенных устройств:
usbip port
Проверьте в системе:
lsusb
Должно появиться новое устройство.
На этом шаге вы настройте удаленный рабочий стол, чтобы пользователь мог подключаться к виртуальной машине и работать с 1С через тонкий клиент.
Установите легкий рабочий стол XFCE и сервер xRDP:
sudo apt install -y xfce4 xfce4-goodies xrdp
Разрешите xRDP запускать XFCE для новых сессий:
echo "startxfce4" > ~/.xsessionsudo cp ~/.xsession /etc/skel/.xsession
Добавьте пользователя xrdp в группу ssl-cert, иначе возможны ошибки при подключении:
sudo adduser xrdp ssl-cert
Перезапустите службу xRDP и включите ее автозапуск:
sudo systemctl restart xrdpsudo systemctl enable xrdpsudo systemctl status xrdp
Разрешите входящий TCP-трафик по порту 3389:
sudo ufw allow 3389/tcp
Не открывайте порт 3389 в публичный интернет. Доступ к RDP должен осуществляться только через VPN-туннель.
Подключитесь к виртуальной машине с локального компьютера с помощью любого RDP-клиента (Windows: mstsc, Linux: remmina, macOS: Microsoft Remote Desktop), указав в качестве адреса IP-адрес виртуальной машины в VPN-туннеле.
На этом шаге вы скачаете тонкий клиент 1С:Предприятие и загрузите дистрибутив на виртуальную машину.
В этом руководстве скачивается и устанавливается 1С:Предприятие 8.3. Если вы используете другое поколение платформы, внесите необходимые изменнения в команды.
На локальный компьютер скачайте:
Установочные пакеты тонкого клиента 1С для Linux с официального сайта 1С.
Установочный пакет для КриптоПро CSP для Linux c официального сайта КриптоПро.
Загрузите файлы на виртуальную машину, например через scp . В терминале или командной строке компьютера выполните команду для каждого установочного пакета:
scp -i <private_ssh_key> <package-name> <user>@<vm_public_ip>:/tmp/
Где:
<private_ssh_key> — приватная часть SSH-ключа и путь до нее.
<package-name> — полное название скаченного файла дистрибутива.
<user> — логин пользователя виртуальной машины.
<vm_public_ip> — публичный IP-адрес виртуальной машины.
Файлы будут сохранены во временной папке виртуальной машины.
На этом шаге вы установите тонкий клиент 1С:Предприятие и настроите виртуальную машину как удаленное рабочее место для просмотра и подписания документов.
Откройте сессию терминала с подключением к виртуальной машине.
Обновите систему и установите зависимости, необходимые для работы тонкого клиента 1С:
echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | sudo debconf-set-selectionssudo apt install -y libwebkit2gtk-4.0-37 libgsf-1-114 imagemagick unixodbc ttf-mscorefonts-installer
Распакуйте архив:
cd /tmptar -xzf <1c-installer>
Где <1c-installer> — название файла дистрибутива 1C.
Запустите установщик и следуйте его указаниям:
chmod +x setup-training-8.5.1.1150-x86_64.runsudo ./setup-training-8.5.1.1150-x86_64.run
Проверьте, что тонкий клиент установлен:
which 1c1c --version
В ответе должна отобразиться версия установленного клиента.
На этом шаге вы установите на виртуальную машину криптопровайдер и драйверы USB-ключа.
Убедитесь, что USB-ключ подключен к виртуальной машине через usbip:
lsusbusbip port
В ответе должно вернуться устройство вашего ключа. Например, AktivCo RuToken ECK 3.0.
Распакуйте архив и установите КриптоПро CSP.
cd /tmptar xzf linux-amd64.tgzcd linux-amd64_debsudo ./install.sh
Установите дополнительные пакеты для поддержки считывателей и токенов:
sudo dpkg -i cprocsp-rdr-pcsc-64_*.amd64.debsudo dpkg -i cprocsp-rdr-rutoken-64_*.amd64.deb
Установите и запустите службу PC/SC, которая обеспечивает взаимодействие с USB-токенами:
sudo apt install -y pcscd libccid openscsudo systemctl enable pcscdsudo systemctl start pcscdsudo systemctl status pcscd
Проверьте, что USB-ключ определяется системой. Установите драйверы ключа в зависимости от производителя:
Скачайте драйверы с официального сайта RuToken:
wget https://www.rutoken.ru/.../rutoken-drivers-.tar.gztar xzf rutoken-drivers-.tar.gzcd rutoken-drivers-*sudo ./install.sh
Проверьте, что ключ виден:
/opt/rutoken/bin/rtKeys --list
Проверьте, что КриптоПро видит контейнеры на USB-ключе:
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifyc -fq
В ответе должны отобразиться доступные ключевые контейнеры.
Если вы используете USB-ключ RuToken, настройте считыватель:
а. Просмотрите доступные считыватели:
/opt/cprocsp/bin/amd64/list_pcsc
Добавьте считыватель:
sudo /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add 'Aktiv Rutoken ECP 00 00'
Установите корневой сертификат удостоверяющего центра:
wget -O certnew.cer 'https://www.cryptopro.ru/certsrv/certnew.cer?ReqID=CACert&Enc=bin'sudo /opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file certnew.cer
Проверьте, что контейнер доступен и подпись формируется:
/opt/cprocsp/bin/amd64/csptestf -keyset -container <container_name> -check
Где <container_name> — название контейнера вашего ключа.
В ответе должно вернуться «Check verify signature on private key passed» и «Check verify signature on public key passed».
При разрыве сетевого соединения USB-ключ отключается от виртуальной машины. Для восстановления требуется ручное переподключение.
Чтобы избежать этого, настройте автоматическое переподключение.
Создайте файл службы systemd:
sudo nano /etc/systemd/system/usbip-reconnect.service
Вставьте в него код и сохраните:
# /etc/systemd/system/usbip-reconnect.service[Unit]Description=USBIP Auto Reconnect ServiceAfter=network.target[Service]Type=simpleExecStart=/usr/local/bin/usbip-reconnect.shRestart=alwaysRestartSec=10User=rootGroup=root[Install]WantedBy=multi-user.target
Создайте файл скрипта:
sudo nano /usr/local/bin/usbip-reconnect.sh
Вставьте в него код и сохраните:
#!/bin/bash# /usr/local/bin/usbip-reconnect.shUSBIP_SERVER="10.0.1.2" # внутренний VPN-адрес USB-сервераBUSID="1-2" # BUSID устройстваPORT=3240CHECK_INTERVAL=30while true; doif nc -z -w 3 "$USBIP_SERVER" "$PORT" 2>/dev/null; thenif ! usbip port | grep -q "$BUSID"; thenecho "$(date): Подключение USB-ключа $BUSID с $USBIP_SERVER"usbip detach --port=$(usbip port | grep "$BUSID" | awk '{print $2}' | tr -d ':') 2>/dev/nullusbip attach --remote "$USBIP_SERVER" --busid "$BUSID"fielseecho "$(date): Сервер $USBIP_SERVER:$PORT недоступен"fisleep "$CHECK_INTERVAL"done
Сделайте файл исполняемым:
sudo chmod +x /usr/local/bin/usbip-reconnect.sh
Перезагрузите конфигурацию systemd и запустите службу:
sudo systemctl daemon-reloadsudo systemctl enable usbip-reconnectsudo systemctl start usbip-reconnect
На этом шаге вы проверите, что тонкий клиент 1С может использовать USB-ключ для подписания документов.
Подключитесь к виртуальной машине по RDP.
Запустите тонкий клиент 1С:
1c
В окне запуска 1С добавьте новую информационную базу:
Нажмите Добавить в список → Добавление информационной базы.
В поле Наименование введите произвольное название, например RemoteBase.
В поле Расположение выберите На сервере 1С:Предприятия.
Укажите адрес вашего сервера 1С, например 1c.example.com.
В поле Имя информационной базы укажите название базы на сервере.
Подключитесь к базе под своей учетной записью.
Откройте документ, который требует подписания.
Нажмите кнопку Подписать или аналогичную в вашей конфигурации.
В диалоговом окне выберите сертификат, соответствующий USB-ключу.
Введите PIN-код USB-ключа.
Если подпись сформирована успешно, в 1С появится уведомление, а в документе отобразится отметка о подписи.
Вы научились пробрасывать USB-ключи с локального компьютера на виртуальную машину в облаке Cloud.ru Evolution и использовать их для подписания документов в 1С.