Подключите устройств семейства Рутокен ЭЦП к компьютеру
Перед началом работы, установите следующие пакеты:
sudo yum update sudo yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit
Загрузите модуль librtpkcs11ecp.so и установите
sudo rpm -i librtpkcs11ecp-2.0.4.0-1.x86_64.rpm
Создание ключей и сертификатов
Для начала установите libpkcs11.so для того, чтобы OpenSSLL смог общаться к Рутокенам.
Способ 1
Для этого соберите библиотеку libp11 из репозитория. Вместе с ней идет libpkcs11.so начиная с версии 0.4.
Способ 2
Скачайте два пакета libp11 и engine_pkcs11 из репозитория Fedora и установите их с помощью команд:
sudo rpm-i <rpm_name>
Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи.
Если ключей нет, ниже команда по их созданию:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
Параметр id задает идентификатор ключевой пары.
Теперь нужно получить сертификат:
- создайте самоподписанный сертификат:
openssl OpenSSL> openssl engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.crt -outform DER
- или создайте запрос на сертификат для передачи его в УЦ:
openssl OpenSSL> openssl engine dynamic -pre SO_PATH:/usr/lib64/engines-1.1/libpkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib64/librtpkcs11ecp.so OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -out request.req
Поместите сертификат его на токен:
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45
Проверьте, что токен подключен и сертификаты с ключами на нем имеются.
Добавление сертификата в список доверенных
Создайте базу данных доверенных сертификатов
sudo mkdir /etc/pam_pkcs11/nssdb sudo chmod 0644 /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
Выгрузите ваш сертификат с токена (если вы пользовались вышеописанной инструкцией для получения сертификата, то ID = 45)
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt
Добавьте сертификат в доверенные
sudo cp cert.crt /etc/pki/ca-trust/source/anchors/ # команда вводится из директории, в которую был помещён сертификат sudo update-ca-trust force-enable sudo update-ca-trust extract # может занять некоторое время
Настройка 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 = signature; } 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:
sudo vim /etc/pam.d/system-auth # Для входа по Рутокена на экране приветствия sudo vim /etc/pam.d/password-auth
Добавьте туда строку со следующим содержимым, перед первым ипользованием модуля pam_unix:
auth sufficient pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so
Сохраните файл и узнайте поля вашего сертификата с помощью следующей команды:
sudo pkcs11_inspect
В результате вы увидите сообщение:
Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/digest_mapping в формате:
<вывод команды pkcs11_inspect> -> <имя_пользователя>
Попробуйте аутентифицироваться:
su <username>
В экране приветствия аналогично: