Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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 -> <имя_пользователя>

Image Added

Попробуйте аутентифицироваться 

su oleg

Вывод будет примерно следующим следующим:

Image Added

Такой подробный вывод можно отключить, убрав опцию 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