Гайд по устранению ошибки CKR_ARGUMENTS_BAD (код 7) в КриптоПро CSP на Astra Linux - Часть 1
CKR_ARGUMENTS_BAD (7) — это не ошибка КриптоПро и не «токен не найден». Это стандартный код PKCS#11, и он означает: «в функцию PKCS#11 передали заведомо некорректный аргумент».
То есть токен у вас действительно жив, драйвер его видит, а вот слой, который с ним работает (модуль PKCS#11 + приложение + версии), несогласован. «Не те библиотеки» — вполне возможная причина, но ставить наугад нельзя: сначала надо выяснить, какой именно .so загружает ваше приложение и с какими параметрами он вызывается.
И важная поправка: это не «неверный PIN». Неверный PIN в PKCS#11 — это CKR_PIN_INCORRECT (0xA0 / 162). У вас ровно 7, значит проблема не в том, что вы ошиблись цифрами, а в том, как приложение обращается к токену.
1. Что именно означает «7» в вашем сценарии
Ошибка возникает в одной из функций PKCS#11.
Для «генерация ключа + ввод PIN»_candidates всего две:
| Функция | Что передаётся неправильно | Как выглядит в жизни |
|---|---|---|
C_Login |
неверный тип пользователя (CKU_USER / CKU_SO), пустой PIN, PIN не той длины, сессия не открыта |
ошибка сразу на вводе PIN |
C_GenerateKeyPair |
неверный шаблон ключа (CK_ATTRIBUTE[]), неподдерживаемый механизм (ГОСТ 256 вместо 512 и наоборот), неверный ID контейнера |
ошибка после ввода PIN, при генерации |
Дополнительно:
Кривые реализации в некоторых модулях возвращают CKR_ARGUMENTS_BAD вместо «правильного» кода, когда их просят о чём-то, чего они не умеют. Поэтому несовместимость версий CSP ↔ драйвер Рутокен ↔ прошивка токена — тоже очень частая причина именно семёрки.
2. Шаг 0. Снимаем «паспорт системы»
Выполните в терминале и сохраните вывод:
uname -m
cat /etc/os-release
cat /etc/astra_version 2>/dev/null
dpkg -l | grep -Ei 'cprocsp|rutoken|rtpkcs|opensc|pcsc'
ls -l /opt/cprocsp/bin/
ls -l /opt/cprocsp/lib/
Что смотрим:
- Архитектура.
x86_64,aarch64,e2k— от этого зависит, какие пакеты вам нужны и какой каталог в/opt/cprocsp/bin/(amd64,arm64,e2k…). - Разрядность установленного CSP. Если система 64-битная, а в
/opt/cprocsp/bin/лежит толькоia32— вы поставили не тот комплект. - Версии.
cprocsp-base,cprocsp-rdr,librtpkcs11ecp— все номера важны. «CSP 5» — это слишком общо: между сборками 5.0 разные возможности.
3. Шаг 1. Самый важный тест — проверяем токен вне КриптоПро
Это сразу разделяет две большие вселенные: «виноват Рутокен/драйвер» и «виноват CryptoPro/приложение».
sudo apt install opensc pcscd pcsc-tools
# что вообще видно на USB
lsusb
# слоты и метки токенов
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-slots
# механизмы, которые токен реально поддерживает
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-mechanisms
# логинимся пользовательским PIN и смотрим объекты
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --login --list-objects
Путь к модулю может быть /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so или /usr/lib64/librtpkcs11ecp.so — узнайте его на шаге 4.
Интерпретация:
| Результат | Вывод |
|---|---|
--list-slots показывает токен, --login --list-objects работает |
Токен и PKCS#11-модуль исправны. Проблема в CryptoPro или в приложении, которое генерирует ключ. Переходите к шагу 3. |
--login падает с CKR_ARGUMENTS_BAD |
Проблема в модуле/драйвере Рутокен или в том, как pkcs11-tool вызывает логин. Обновляйте драйвер, проверяйте модель токена. |
--login падает с CKR_PIN_INCORRECT |
Вот тут уже реально PIN/блокировка. |
| Токен не виден вообще | Неправильный модуль, неправильная разрядность, либо токен работает через другой транспорт. |
Отдельно посмотрите поддержку ГОСТ:
pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --list-mechanisms | grep -i -E 'gost|3410'
Если в списке нет нужного вам ГОСТ Р 34.10-2012 256/512 — генерация таким модулем невозможна в принципе, и любое приложение получит ошибку аргументов/механизма.
Нюанс для Рутокен ЭЦП 2.0/3.0: эти токены работают с librtpkcs11ecp напрямую по USB, pcscd для них не обязателен. Если pcsc_scan их не показывает — это само по себе не ошибка.
4. Шаг 2. Ищем «не те библиотеки» — реально, а не на глаз
4.1. Находим все PKCS#11-модули в системе
sudo find /usr/lib /usr/lib64 /usr/local/lib /opt/cprocsp \
-iname '*pkcs11*.so*' -o -iname 'librtp*' 2>/dev/null
ldconfig -p | grep -Ei 'rtpkcs|pkcs11'
dpkg -L librtpkcs11ecp 2>/dev/null | grep '\.so'
4.2. Какой модуль нужен именно вашему токену
| Модель | Что должно быть |
|---|---|
| Рутокен ЭЦП 2.0 | librtpkcs11ecp.so из драйвера ЭЦП 2.0 / единого драйвера Рутокен |
| Рутокен ЭЦП 3.0 | librtpkcs11ecp.so из актуального единого драйвера с поддержкой 3.0 |
| Рутокен Lite / PIN / Touch / старые Рутокены | другой модуль; он не взаимозаменяем с rtpkcs11ecp |
Типичные ошибки установки:
- Поставили модуль от Рутокен Lite/PIN, а токен — ЭЦП 2.0/3.0 (или наоборот).
- Поставили старый
librtpkcs11.soвместоlibrtpkcs11ecp.so. - Установили и старый отдельный драйвер ЭЦП 2.0, и новый единый драйвер — в системе два модуля, приложение грузит не тот.
- Приложение настроено на
opensc-pkcs11.so. OpenSC токен может «увидеть», но ГОСТ-генерацию в том виде, в каком её ждёт CryptoPro, не обеспечить. - Скачали
.so«с другого компьютера» из другой версии — классический источникCKR_ARGUMENTS_BAD.
4.3. Проверяем разрядность и зависимости
file /usr/lib/librtpkcs11ecp.so
ldd /usr/lib/librtpkcs11ecp.so
- Для 64-битного приложения — 64-битный модуль.
- В
lddне должно бытьnot found. - Если ваше приложение 32-битное, нужен 32-битный комплект и Рутокен, и CSP (
ia32), а не толькоamd64.
4.4. Самый точный способ — посмотреть, что грузит приложение
strace -f -e trace=open,openat -o /tmp/csp.trace <команда запуска вашего приложения>
После воспроизведения ошибки:
grep -Ei 'pkcs11|rtpkcs' /tmp/csp.trace
Или:
LD_DEBUG=libs <команда запуска> 2>/tmp/ld.log
grep -i pkcs /tmp/ld.log
Это напрямую отвечает на ваш вопрос «может, не те библиотеки поставил». Вы увидите абсолютный путь к реально загружаемому модулю. Если там opensc-pkcs11.so или librtpkcs11.so вместо librtpkcs11ecp.so — вот она, причина.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.