Облачная платформаEvolution

Использование USB-ключей для 1С на виртуальной машине


С помощью этого руководства вы узнаете, как использовать USB-ключ на локальном компьютере для подписания документов в 1C на виртуальной машине Cloud.ru Evolution. Процесс подписания описан на примере ключей RuToken и JaCarta. Для проброса USB-устройства с локального рабочего места или выделенного USB-сервера на виртуальную машину, расположенную в облаке, используется технология USB over IP (usbip).

Вы будете использовать следующие сервисы:

  • «Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.

  • «Публичные IP» — сервис для организации доступа.

  • usbipd-win — утилита, которая позволяет передавать локальные USB-устройства на другие виртуальные машины или компьютеры.

  • 1C — экосистема программных продуктов для автоматизации бизнеса, учета и управления. Потребуется авторизация под учетной записью пользователя или партнера 1С.

  • RuToken, JaCarta — аппаратные и программные решения в области аутентификации, защиты информации и электронной подписи.

  • КриптоПро CSP — специализированная программа, которая позволяет операционной системе компьютера работать с электронной подписью (ЭЦП и КЭП) и российскими стандартами шифрования (ГОСТ).

Шаги:

  1. Разверните ресурсы в облаке.

  2. Настройте USB-сервер.

  3. Настройте виртуальную машину.

  4. Настройте удаленный доступ по RDP.

  5. Скачайте дистрибутивы 1С, КриптоПро CSP.

  6. Установите 1С на виртуальную машину.

  7. Установите КриптоПро CSP и драйверы USB-ключа.

  8. Настройте автоматическое переподключение.

  9. Проверьте подписание документа через USB-ключ.

Перед началом работы

  1. Получите IP-адрес локального компьютера, к которому будет подключаться USB-ключ. Это можно сделать с помощью сервиса 2ip.io. Полученный IP-адрес понадобится при настройке VPN.

  2. Подготовьте USB-ключ:

    1. Установите драйверы ключа на локальный компьютер.

    2. Активируйте USB-ключ и проверьте его работу.

  3. Зарегистрируйтесь в личном кабинете Cloud.ru.

    Если вы уже зарегистрированы, войдите под своей учетной записью.

  4. Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.

1. Разверните ресурсы в облаке

На этом шаге вы создадите виртуальную машину, добавите ей необходимые настройки безопасности и настроите VPN-туннель между ней и компьютером с USB-ключом.

  1. Создайте группу безопасности с названием 1c-vm и добавьте в нее правила:

    Трафик

    Протокол

    Порт

    Тип источника/адресата

    Источник/Адресат

    Входящий

    TCP

    3240

    IP-адрес

    IP-адрес вашего локального компьютера

    Исходящий

    —

    —

    IP-адрес

    0.0.0.0/0

    На странице Сети → Группы безопасности убедитесь, что отображается группа безопасности 1c-vm со статусом «Создана».

  2. Создайте виртуальную машину со следующими параметрами:

    • Название — 1c-vm.

    • Образ — публичный образ Ubuntu 22.04.

    • Публичный IP — оставьте Арендовать новый или выберите IP-адрес из списка арендованных.

    • Группы безопасности — SSH-access_ru.AZ-1 и 1c-vm.

    • Логин — 1c-vm.

    • Метод аутентификации — Публичный ключ и Пароль.

    • Публичный ключ — укажите ключ, созданный ранее.

    • Пароль — задайте пароль пользователя.

    • Имя хоста — 1c-vm.

    • Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.

    На странице Инфраструктура → Виртуальные машины убедитесь, что отображается виртуальная машина 1c-vm со статусом «Запущена».

  3. Протокол USB/IP не обеспечивает шифрование. Поэтому для безопасности передачи данных используйте VPN. Создайте VPN-туннель между виртуальной машиной и вашим компьютером.

2. Настройте USB-сервер

На этом шаге вы настроите доступ к USB-устройству с использованием утилиты usbip.

На локальном компьютере выполните команды:


  1. Установите usbipd:

    sudo apt update
    sudo apt install usbip
  2. Загрузите модуль ядра:

    sudo modprobe usbip-core
    sudo modprobe usbip-host
  3. Подключите USB-ключ и проверьте его:

    1. Выполните команду для получения списка всех подключенных устройств:

      usbip list --local

      Пример вывода:

      - 0483:a2ca (AktivCo RuToken ECK 3.0)
      1-2: USB device
    2. Предоставьте доступ из сети к USB-ключу. Выполните команду, заменив значение busid на ваш:

      sudo usbip bind --busid 1-2
    3. Проверьте статус:

      usbip list --local
  4. Разрешите входящий TCP-трафик по порту 3240:

    sudo ufw allow 3240/tcp
  5. Запустите сервер в фоновом режиме или как службу:

    • Запуск в фоновом режиме:

      sudo usbipd -D
    • Запуск как systemd-службу:

      sudo systemctl start usbipd
      sudo systemctl enable usbipd

3. Настройте виртуальную машину

