...
Code Block |
---|
openssl OpenSSL> engine dynamic -pre SO_PATH:/usr/lib64/engines/engine_pkcs11.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 |
Поместите его на токенРутокен ЭЦП 2.0
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45 |
Добавление сертификата в список доверенных
Проверьте, что токен Рутокен ЭЦП 2.0 подключен и сертификаты с ключами на нем имеются
...
Выгрузите ваш сертификат с токенаРутокена ЭЦП 2.0
Code Block |
---|
pkcs11-tool --module=/usr/lib64/librtpkcs11ecp.so -l -r -y cert -d <ID> -o cert.crt |
...
Создайте (например, на рабочем столе) текстовый файл 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/: 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/ |
...
На выходе вы увидите что-то такое. :
Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/subject_mapping в формате
Вывод команды pkcs11_inspect -> <имя_пользователя>
Попробуйте аутентифицироваться
su oleg
Вывод будет примерно следующим следующим:
Такой подробный вывод можно отключить, убрав опцию debug для pam модуля в файле конфигурации /etc/pam.d/system-auth
Аутентификация в CentOS 7 и Goslinux при помощи ГОСТ ключей
Перед началом работы, установите следующие пакеты
Code Block |
---|
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
Утснановите Установите права доступа:
Code Block |
---|
sudo chmod 644 /usr/lib/x86_64-linux-gnu/librtpam.so.1.0.0 |
Загружаем библиотеку через браузер.
...
Проверяем, что все настроили правильно:
Code Block |
---|
pkcs11-tool --module /usr/lib64//librtpkcs11ecp.so -T |
Далее потребуется скачать сертификат с токенаРутокена, если его нетунет, то генерируем его согласно следующему пункту
Генерация сертификата и отправка его на
...
Рутокен
Warning |
---|
Собирайте OpenSC новее чем 0.19.0 |
...
https://github.com/OpenSC/OpenSC/
Создаем ключи на токенеРутокене:
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-256:B -l --id 45 |
Узнайте где находится файл с конфигурацией и папка с энджинами openssl с помощью команды:
Code Block |
---|
openssl version -a |
Скачайте rtengine, который можно найти в комплекте разработчика ( https://www.rutoken.ru/developers/sdk/ ) и поместите его в директорию энджинов
Зайдите в файл конфигурации openssl.cnf и впишите туда следующее:
Code Block |
---|
# в начала файла написать |
...
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 |
Регистрация сертификата в системе
Скачиваем сертификат с токенаРутокена:
Code Block |
---|
pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt |
Конвертируем его в PEM формат:
Code Block |
---|
openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM |
Добавляем сертификат в список доверенных сертификатов для данного пользователя:
Code Block |
---|
mkdir ~/.eid |
...
chmod 0755 ~/.eid |
...
cat cert.pem >> ~/.eid/authorized_certificates |
...
chmod 0644 ~/.eid/authorized_certificates |
Настройка аутентификации
Открываем файл /etc/pam.d/system-auth
Code Block |
---|
sudo vim /etc/pam.d/system-auth |
И записываем в самом начале следующую строчку:
Code Block |
---|
auth sufficient librtpam.so.1.0.0 /usr/lib64/x86_64-linux-gnu/librtpkcs11ecp.so |
Пробуем пройти аутентификацию:
Code Block |
---|
su oleg |
Если все прошло успешно, то появится просьба ввести пароль от токена, иначе что-то пошло не так.
Узнать причину того, что пошло не так, можно через логи в /var/log/messages