Подробный гайд: Диагностика SSSD, если он не видит сертификаты на РуТокен ЭЦП 3.0 NFC - Часть 1

Подробный гайд по диагностике SSSD, если он не видит сертификаты на РуТокен ЭЦП 3.0 NFC. Разбор p11_uri, настройки PAM, логов и поддержки ГОСТ.

2026.10.19                  


Подробный гайд: Диагностика SSSD, если он не видит сертификаты на РуТокен ЭЦП 3.0 NFC - Часть 1Подробный гайд: Диагностика SSSD, если он не видит сертификаты на РуТокен ЭЦП 3.0 NFC - Часть 1

В конфигурации самая вероятная причина уже видна — это строка p11_uri.

p11_uri = PKCS11:model=Rutoken%20ECP%20NFC;serial=424a928f

Для SSSD это не просто подсказка, а фильтр:

p11_child будет искать сертификаты только на PKCS#11-токене, у которого совпадают указанные атрибуты model, serial и т.п. РуТокен ЭЦП 3.0 NFC и РуТокен ЭЦП 2.0 часто отличаются тем, как они представляются через PKCS#11: model, token label, serial, доступность атрибутов до входа, объектность сертификатов и ключей. Поэтому один токен проходит фильтр и содержит видимые объекты, а второй — нет.




1. Как вообще работает сертификатная аутентификация в SSSD

Упрощённо цепочка такая:

  1. PAM вызывает pam_sss.
  2. SSSD запускает p11_child.
  3. p11_child через p11-kit/PKCS#11 открывает токен.
  4. Применяется фильтр p11_uri, если он задан.
  5. Ищутся объекты:
    • сертификат CKO_CERTIFICATE;
    • приватный ключ CKO_PRIVATE_KEY.
  6. Сертификат должен быть:
    • видим через PKCS#11;
    • понятен OpenSSL/NSS;
    • проверен по цепочке доверия;
    • сопоставлен с пользователем AD.
  7. Если сертификат найден, но нет подходящего приватного ключа, SSSD обычно такой вариант не использует.
  8. Дальше уже идёт Kerberos/PKINIT или другой механизм аутентификации.

На практике сообщение «SSSD не видит сертификат» может означать любую из этих проблем:

  • токен не совпал по p11_uri;
  • PKCS#11-модуль не видит токен;
  • сертификат невидим без входа или хранится в админской области;
  • сертификат есть, но нет приватного ключа с тем же CKA_ID;
  • сертификат ГОСТ, а OpenSSL/Kerberos/SSSD в вашей сборке его не обрабатывает;
  • цепочка сертификата не проверяется;
  • сертификат найден, но не маппится на пользователя AD;
  • PAM-сервис не разрешён в pam_p11_allowed_services.

2. Самая вероятная причина у вас: жёсткий p11_uri

У вас задано:

p11_uri = PKCS11:model=Rutoken%20ECP%20NFC;serial=424a928f

Это означает: искать только токен с моделью Rutoken ECP NFC и серийным номером 424a928f.

Для РуТокен ЭЦП 3.0 NFC атрибуты могут быть, например:

model: Rutoken ECP 3.0 NFC
label: Rutoken ECP 3.0 NFC
serial: другой

Либо серийный номер присутствует, но не читается до C_Login, либо строка модели отличается. В итоге p11_child просто не считает, что это нужный токен.

Быстрая проверка

Временно уберите фильтр:

[pam]
pam_cert_auth = True
p11_child_timeout = 240
pam_cert_db_path = /etc/ssl/certs/ca-certificates.crt
pam_p11_allowed_services = +cinnamon-screensaver,+mate-screensaver,+lightdm
#p11_uri = PKCS11:model=Rutoken%20ECP%20NFC;serial=424a928f
debug_level=10

Затем:

sssctl config-check
systemctl restart sssd

Попробуйте вход или разблокировку. Если после этого РуТокен ЭЦП 3.0 NFC стал виден — причина именно в p11_uri.


3. Как правильно задать p11_uri для РуТокен ЭЦП 3.0 NFC

Сначала нужно узнать реальные атрибуты токена.

