Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 1
Ошибка
ERROR:pam_pkcs11.c:646: no valid certificate which meets all requirements found
Error 2336L No matching certificate found
Обычно означает одно из четырёх:
pam_pkcs11видит токен, но не находит на нём подходящий сертификат.- Сертификат есть, но он не проходит проверку: просрочен, нет доверия к УЦ, нет цепочки, неправильные Key Usage / Extended Key Usage, проблема с CRL/временем/ГОСТ.
- Сертификат проходит проверку, но не сопоставлен локальному пользователю в
subject_mappingили другом mapper. - Используется не тот PKCS#11-модуль, не тот слот, 32/64-битная несовместимость, сертификат без привязанного приватного ключа или ключ имеет другой
CKA_ID.
Гайд для Red OS 8 с акцентом на устранение именно этой ошибки.
0. Безопасность перед правкой PAM
Перед изменениями держите открытым root-терминал. Ошибка в PAM может временно заблокировать вход.
Сделайте резервные копии:
sudo cp -a /etc/pam.d /root/pam.d.backup-$(date +%F-%H%M)
[ -d /etc/pam_pkcs11 ] && sudo cp -a /etc/pam_pkcs11 /root/pam_pkcs11.backup-$(date +%F-%H%M)
Если используете authselect, проверьте:
authselect current
Если authselect управляет PAM, ручные правки /etc/pam.d/system-auth, /etc/pam.d/password-auth и т.п. могут быть перезаписаны. Для продакшена лучше создавать кастомный профиль authselect. Для диагностики можно использовать отдельный тестовый PAM-сервис, например rutoken-test, о нём ниже.
1. Установите необходимые пакеты
В Red OS 8 обычно используются dnf, pcsc-lite, opensc, pam_pkcs11, p11-kit.
Минимальный набор:
sudo dnf install pcsc-lite pcsc-lite-ccid opensc pam_pkcs11 p11-kit openssl gnutls-utils
Опционально для диагностики:
sudo dnf install pcsc-tools nss-tools pamtester
Если каких-то пакетов нет в репозиториях, имена могут немного отличаться.
Ищите так:
dnf search pcsc
dnf search ccid
dnf search pam_pkcs11
dnf search nss-tools
2. Установите драйверы/библиотеку Рутокен ЭЦП
Для Рутокен ЭЦП нужен не только общий opensc, но и родная PKCS#11-библиотека Рутокен, обычно это librtpkcs11ecp.so.
Проверьте, есть ли она:
find /usr/lib64 /usr/lib -name 'librtpkcs11ecp.so*' 2>/dev/null
Пример ожидаемого пути:
/usr/lib64/librtpkcs11ecp.so
или:
/usr/lib/librtpkcs11ecp.so
Если библиотеки нет, установите пакеты Рутокен для Red OS 8.
В репозиториях они могут называться примерно так:
dnf search rutoken
dnf provides '*/librtpkcs11ecp.so*'
Если пакеты скачаны с сайта Рутокен в виде RPM, установка обычно такая:
sudo dnf install ./rutoken-ecp-*.rpm
или:
sudo rpm -ivh rutoken-ecp-*.rpm
sudo ldconfig
После установки снова найдите библиотеку и запомните путь.
Дальше я буду использовать переменную:
export RUTOKEN_MOD=/usr/lib64/librtpkcs11ecp.so
Если у вас путь другой, например /usr/lib/librtpkcs11ecp.so, поправьте команды.
Проверьте, что библиотека 64-битная, если система 64-битная:
file "$RUTOKEN_MOD"
Для PAM на 64-битной системе нужна 64-битная библиотека.
Если есть только librtpkcs11ecp.so.1, можно использовать её или сделать симлинк:
sudo ln -s /usr/lib64/librtpkcs11ecp.so.1 /usr/lib64/librtpkcs11ecp.so
3. Запустите и проверьте PC/SC
Рутокен должен определяться как смарт-карта через pcscd.
sudo systemctl enable --now pcscd.service
sudo systemctl enable --now pcscd.socket 2>/dev/null || true
sudo systemctl restart pcscd.service
Проверьте статус:
systemctl status pcscd.service
journalctl -u pcscd --no-pager | tail -50
Вставьте токен и проверьте, виден ли он:
lsusb | grep -iE 'rutoken|aktiv'
Если есть pcsc-tools:
pcsc_scan
Утилита покажет читатель и карту. Для выхода — Ctrl+C.
Если pcsc_scan нет, можно проверить через opensc-tool:
opensc-tool -l
или через pkcs11-tool, но уже с библиотекой Рутокен.
Если токен не виден:
- попробуйте другой USB-порт, желательно USB 2.0;
- не используйте USB-хаб;
- если это виртуальная машина, проверьте проброс USB-устройства;
- проверьте
dmesgпосле вставки токена:
dmesg | tail -30
4. Проверьте видимость токена через PKCS#11 Рутокен
Используйте именно библиотеку Рутокен, не только opensc-pkcs11.so.
Список слотов:
pkcs11-tool --module "$RUTOKEN_MOD" --list-slots
Должен быть слот с токеном Рутокен.
Проверьте сертификаты:
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type cert
Проверьте приватные ключи:
pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type privkey
Вас интересует наличие пары:
X.509 cert— сертификат;Private key— соответствующий приватный ключ.
Очень важно: у сертификата и приватного ключа желательно должен совпадать ID/CKA_ID.
Пример:
Certificate object; X.509 cert with label "user cert"
ID: 01
Private key object; ...
ID: 01
- Если сертификаты есть, а ключей нет, или ID разные,
pam_pkcs11может не считать сертификат пригодным для входа. - Если сертификат не виден без
--login, проверяйте с--login. На некоторых токенах объекты могут быть видны только после входа с PIN-пользователя.
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.