Тащим ключи с Рутокен Lite
Думаю многим знакома ситуация, когда ФНС (или любой другой УЦ) записывает контейнер с ЭЦП на Рутокен, а в процессе использования возникает необходимость использования ЭЦП без самого Рутокена (например из файловой системы) и т.д.
Однако та же ФНС "отключает" флаг экспортируемости контейнера и при попытке экспорта ключа мы получаем ошибку, а в Центре управления Рутокен'ом есть возможность только экспортировать сертификат.
Также следует упомянуть, что существует популярная утилита Tokens.exe от СКБ Контур, однако у неё есть ряд недостатков:
- Утилита работает только на Windows
- Написана на HTML с использованием устаревшего ActiveXObject с связке с DLL
- Утилиту благополучно "выпилили" с сайта, поэтому приходится искать по всему интернету
Тащим ключи
1. Ищем контейнер
Рутокен Lite - не совсем флешка в привычном понимании, у него максимально облегченная файловая система, поэтому просто открыть его в проводнике не получится
Однако для этих целей можно воспользоваться утилитами от проекта OpenSC
Важно: Данная статья предполагает, что у вас уже установлены opensc-tool
и opensc-explorer
Поэтому подключаем Рутокен, открываем консоль и вводим opensc-tool --list-files
Среди всего списка необходимо найти директорию с 6 файлами, часть из которых доступна для чтения только после авторизации (read[CHV2]
). Сделать это легче всего по имени контейнера в КриптоПро, поскольку opensc-tool
декодирует ASCII текст:
Файл на скриншоте это name.key
, а директория с контейнером (выделена жёлтым) в нашем случае будет 3f00100010030a00
UPD от 05.08: Вероятнее всего все контейнеры действительно лежат по пути 1000/1003
. Соответственно при помощи команды asn1 искать по имени контейнера:
2. Выгрузка
Запускаем opensc-explorer
и переходим в директорию контейнера с помощью команды cd <путь>
Важно: Необходимо разделить путь директории на группы по 4 символа и убрать 3f00
, в нашем случае это будет 1000
, 1003
, 0a00
В директории файлы лежат в следующем порядке: name.key
, header.key
, primary.key
, masks.key
, primary2.key
, masks2.key
Теперь самый важный пункт - необходимо авторизоваться по PIN-коду пользователя (в противном случае Рутокен даст выгрузить только name.key
и header.key
). Сделать это можно с помощью команды verify CHV2 "PIN-код"
Теперь же просто копируем файлы контейнера в память компьютера с помощью команды get File_ID путь_назначения
На этом всё, мы успешно скопировали контейнер с Рутокен Lite в память нашего компьютера. Далее желательно "пролечить" контейнер, чтобы "включить" флаг экспортируемости, но на текущий момент решение ещё в разработке (оповещение о релизе будет в Telegram канале). To be continued...
Бонус. Экспорт приватного ключа
Для удобства использования ключа подписи, его можно экспортировать в формат .pem
(с которым умеет работать OpenSSL и прочие утилиты) с помощью моей онлайн-утилиты
В утилиту загружаем файлы header.key
, masks.key
и primary.key
, поле "Пароль" оставляем пустым (поскольку контейнеры на Рутокенах не имеют пароля т.к происходит авторизация по PIN-коду) и нажимаем "Извлечь", через несколько секунд скачается .pem
файл с приватным ключом.