Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 2

Подробный гайд по настройке Рутокен ЭЦП в Red OS 8: пошагово решаем ошибку pam_pkcs11 «No matching certificate found» при входе в систему.

2026.10.16                  


Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 2Гайд по настройке Рутокен ЭЦП в Red OS 8: pam_pkcs11 «No matching certificate found» - Часть 2

5. Достаньте сертификат и проверьте его вручную

Сначала посмотрите список сертификатов:

pkcs11-tool --module "$RUTOKEN_MOD" --login --list-objects --type cert

Найдите ID сертификата, например 01, затем сохраните его:

pkcs11-tool --module "$RUTOKEN_MOD" --login --read-object --type cert --id 01 --output-file /tmp/rutoken-cert.der

Если ID другой, замените 01.


Преобразуйте в PEM:

openssl x509 -inform DER -in /tmp/rutoken-cert.der -out /tmp/rutoken-cert.pem



Посмотрите данные сертификата:

openssl x509 -in /tmp/rutoken-cert.pem -noout -text | less

Проверьте срок действия:

openssl x509 -in /tmp/rutoken-cert.pem -noout -dates
date

Если системное время неверное, сертификат может казаться недействительным:

timedatectl
sudo timedatectl set-ntp true

Проверьте расширения:

openssl x509 -in /tmp/rutoken-cert.pem -noout -text | grep -A3 -iE 'Key Usage|Extended Key Usage|Basic Constraints'

Для входа по смарт-карте обычно желательно наличие:

X509v3 Key Usage:
    Digital Signature
X509v3 Extended Key Usage:
    TLS Web Client Authentication

Иногда может использоваться также Smart Card Logon или другие клиентские EKU. Если сертификат выдан только для подписи документов и не имеет клиентской аутентификации, pam_pkcs11 может его отвергнуть.


Если openssl не может нормально прочитать сертификат и ругается на неизвестные алгоритмы, вероятно, сертификат ГОСТ. Об этом отдельно ниже.


6. Проверьте цепочку доверия

pam_pkcs11 может требовать, чтобы сертификат был подписан доверенным УЦ.

Создайте каталог для корневых и промежуточных сертификатов:

sudo mkdir -p /etc/pam_pkcs11/cacertificates
sudo mkdir -p /etc/pam_pkcs11/crl

Положите туда сертификаты УЦ в формате PEM.


Если у вас файлы .cer или .crt в DER, конвертируйте:

openssl x509 -inform DER -in root_ca.cer -out root_ca.pem
openssl x509 -inform DER -in intermediate_ca.cer -out intermediate_ca.pem

Скопируйте в каталог:

sudo cp root_ca.pem /etc/pam_pkcs11/cacertificates/
sudo cp intermediate_ca.pem /etc/pam_pkcs11/cacertificates/
sudo chmod 644 /etc/pam_pkcs11/cacertificates/*.pem

Сделайте хэшированные ссылки:

sudo openssl rehash /etc/pam_pkcs11/cacertificates

или:

sudo c_rehash /etc/pam_pkcs11/cacertificates

Проверьте, что появились ссылки вида *.0:

ls -l /etc/pam_pkcs11/cacertificates

Проверьте цепочку вручную:

openssl verify -CApath /etc/pam_pkcs11/cacertificates /tmp/rutoken-cert.pem

Если есть промежуточный УЦ, он тоже должен быть добавлен. Если цепочка не собирается, pam_pkcs11 может выдать именно no valid certificate.


Если используется CRL, положите CRL в /etc/pam_pkcs11/crl в PEM и выполните:

sudo openssl rehash /etc/pam_pkcs11/crl

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


7. Настройте /etc/pam_pkcs11/pam_pkcs11.conf

Сделайте резервную копию старого конфига:

sudo cp -a /etc/pam_pkcs11/pam_pkcs11.conf /root/pam_pkcs11.conf.backup 2>/dev/null || true

Пример рабочего конфига для Рутокен ЭЦП:

sudo tee /etc/pam_pkcs11/pam_pkcs11.conf > /dev/null <<'EOF'
pam_pkcs11 {
    use_pkcs11_module = "rutoken";

    pkcs11_module rutoken {
        module = /usr/lib64/librtpkcs11ecp.so;
        description = "Rutoken ECP";
        # Если слотов несколько, можно указать нужный.
        # Обычно лучше сначала оставить без slot_num.
        # slot_num = 0;
    }

    # Оставим пока только subject-маппинг, чтобы исключить лишние мапперы.
    use_mappers = "subject";

    mapper subject {
        mapfile = /etc/pam_pkcs11/subject_mapping;
    }

    # ВНИМАНИЕ: для диагностики сначала можно поставить verify = false.
    # После успешного входа нужно вернуть verify = true и настроить УЦ.
    verify = false;

    ca_dir = /etc/pam_pkcs11/cacertificates;
    crl_dir = /etc/pam_pkcs11/crl;
}
EOF

Если у вас библиотека лежит не в /usr/lib64/librtpkcs11ecp.so, исправьте строку:



module = /usr/lib64/librtpkcs11ecp.so;

на реальный путь, например:

module = /usr/lib/librtpkcs11ecp.so;

Проверьте права:

sudo chown root:root /etc/pam_pkcs11/pam_pkcs11.conf
sudo chmod 644 /etc/pam_pkcs11/pam_pkcs11.conf

8. Сопоставьте сертификат локальному пользователю

Ошибка No matching certificate found очень часто возникает именно потому, что сертификат не привязан к пользователю.

Создайте файл маппинга:

sudo touch /etc/pam_pkcs11/subject_mapping
sudo chown root:root /etc/pam_pkcs11/subject_mapping
sudo chmod 644 /etc/pam_pkcs11/subject_mapping

Формат обычно такой:

<точный subject сертификата> = <локальный пользователь>

Получите subject:

openssl x509 -in /tmp/rutoken-cert.pem -noout -subject

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

subject=C = RU, O = Example, CN = Ivan Petrov

Но для pam_pkcs11 важен именно тот формат, который ожидает и логирует модуль.


Поэтому лучше всего брать строку из отладочного лога pam_pkcs11, но для первого шага можно добавить так:

SUBJECT=$(openssl x509 -in /tmp/rutoken-cert.pem -noout -subject | sed 's/^subject=//')
echo "$SUBJECT = ivan" | sudo tee -a /etc/pam_pkcs11/subject_mapping

Замените ivan на нужного пользователя.


Проверьте содержимое:

cat /etc/pam_pkcs11/subject_mapping

Пример:

C = RU, O = Example, CN = Ivan Petrov = ivan

Если subject в старом формате может выглядеть так:

/C=RU/O=Example/CN=Ivan Petrov = ivan

Если subject содержит русские буквы, пробелы, запятые, специальные символы — важно скопировать его максимально точно. Лучший источник — отладочный вывод pam_pkcs11.


Если файл редактировался в Windows-редакторе, уберите CRLF:

sudo dos2unix /etc/pam_pkcs11/subject_mapping 2>/dev/null || true

или проверьте:

cat -A /etc/pam_pkcs11/subject_mapping

В конце строк не должно быть ^M.


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


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

Комментарии

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