Установите инструменты, если их нет:

apt install pcscd pcsc-tools libccid gnutls-bin p11-kit

Проверьте токены:

p11-kit list-tokens

Или удобнее:

p11tool --list-tokens

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

Token 0:
  URL: pkcs11:model=Rutoken%20ECP%203.0%20NFC;manufacturer=Aktiv%20Co.;serial=XXXXXXXX;token=Rutoken%20ECP%203.0%20NFC
  Type: Hardware token
  Manufacturer: Aktiv Co.
  Model: Rutoken ECP 3.0 NFC
  Serial: XXXXXXXX
  Module: /usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so

Именно строку URL надо использовать как основу.

Например:

p11_uri = pkcs11:model=Rutoken%20ECP%203.0%20NFC

или, если нужно жёстко привязаться к конкретному токену:

p11_uri = pkcs11:serial=XXXXXXXX;model=Rutoken%20ECP%203.0%20NFC

или по метке токена:

p11_uri = pkcs11:token=Rutoken%20ECP%203.0%20NFC

Важно:

  • пробелы кодируйте как %20;
  • регистр серийного номера может иметь значение;
  • лучше использовать строчный вариант pkcs11:;
  • не задавайте серийный номер «от другого токена».

Если у вас в системе могут использоваться и ЭЦП 2.0, и ЭЦП 3.0, не привязывайтесь к одному серийному номеру. Лучше либо убрать p11_uri, либо использовать только модель/производителя, если это допустимо политикой безопасности.




4. Проверка, что токен вообще виден через PKCS#11

Найдите библиотеку РуТокен:

find /usr/lib /lib -name 'librtpkcs11ecp*.so*' 2>/dev/null

Обычно путь один из:

/usr/lib/librtpkcs11ecp.so
/usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so
/usr/lib/aarch64-linux-gnu/librtpkcs11ecp.so

Задайте переменную:

MOD=/usr/lib/x86_64-linux-gnu/librtpkcs11ecp.so

Проверьте слоты:

pkcs11-tool --module "$MOD" --list-slots

Или:

pkcs11-tool --module "$MOD" --list-token-slots

Если токен не виден, проверяйте pcscd.

systemctl status pcscd
systemctl restart pcscd
pcsc_scan

В pcsc_scan токен должен появляться при подключении.

Если pcsc_scan не видит РуТокен:

  1. Проверьте другой USB-порт.
  2. Избегайте USB-хабов.
  3. Если это NFC-исполнение, попробуйте подключить как обычный контактный токен.
  4. Обновите пакеты pcscd, libccid.
  5. Проверьте lsusb:
lsusb | grep -i Aktiv

5. Проверка сертификата и приватного ключа на токене

Очень важный момент: SSSD нужен не просто сертификат, а пара «сертификат + доступный приватный ключ».

Проверьте сертификаты без входа:

pkcs11-tool --module "$MOD" --list-objects --type cert

Потом с PIN-пользователя:

pkcs11-tool --module "$MOD" --login --pin 'ВАШ_PIN' --list-objects --type cert

Проверьте приватные ключи:

pkcs11-tool --module "$MOD" --login --pin 'ВАШ_PIN' --list-objects --type privkey

Сравните ID и label у сертификата и приватного ключа.

Пример условно:

Certificate Object; type = X.509 cert
  label:      user
  ID:         01

Private key object; type = EC key
  label:      user
  ID:         01

Если:

  • сертификат виден только с администраторским PIN;
  • сертификат виден, а приватный ключ нет;
  • у сертификата и ключа разные ID;
  • ключ не имеет признаков использования для подписи;

то SSSD может не использовать такой сертификат.


В этом случае нужно корректно записать пару на токен так, чтобы:

  1. Объекты были доступны пользователю, не только администратору токена.
  2. Сертификат был виден через обычный пользовательский PIN.
  3. Приватный ключ был на том же токене.
  4. CKA_ID сертификата и ключа совпадали.
  5. Ключ имел атрибуты для подписи/аутентификации.

Если вы используете инструменты РуТокен, пишите сертификат и ключ как связанную пару, с одинаковым идентификатором/меткой.


Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

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