Подключите устройств семейства Рутокен ЭЦП к компьютеру.
Перед началом работы, установите следующие пакеты:
sudo dnf update sudo dnf install ccid opensc pam_pkcs11 p11-kit nss-tools
Загрузите модуль librtpkcs11ecp.so и установите:
sudo rpm -i librtpkcs11ecp-X.X.X.X-X.x86_64.rpm
Создание ключей и сертификатов
Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда для их созданию:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
Параметр id задает идентификатор ключевой пары.
Теперь нужно получить сертификат:
В OpenSSL 3.0 убрали интерактивный режим.
Для работы с pkcs11 engine теперь необходимо сделать следующее:
Создать файл конфигурации engine.conf со следующим содержимым:
openssl_conf = openssl_init
[openssl_init]engines = engine_section
[engine_section]pkcs11 = pkcs11_section
[pkcs11_section]engine_id = pkcs11dynamic_path =/usr/lib64/engines-3/pkcs11.soMODULE_PATH =/usr/lib64/librtpkcs11ecp.sodefault_algorithms = ALLПри необходимости использовать pkcs11 engine указывать путь к файлу конфигурации engine.conf. Пример создания самоподписанного сертификата:
OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out cert.crt -subj"/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=user/emailAddress=user@mail.com"- Или создайте запрос на сертификат для передачи его в УЦ:
OPENSSL_CONF=/path/to/engine.conf openssl req -engine pkcs11 -x509 -new -key 0:45 -keyform engine -out request.req
-subj"/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=user/emailAddress=user@mail.com"
Сохраните сертификат на токене:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45
Проверьте, что токен подключен и на нем сохранены сертификаты и ключи.
Для работы с самоподписанными сертификатами, смените общесистемную криптографическую политику с Default на Legacy:
update-crypto-policies --set LEGACY
Добавление сертификата в список доверенных
Создайте базу данных доверенных сертификатов
sudo mkdir /etc/pam_pkcs11/nssdb sudo chmod 777 /etc/pam_pkcs11/nssdb sudo certutil -d /etc/pam_pkcs11/nssdb -N # создание базы данных sudo modutil -dbdir /etc/pam_pkcs11/nssdb/ -add p11-kit-trust -libfile /usr/lib64/pkcs11/p11-kit-trust.so
Добавьте сертификат в базу данных:
sudo certutil -A -d /etc/pam_pkcs11/nssdb -n "User" -t "CT,C,C" -i cert.crt # команда вводится из директории, в которую был помещён сертификат. Вместо User, укажите имя вашего пользователя. certutil -L -d /etc/pam_pkcs11/nssdb #проверить, что сертификат добавился с параметрами CT,C,C sudo update-ca-trust extract # может занять некоторое время
Измените права доступа к базе данных:
chmod 755 /etc/pam_pkcs11/nssdb chmod 644 /etc/pam_pkcs11/nssdb/*.db
Настройка pam_pkcs11
Создайте (например, на рабочем столе) текстовый файл pam_pkcs11.conf со следующим содержимым:
pam_pkcs11 {
nullok = false;
debug = false;
use_first_pass = false;
use_authtok = false;
card_only = false;
wait_for_card = false;
use_pkcs11_module = rutokenecp;
# Aktiv Rutoken ECP
pkcs11_module rutokenecp {
module = /usr/lib64/librtpkcs11ecp.so;
slot_num = 0;
support_thread = true;
ca_dir = /etc/pam_pkcs11/cacerts;
crl_dir = /etc/pam_pkcs11/crls;
cert_policy = certificate;
}
use_mappers = digest;
mapper_search_path = /usr/lib64/pam_pkcs11;
mapper digest {
debug = false;
module = internal;
algorithm = "sha1";
mapfile = file:///etc/pam_pkcs11/digest_mapping;
}
}
Поместите файл в каталог /etc/pam_pkcs11/:
cd /etc/pam_pkcs11/ sudo mv pam_pkcs11.conf pam_pkcs11.conf.default #резервное копирование sudo mkdir cacerts crls sudo cp /path/to/your/pam_pkcs11.conf /etc/pam_pkcs11/
Регистрация модуля PAM PKCS11 для аутентификации в системе
Узнайте поля вашего сертификата с помощью следующей команды:
sudo pkcs11_inspect
В результате отобразится сообщение:
|
Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/digest_mapping в формате:
<вывод команды pkcs11_inspect> -> <имя_пользователя>
Пример заполнения файла:
|
Подключите модуль к системе авторизации PAM:
sudo nano /etc/pam.d/system-auth # Для входа по Рутокена на экране приветствия sudo nano /etc/pam.d/password-auth
Перед первым использованием модуля pam_unix добавьте туда строку со следующим содержимым:
auth sufficient pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so
Попробуйте аутентифицироваться:
su <username>
Терминал должен запросить PIN код рутокена:
|
В окне экрана приветствия аналогично:
Настройка автоблокировки
В состав пакета libpam-pkcs11 входит утилита pkcs11_eventmgr, которая позволяет выполнять различные действия при возникновении событий PKCS#11.
Для настройки pkcs11_eventmgr служит файл конфигурации - /etc/pam_pkcs11/pkcs11_eventmgr.conf
Пример файла конфигурации представлен ниже:
pkcs11_eventmgr
{
# Запуск в бэкграунде
daemon = true;
# Настройка сообщений отладки
debug = false;
# Время опроса в секундах
polling_time = 1;
# Установка тайм-аута на удаление карты
# По-умолчанию 0
expire_time = 0;
# Выбор pkcs11 библиотеки для работы с Рутокен
pkcs11_module = /usr/lib64/librtpkcs11ecp.so;
# Действия с картой
# Карта вставлена:
event card_insert {
# Оставляем значения по умолчанию (ничего не происходит)
on_error = ignore ;
action = "/bin/false";
}
# Карта извлечена
event card_remove {
on_error = ignore;
# Вызываем функцию блокировки экрана
action = "action = "for s in $(loginctl list-sessions --no-legend | awk '{print $1}'); do loginctl lock-session $s; done";
}
# Карта долгое время извлечена
event expire_time {
# Оставляем значения по умолчанию (ничего не происходит)
on_error = ignore;
action = "/bin/false";
}
}
После этого запустите pkcs11_eventmgr, добавьте приложение в автозагрузку и перезагрузите компьютер.
sudo systemctl start pkcs11-eventmgr.service sudo systemctl enable pkcs11-eventmgr.service
Отключите штатный плагин графической оболочки MATE для работы со смарт-картами.
gsettings set org.mate.SettingsDaemon.plugins.smartcard active false
