Гайд по устранению ошибки CKR_ARGUMENTS_BAD (код 7) в КриптоПро CSP на Astra Linux - Часть 2
5. Шаг 3. Проверяем CryptoPro отдельно — два контрольных теста
Тест А. Контейнер на жёстком диске (HDIMAGE)
Тем же способом, которым вы создаёте контейнер на Рутокене, создайте контейнер на жёстком диске, с тем же алгоритмом (ГОСТ Р 34.10-2012).
- Работает → ядро CSP, лицензия и компоненты криптографии в порядке. Проблема в связке CSP ↔ токен.
- Тоже падает → проблема в установке/компонентах CSP или в самом приложении, и Рутокен тут ни при чём.
Тест Б. Консоль против графического интерфейса
Посмотрите, какие контейнеры CSP видит:
/opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifycontext
(на вашей архитектуре каталог может быть другим — смотрите ls /opt/cprocsp/bin/).
Затем попробуйте генерацию из консоли:
/opt/cprocsp/bin/amd64/csptest -keygen -help
Точный набор ключей (-container, -exchange, -provtype и т. п.) смотрите в help вашей версии — в разных сборках 5.0 они различаются. Не копируйте команды вслепую из старых инструкций для CSP 3.6/3.9.
Интерпретация:
| Результат | Вывод |
|---|---|
| Консоль создаёт контейнер на токене, GUI/браузер — нет | Виновато приложение/плагин: оно формирует неверный шаблон или неверно передаёт PIN. Лечится обновлением приложения/плагина, не драйвером. |
Консоль тоже падает с CKR_* |
Виновата связка CSP ↔ PKCS#11 ↔ токен. Лечится версиями и компонентами. |
| Консоль создаёт на HDIMAGE, но не на токене | Проблема именно в работе CSP с токеном: компонент считывателей, версия драйвера, формат контейнера. |
6. Шаг 4. Таблица «причина → как лечить»
А. Неподходящий / дублирующийся PKCS#11-модуль
Признак:
В системе несколько .so, в strace грузится не librtpkcs11ecp.
Лечение:
dpkg -l | grep -Ei 'rtpkcs|rutoken|opensc'— посмотреть, что стоит.- Удалить лишние/старые драйверы Рутокен (
sudo apt purge <имя_пакета>). - Оставить один актуальный единый драйвер Рутокен для Linux.
- В приложении явно указать абсолютный путь к нужному модулю, а не просто имя файла.
Б. Несовместимость версий CSP / драйвера / прошивки
Признак:
pkcs11-tool --login работает, CryptoPro — нет; или работает один алгоритм и не работает другой.
Лечение:
- Обновить CryptoPro CSP 5 до самого свежего сборника вашего канала поставки (не просто «пявёрка», а конкретная сборка).
- Обновить драйвер Рутокен до актуального единого.
- Проверить прошивку токена и её соответствие требованиям производителя для вашей модели CSP.
- Убедиться, что и CSP, и токен, и драйвер поддерживают нужный вам ГОСТ: 256-бит и 512-бит — это разные возможности, и 512-бит поддерживается не всеми комбинациями.
Прошивку токена обновляйте только утилитой производителя и только после резервного копирования ключей/сертификатов. Некоторые процедуры обновления стирают контейнеры.
В. Неподдерживаемый алгоритм / неверный шаблон генерации
Признак:
Ошибка именно на C_GenerateKeyPair, то есть после PIN.
Лечение:
- При создании контейнера выбирать ГОСТ Р 34.10-2012 256 бит (или 512, только если токен и драйвер это поддерживают).
- Не пытаться создать обменный контейнер на токене, который рассчитан только на подпись.
- Не использовать имя уже существующего контейнера — создавайте с новым уникальным именем.
- Если приложение позволяет выбирать механизм/PKCS#11-профиль — переключите на ГОСТ 2012, а не 2001.
Г. Неправильный логин (ошибка на вводе PIN)
Признак:
CKR_ARGUMENTS_BAD появляется до генерации.
Что проверить:
- Вводится пользовательский PIN, а не PUK и не PIN администратора (
CKU_USER, неCKU_SO). - На токене с несколькими контейнерами/персонализацией — не требуется ли отдельный PIN контейнера, а приложение передаёт общий.
- PIN передаётся без скрытых символов: лишний перевод строки при вставке из буфера, пробел, не та раскладка.
- Длина PIN укладывается в ограничения токена. Слишком длинный/пустой PIN в кривой реализации даёт именно
7.
Важно: не подбирайте PUK и не делайте --init-token — токен можно заблокировать без возможности восстановления.
Д. Не установлен компонент работы с токенами в CSP
Признак:
CSP видит USB-устройство, но не работает с контейнерами на нём.
Лечение:
dpkg -l | grep cprocsp
find /opt/cprocsp -iname '*pkcs*' 2>/dev/null
Убедитесь, что установлен полный комплект компонентов вашего дистрибутива CSP, включая пакеты считывателей/токенов (имена вида …-rdr…). В Linux CSP поставляется набором пакетов, и «установил CSP» часто означает «установил только base + kc1».
Е. Неправильно указан модуль в приложении
Место настройки зависит от того, чем вы генерируете ключ:
- Браузер / плагин — настройки криптографического устройства, путь к модулю.
- Java-приложение (1С, банковские клиенты) — файл вида
sunpkcs11.cfg:
name = Rutoken
library = /usr/lib/librtpkcs11ecp.so
slotListIndex = 0
- СБИС / Контур / ФСРАР / собственная программа — свой параметр «библиотека PKCS#11» в настройках криптографии.
Если там прописан opensc-pkcs11.so или путь к несуществующему файлу — замените на реальный путь из шага 4.
7. Шаг 5. Чистая установка «правильного комплекта»
Если после диагностики понятно, что набор библиотек смешанный, делайте так — в этом порядке:
- Выгрузить/закрыть все приложения, работающие с токеном (браузеры, 1С, клиенты).
dpkg -l | grep -Ei 'rtpkcs|rutoken|cprocsp'— записать, что стоит.- Удалить все старые драйверы Рутокен (включая старые отдельные пакеты ЭЦП).
- Скачать с официального сайта Рутокен единый драйвер для Linux под вашу архитектуру и версию Astra. Установить.
- Переподключить токен. Проверить:
pkcs11-tool --module <путь к librtpkcs11ecp.so> --list-slots
pkcs11-tool --module <путь> --login --list-objects
Пока этот тест не работает — дальше ничего не настраивайте.
6. Установить/обновить CryptoPro CSP 5 полным комплектом из вашего дистрибутива. Проверить лицензию.
7. Если работаете через браузер — установить совместимую пару «КриптоПро ЭЦП Browser plug-in + CSP».
8. Полностью перезапустить приложение (браузер — с закрытием всех процессов, не просто вкладку).
9. Создать контейнер с новым именем, ГОСТ Р 34.10-2012, на токене.
8. Шаг 6. Если хочется увидеть падающую функцию точно
Для обращения в техподдержку (и для себя) полезно снять трассировку PKCS#11.
Вариант 1. pkcs11-spy из OpenSC
Если в вашем пакете есть pkcs11-spy.so:
sudo find / -name 'pkcs11-spy*' 2>/dev/null
Это «прозрачный» модуль-перехватчик: приложение обращается к нему, он пишет все вызовы и аргументы в лог и передаёт их настоящему модулю. В качестве настоящего модуля указывается librtpkcs11ecp.so (через переменную окружения PKCS11SPY, имя и поведение зависят от сборки OpenSC).
В логе вы увидите примерно:
C_GenerateKeyPair mechanism=... pulPublicKey=... ulPublicKeyAttributeCount=...
--> CKR_ARGUMENTS_BAD
Именно это однозначно показывает, какой аргумент плохой.
Вариант 2. Запуск из консоли
Многие GUI обрезают ошибку до «Код ошибки: 7». В консоли csptest/утилита приложения часто печатает больше: имя функции, HRESULT, номер атрибута.
Вариант 3. strace
Даже без PKCS#11-трейсера видно, какой .so загружается и какие файлы конфигурации читает приложение (шаг 4.4).
9. Чего делать не стоит
- Ставить
.so«отсюда и отсюда» поверх работающих библиотек. - Форматировать токен / делать
init-token/ подбирать PUK. - Отключать в Astra мандатный контроль и PARROT «для проверки» — при
CKR_ARGUMENTS_BADэто почти никогда не причина, а уровень защищённости вы потеряете. - Генерировать ключ в существующий контейнер с чужим именем/алгоритмом.
- Запускать графическое приложение от
root/sudo— токен принадлежит сессии обычного пользователя.
10. Чек-лист
Три теста, которые в 90 % случаев сразу локализуют проблему:
pkcs11-tool --module …librtpkcs11ecp.so --login --list-objects— работает ли токен вне CryptoPro.- Создать контейнер на HDIMAGE тем же способом — работает ли вообще генерация в CSP.
strace … | grep pkcs11— какой модуль реально грузится.
Прогноз:
Токен виден и CSP стоит, значит с большой вероятностью у вас либо два разных PKCS#11-модуля и приложение грузит не тот, либо несовместимая пара «сборка CSP 5 ↔ драйвер Рутокен ↔ прошивка», либо приложение просит алгоритм/тип контейнера, который этот токен в данной конфигурации не поддерживает.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.