Table of Contents | ||||
---|---|---|---|---|
|
...
Info |
---|
Рутокен ЭЦП 2.0 используется для безопасного хранения и предъявления персональной информации: ключей шифрования, сертификатов, лицензий, удостоверений и других данных.
...
Подключите устройство семейства Рутокен ЭЦП к компьютеру |
Проверка работы Рутокен ЭЦП
...
Подключите Рутокен ЭЦП
...
к компьютеру.
Убедитесь в том, что на USB-токене или считывателе для смарт-карт светится индикатор.
...
Откройте Terminal.
Для проверки корректности работы Рутокен ЭЦП 2.0 введите команду:
Code Block |
---|
$ pcsc_scan |
...
|
Если Рутокен ЭЦП 2.0 не работает, то в окне терминала отобразится сообщение об этом.
...
Если Рутокен ЭЦП 2.0 работает, то в окне терминала отобразится сообщение об этом.
...
...
Для остановки
...
сервиса pcscd введите команду:
Code Block |
---|
$ sudo service pcscd |
...
stop
|
Настройка системы
Перед началом работы, установите следующие пакеты:
Code Block |
---|
sudo yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit
sudo yum remove coolkey
|
Загрузите модуль librtpkcs11ecp.so из Комплекта разработчика и поместите его в директорию /usr/lib64 и установите
Code Block |
---|
sudo rpm -i librtpkcs11ecp_1.9.15.0-1_x86_64.rpm
|
Создание ключей и сертификатов
Для начала установите engine_pkcs11.so для того, чтобы openssl OpenSSL смог общаться с токеном. Для этого соберите библиотеку libp11 из репозиторияhttps://github.com/OpenSC/libp11/tree/libp11-0. 4.10 . Вместе с ней идет engine_pkcs11.so начиная с версии 0.4
Вы можете пропустить данный раздел, если у вас уже имеются необходимые RSA ключи
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45 |
Теперь создайте самоподписанный сертификат сертификат:
Code Block |
---|
openssl |
...
OpenSSL> engine dynamic -pre SO_PATH:/usr |
...
/lib/x86_64-linux-gnu/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 |
Поместите его на токен
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id |
...
45
|
Проверьте, что токен подключен и сертификаты с ключами на нем имеются.
Добавление сертификата в список доверенных
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -O -l |
Создайте базу данных доверенных сертификатов
Code Block |
---|
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)
Code Block |
---|
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt |
Добавьте сертификат в доверенные
Code Block |
---|
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 со следующим содержимым:
Code Block |
---|
pam_pkcs11 { |
...
nullok = false; |
...
debug = true; |
...
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 = subject; |
...
...
mapper_search_path = /usr/lib64/pam_pkcs11; |
...
...
mapper subject { |
...
debug = true; |
...
module = internal; |
...
ignorecase = false; |
...
mapfile = file:///etc/pam_pkcs11/subject_mapping; |
...
} |
...
} |
Поместите файл в каталог /etc/pam_pkcs11/:
Code Block |
---|
cd /etc/pam_pkcs11/ |
...
sudo mv pam_pkcs11.conf pam_pkcs11.conf.default (резервное копирование) |
...
sudo mkdir cacerts crls |
...
sudo cp /home/<имя_пользователя>/Desktop/pam_pkcs11.conf /etc/pam_pkcs11/ |
...
Регистрация модуля для аутентификации в системе
Подключите модуль к системе авторизации PAM:
Code Block |
---|
sudo vim /etc/pam.d/system-auth |
Добавьте туда строку со следующим содержимым:
Code Block |
---|
auth sufficient pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so debug |
Сохраните файл и узнайте описание вашего сертификата с помощью следующей команды:
Code Block |
---|
sudo pkcs11_inspect |
На выходе вы увидите что-то такое. сообщение:
Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/subject_mapping в форматеВывод
Code Block |
---|
<вывод команды pkcs11_ |
...
inspect> -> <имя_пользователя> |
Попробуйте аутентифицироваться
Code Block |
---|
su |
...
<username>
|
Вывод будет примерно следующим следующим:
Такой подробный вывод можно отключить, убрав опцию debug для pam модуля в файле конфигурации /etc/pam.d/system-auth
Аутентификация в CentOS 7 и Goslinux при помощи ГОСТ ключей
Перед началом работы, установите следующие пакеты
sudo yum install ccid opensc pam_pkcs11 gdm-plugin-smartcard p11-kit
sudo yum remove coolkey
Проверьте, что у вас установлен openssl версии 1.1 и выше
Скачайте pam модуль и положите его по адресу /usr/lib64/securty (или /lib64/security для goslinux) https://download.rutoken.ru/Rutoken/PAM/1.0.0/x86_64/librtpam.so.1.0.0
Утснановите права доступа
sudo chmod 644 /usr/lib/x86_64-linux-gnu/librtpam.so.1.0.0
Загружаем библиотеку через браузер.
https://www.rutoken.ru/support/download/pkcs/
Проверяем, что все настроили правильно
pkcs11-tool --module /usr/lib64//librtpkcs11ecp.so -T
Далее потребуется скачать сертификат с токена, если его нету, то генерируем его согласно следующему пункту
Генерация сертификата и отправка его на токен
Собирайте OpenSC новее чем 0.19.0.
https://github.com/OpenSC/OpenSC/
Создаем ключи на токене
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B -l --id 45
Узнайте где находится файл с конфигурацией и папка с энджинами openssl с помощью команды
openssl version -a
Скачайте rtengine, который можно найти в комплекте разработчика ( https://www.rutoken.ru/developers/sdk/ ) и поместите его в директорию энджинов
Зайдите в файл конфигурации openssl.cnf и впишите туда следующее
# в начала файла написать
openssl_conf = openssl_def
...
# в конец файла
# OpenSSL default section
[openssl_def]
engines = engine_section
# Engine section
[engine_section]
rtengine = rtengine_section
# Engine rtengine section
[rtengine_section]
engine_id = rtengine
dynamic_path = /path/to/engine/librtengine.so
MODULE_PATH = /usr/lib64/librtpkcs11ecp.so
RAND_TOKEN = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP
default_algorithms = CIPHERS, DIGEST, PKEY, RAND
Теперь создадим самоподписанный сертификат для наших ключей на токене
openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=E" -engine rtengine -out cert.cer
Загружаем его на токен
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45
Регистрируем сертификат в системе
Скачиваем сертификат с токена
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Конвертируем его в PEM формат
openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Добавляем сертификат в список доверенных сертификатов для данного пользователя
mkdir ~/.eid
chmod 0755 ~/.eid
cat cert.pem >> ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates
Настраиваем аутентификацию
Открываем файл /etc/pam.d/system-auth
sudo vim /etc/pam.d/system-auth
И записываем в самом начале следующую строчку
auth sufficient librtpam.so.1.0.0 /usr/lib64/x86_64-linux-gnu/librtpkcs11ecp.so
Пробуем пройти аутентификацию
su oleg
Если все прошло успешно, то появится просьба ввести пароль от токена, иначе что-то пошло не так. Узнать причину того, что пошло не так, можно через логи в /var/log/messages