На этом шаге вы настроите доступ к USB-устройству с использованием утилиты usbip.

  1. Подключитесь к виртуальной машине по SSH.

  2. Обновите систему и установите usbipd:

    sudo apt update
    sudo apt install linux-tools-generic hwdata
    sudo update-alternatives --install /usr/local/bin/usbip usbip $(ls /usr/lib/linux-tools/*/usbip | tail -n1) 20
  3. Проверьте, что usbip установлена:

    usbip version
  4. Загрузите клиентский модуль:

    sudo modprobe usbip-core
    sudo modprobe vhci-hcd
  5. Проверьте, что виртуальная машина определяет USB-сервер:

    usbip list --remote <computer_vpn_ip_address>

    Где <computer_vpn_ip_address> — IP-адрес компьютера, к которому подключено USB-устройство, в сети VPN. Например, 10.0.1.2.

  6. Подключите USB-устройство:

    sudo usbip attach --remote <computer_vpn_ip_address> --busid <busid>

    Где:

    • <computer_vpn_ip_address> — IP-адрес компьютера, к которому подключено USB-устройство, в сети VPN.

    • <busid> — идентификатор устройства на компьютере.

  7. Проверьте подключение:

    1. Получите список подключенных устройств:

      usbip port
    2. Проверьте в системе:

      lsusb

      Должно появиться новое устройство.

4. Настройте удаленный доступ по RDP

На этом шаге вы настройте удаленный рабочий стол, чтобы пользователь мог подключаться к виртуальной машине и работать с 1С через тонкий клиент.

  1. Установите легкий рабочий стол XFCE и сервер xRDP:

    sudo apt install -y xfce4 xfce4-goodies xrdp
  2. Разрешите xRDP запускать XFCE для новых сессий:

    echo "startxfce4" > ~/.xsession
    sudo cp ~/.xsession /etc/skel/.xsession
  3. Добавьте пользователя xrdp в группу ssl-cert, иначе возможны ошибки при подключении:

    sudo adduser xrdp ssl-cert
  4. Перезапустите службу xRDP и включите ее автозапуск:

    sudo systemctl restart xrdp
    sudo systemctl enable xrdp
    sudo systemctl status xrdp
  5. Разрешите входящий TCP-трафик по порту 3389:

    sudo ufw allow 3389/tcp
    Внимание

    Не открывайте порт 3389 в публичный интернет. Доступ к RDP должен осуществляться только через VPN-туннель.

  6. Подключитесь к виртуальной машине с локального компьютера с помощью любого RDP-клиента (Windows: mstsc, Linux: remmina, macOS: Microsoft Remote Desktop), указав в качестве адреса IP-адрес виртуальной машины в VPN-туннеле.

5. Скачайте дистрибутивы 1С, КриптоПро CSP

На этом шаге вы скачаете тонкий клиент 1С:Предприятие и загрузите дистрибутив на виртуальную машину.

Примечание

В этом руководстве скачивается и устанавливается 1С:Предприятие 8.3. Если вы используете другое поколение платформы, внесите необходимые изменнения в команды.

  1. На локальный компьютер скачайте:

  2. Загрузите файлы на виртуальную машину, например через scp . В терминале или командной строке компьютера выполните команду для каждого установочного пакета:

    scp -i <private_ssh_key> <package-name> <user>@<vm_public_ip>:/tmp/

    Где:

    • <private_ssh_key> — приватная часть SSH-ключа и путь до нее.

    • <package-name> — полное название скаченного файла дистрибутива.

    • <user> — логин пользователя виртуальной машины.

    • <vm_public_ip> — публичный IP-адрес виртуальной машины.

    Файлы будут сохранены во временной папке виртуальной машины.

6. Установите 1С на виртуальную машину

На этом шаге вы установите тонкий клиент 1С:Предприятие и настроите виртуальную машину как удаленное рабочее место для просмотра и подписания документов.

  1. Откройте сессию терминала с подключением к виртуальной машине.

  2. Обновите систему и установите зависимости, необходимые для работы тонкого клиента 1С:

    echo "ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true" | sudo debconf-set-selections
    sudo apt install -y libwebkit2gtk-4.0-37 libgsf-1-114 imagemagick unixodbc ttf-mscorefonts-installer
  3. Распакуйте архив:

    cd /tmp
    tar -xzf <1c-installer>

    Где <1c-installer> — название файла дистрибутива 1C.

  4. Запустите установщик и следуйте его указаниям:

    chmod +x setup-training-8.5.1.1150-x86_64.run
    sudo ./setup-training-8.5.1.1150-x86_64.run
  5. Проверьте, что тонкий клиент установлен:

    which 1c
    1c --version

    В ответе должна отобразиться версия установленного клиента.

7. Установите КриптоПро CSP и драйверы USB-ключа

На этом шаге вы установите на виртуальную машину криптопровайдер и драйверы USB-ключа.

  1. Убедитесь, что USB-ключ подключен к виртуальной машине через usbip:

    lsusb
    usbip port

    В ответе должно вернуться устройство вашего ключа. Например, AktivCo RuToken ECK 3.0.

  2. Распакуйте архив и установите КриптоПро CSP.

    cd /tmp
    tar xzf linux-amd64.tgz
    cd linux-amd64_deb
    sudo ./install.sh
  3. Установите дополнительные пакеты для поддержки считывателей и токенов:


    sudo dpkg -i cprocsp-rdr-pcsc-64_*.amd64.deb
    sudo dpkg -i cprocsp-rdr-rutoken-64_*.amd64.deb
  4. Установите и запустите службу PC/SC, которая обеспечивает взаимодействие с USB-токенами:

    sudo apt install -y pcscd libccid opensc
    sudo systemctl enable pcscd
    sudo systemctl start pcscd
    sudo systemctl status pcscd
  5. Проверьте, что USB-ключ определяется системой. Установите драйверы ключа в зависимости от производителя:


    1. Скачайте драйверы с официального сайта RuToken:

      wget https://www.rutoken.ru/.../rutoken-drivers-.tar.gz
      tar xzf rutoken-drivers-.tar.gz
      cd rutoken-drivers-*
      sudo ./install.sh
    2. Проверьте, что ключ виден:

      /opt/rutoken/bin/rtKeys --list
  6. Проверьте, что КриптоПро видит контейнеры на USB-ключе:

    /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -verifyc -fq

    В ответе должны отобразиться доступные ключевые контейнеры.

  7. Если вы используете USB-ключ RuToken, настройте считыватель:

    а. Просмотрите доступные считыватели:

    /opt/cprocsp/bin/amd64/list_pcsc
    1. Добавьте считыватель:

    sudo /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add 'Aktiv Rutoken ECP 00 00'
  8. Установите корневой сертификат удостоверяющего центра:

    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
  9. Проверьте, что контейнер доступен и подпись формируется:

    /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».

8. Настройте автоматическое переподключение

При разрыве сетевого соединения USB-ключ отключается от виртуальной машины. Для восстановления требуется ручное переподключение.

Чтобы избежать этого, настройте автоматическое переподключение.

  1. Создайте файл службы systemd:

    sudo nano /etc/systemd/system/usbip-reconnect.service
  2. Вставьте в него код и сохраните:

    # /etc/systemd/system/usbip-reconnect.service
    [Unit]
    Description=USBIP Auto Reconnect Service
    After=network.target
    [Service]
    Type=simple
    ExecStart=/usr/local/bin/usbip-reconnect.sh
    Restart=always
    RestartSec=10
    User=root
    Group=root
    [Install]
    WantedBy=multi-user.target
  3. Создайте файл скрипта:

    sudo nano /usr/local/bin/usbip-reconnect.sh
  4. Вставьте в него код и сохраните:

    #!/bin/bash
    # /usr/local/bin/usbip-reconnect.sh
    USBIP_SERVER="10.0.1.2" # внутренний VPN-адрес USB-сервера
    BUSID="1-2" # BUSID устройства
    PORT=3240
    CHECK_INTERVAL=30
    while true; do
    if nc -z -w 3 "$USBIP_SERVER" "$PORT" 2>/dev/null; then
    if ! usbip port | grep -q "$BUSID"; then
    echo "$(date): Подключение USB-ключа $BUSID с $USBIP_SERVER"
    usbip detach --port=$(usbip port | grep "$BUSID" | awk '{print $2}' | tr -d ':') 2>/dev/null
    usbip attach --remote "$USBIP_SERVER" --busid "$BUSID"
    fi
    else
    echo "$(date): Сервер $USBIP_SERVER:$PORT недоступен"
    fi
    sleep "$CHECK_INTERVAL"
    done
  5. Сделайте файл исполняемым:

    sudo chmod +x /usr/local/bin/usbip-reconnect.sh
  6. Перезагрузите конфигурацию systemd и запустите службу:

    sudo systemctl daemon-reload
    sudo systemctl enable usbip-reconnect
    sudo systemctl start usbip-reconnect

9. Проверьте подписание документа через USB-ключ

На этом шаге вы проверите, что тонкий клиент 1С может использовать USB-ключ для подписания документов.

  1. Подключитесь к виртуальной машине по RDP.

  2. Запустите тонкий клиент 1С:

    1c
  3. В окне запуска 1С добавьте новую информационную базу:

    1. Нажмите Добавить в список → Добавление информационной базы.

    2. В поле Наименование введите произвольное название, например RemoteBase.

    3. В поле Расположение выберите На сервере 1С:Предприятия.

    4. Укажите адрес вашего сервера 1С, например 1c.example.com.

    5. В поле Имя информационной базы укажите название базы на сервере.

  4. Подключитесь к базе под своей учетной записью.

  5. Откройте документ, который требует подписания.

  6. Нажмите кнопку Подписать или аналогичную в вашей конфигурации.

  7. В диалоговом окне выберите сертификат, соответствующий USB-ключу.

  8. Введите PIN-код USB-ключа.

Если подпись сформирована успешно, в 1С появится уведомление, а в документе отобразится отметка о подписи.

Результат

Вы научились пробрасывать USB-ключи с локального компьютера на виртуальную машину в облаке Cloud.ru Evolution и использовать их для подписания документов в 1С.