Подробный гайд: Диагностика SSSD, если он не видит сертификаты на РуТокен ЭЦП 3.0 NFC - Часть 2
6. Отдельная важная история: ГОСТ-сертификат
РуТокен ЭЦП 3.0 NFC часто используется с российскими ГОСТ-сертификатами. Это критично. Если на РуТокен ЭЦП 2.0 был сертификат RSA/EC, а на РуТокен ЭЦП 3.0 NFC вы записали ГОСТ-сертификат, то проблема может быть не в токене, а в том, что стек аутентификации не работает с ГОСТ.
Проверьте, какой алгоритм у сертификата. Сначала выгрузите сертификат с токена.
Посмотрите список:
pkcs11-tool --module "$MOD" --login --pin 'ВАШ_PIN' --list-objects --type cert
Например, если ID: 01, выгрузите:
pkcs11-tool --module "$MOD" --login --pin 'ВАШ_PIN' \
--read-object --type cert --id 01 --output-file /tmp/token-cert.der
Преобразуйте в PEM:
openssl x509 -inform DER -in /tmp/token-cert.der -out /tmp/token-cert.pem
Посмотрите содержимое:
openssl x509 -in /tmp/token-cert.pem -noout -text
Вас интересуют строки:
Signature Algorithm: ...
Public Key Algorithm: ...
X509v3 Extended Key Usage: ...
Если там что-то вроде:
Signature Algorithm: GOST R 34.10-2012 with GOST R 34.11-2012
Public Key Algorithm: GOST R 34.10-2012
то очень вероятно, что именно в этом причина.
Почему:
- OpenSSL в дистрибутиве может не иметь полноценной поддержки ГОСТ.
- Даже если OpenSSL формически видит сертификат, Kerberos PKINIT для AD обычно ожидает RSA/EC-сертификаты, а не ГОСТ.
- SSSD может отбрасывать сертификат, если не может проверить цепочку или использовать механизм подписи.
- РуТокен ЭЦП 2.0 у вас мог работать, потому что там был не ГОСТ-сертификат, а совместимый RSA/EC.
Что делать
Если вам нужна именно аутентификация в AD через SSSD/Kerberos PKINIT, используйте тестовый сертификат RSA или EC, например:
Signature Algorithm: sha256WithRSAEncryption
Public Key Algorithm: rsaEncryption
или:
Signature Algorithm: ecdsa-with-SHA256
Public Key Algorithm: id-ecPublicKey
Если ГОСТ обязателен для других целей, это не значит, что тот же сертификат можно использовать для входа через SSSD/AD PKINIT. Это разные сценарии.
7. Проверка цепочки доверия
У вас:
pam_cert_db_path = /etc/ssl/certs/ca-certificates.crt
Это нормально для OpenSSL-варианта SSSD, если это файл с доверенными CA.
Проверьте сертификат:
openssl verify -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/token-cert.pem
Если нужно проверить назначение клиентской аутентификации:
openssl verify -purpose sslclient -CAfile /etc/ssl/certs/ca-certificates.crt /tmp/token-cert.pem
Если проверка не проходит:
- Добавьте корневой и промежуточные CA в систему.
- Выполните:
update-ca-certificates
- Убедитесь, что сертификат не просрочен.
- Проверьте
Extended Key Usage.
Для входа по смарт-карте желательно, чтобы в сертификате был один из назначений:
TLS Web Client Authentication
или Microsoft Smart Card Logon:
Smart Card Logon
8. Проверка p11-kit и модуля РуТокен
Посмотрите зарегистрированные модули:
p11-kit list-modules
В списке должен быть модуль РуТокен, например:
librtpkcs11ecp.so
Если его нет, создайте файл модуля.
Сначала найдите библиотеку:
MOD=$(find /usr/lib /lib -name 'librtpkcs11ecp.so*' 2>/dev/null | head -n1)
echo "$MOD"
Создайте файл для p11-kit:
cat > /etc/pkcs11/modules/librtpkcs11ecp.module <<EOF
module: $MOD
EOF
chmod 644 /etc/pkcs11/modules/librtpkcs11ecp.module
Перезапустите сервисы:
systemctl restart pcscd
systemctl restart sssd
Снова проверьте:
p11-kit list-tokens
9. Если мешает модуль OpenSC
Иногда в системе одновременно установлены:
- родной модуль РуТокен
librtpkcs11ecp.so; - модуль OpenSC
opensc-pkcs11.so.
SSSD через p11-kit может видеть токен через OpenSC, но сертификаты или ключи при этом не читает нормально, особенно если речь о ГОСТ или специфичных объектах РуТокен.
Проверьте модули:
p11-kit list-modules
Если там есть opensc, можно временно, только для диагностики, убрать его:
mkdir -p /root/p11-backup
mv /usr/share/p11-kit/modules/opensc* /root/p11-backup/ 2>/dev/null || true
mv /etc/pkcs11/modules/opensc* /root/p11-backup/ 2>/dev/null || true
Затем:
systemctl restart pcscd
systemctl restart sssd
Если после этого токен заработал, значит проблема была в конфликте модулей. Потом либо верните OpenSC, если он нужен другим приложениям, либо настройте приоритеты/исключения так, чтобы для РуТокен использовался родной модуль.
10. Что смотреть в логах SSSD
У вас уже включён высокий уровень отладки:
debug_level=10
Перезапустите сервис и повторите попытку входа:
systemctl restart sssd
Смотрите:
grep -R "p11_child\|certificate\|PKCS#11\|cert" /var/log/sssd/
Или:
tail -f /var/log/sssd/sssd_pam.log
Также полезно:
journalctl -u sssd --since "10 minutes ago"
Типичные диагностические признаки:
| Сообщение/поведение в логах | Вероятная причина |
|---|---|
no matching token |
не совпадает p11_uri |
No certificates found |
сертификат невидим, не загружен, закрыт, не совпадает фильтр |
certificate verification failed |
нет цепочки доверия, истёк сертификат, неверный pam_cert_db_path |
no private key found |
нет ключа, другой CKA_ID, ключ недоступен пользователю |
C_Login failed |
неверный PIN, токен заблокирован |
CKR_TOKEN_NOT_PRESENT |
проблема с pcscd, USB, CCID, драйвером |
unsupported algorithm / ошибки парсинга |
ГОСТ или неподдерживаемый алгоритм |
| сертификат найден, но пользователь не найден | проблема маппинга сертификата на AD-объект |
Информация предоставлена в ознакомительных целях. Применение описанных настроек в системах, должно осуществляться только после согласования с ответственными за информационную безопасность и в соответствии с требованиями ФСТЭК, ФСБ и иных уполномоченных органов.