Page tree

Versions Compared

Key

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

...

  1. Подключите устройство семейства Рутокен ЭЦП к компьютеру.
  2. Установите следующие пакеты:
    Code Block
    languagebash
    sudo dnf update
    sudo dnf install ccid opensc pam_pkcs11 p11-kit nss-tools
  3. Загрузите библиотеку rtPKCS11ecp из Центра загрузки и установите ее:
    Code Block
    languagebash
    sudo rpm -i librtpkcs11ecp-X.X.X.X-X.x86_64.rpm
  4. Загрузите модуль интеграции rtengine из Центра загрузки и установите его:
    Code Block
    languagebash
    unzip rtengine-X.X.X.zip
    sudo dnf install rtengine/X.X.X/Linux/x64/packages/librtengineX-X.X.X-X.x86_64.rpm
    

...

  1. Создайте ключи с помощью утилиты pkcs11-tool:
    Code Block
    languagebash
    pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --keypairgen --key-type EC:prime256v1 -l --id 3132
    # Параметр id задает идентификатор ключевой пары.
  2. Получите сертификат:
    1. Создайте файл конфигурации engine.conf со следующим содержимым:

      openssl_conf = openssl_init

      [openssl_init]
      engines = engine_section

      [engine_section]
      rtengine = rtengine_section

      [rtengine_section]
      engine_id = rtengine
      dynamic_path = /usr/lib64/librtengine.so
      pkcs11_path = /usr/lib64/librtpkcs11ecp.so
      rand_token = pkcs11:manufacturer=Aktiv%20Co.;model=Rutoken%20ECP;serial=<серийный_номер_токена>
      default_algorithms = ALL

      Info

      Чтобы узнать параметр serial токена, воспользуйтесь командой:

      pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -T
    2. Запустите утилиту OpenSSL с модулем rtengine. В команде укажите путь к файлу конфигурации, настроенном в предыдущем шаге. 
      Пример команды создания самоподписанного сертификата:

      OPENSSL_CONF=/путь/к/файлу/engine.conf openssl req -utf8 -engine rtengine -keyform engine -key 'pkcs11:id=12' -x509 -new -out cert.crt -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=devNN/CN=testuser/emailAddress=testuser@mail.com"
      Info

      Значение id в параметре -key — это идентификатор объекта (CKA_ID) в виде двузначных номеров символов в hex из таблицы ASCII.  Используйте только ASCII-коды печатных символов, так как id нужно будет передать OpenSSL в виде строки. Например ASCII-кодам «3132» соответствует строка «12».
      Для удобства можно воспользоваться онлайн-сервисом конвертации строки в ASCII-коды.

  3. Сохраните сертификат на токене:
    Code Block
    languagebash
    pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so -l -y cert -w cert.crt --id 3132

...

  1. Создайте базу данных доверенных сертификатов:
    Code Block
    languagebash
    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

  2. Добавьте сертификат в доверенные:

    Code Block
    languagebash
    sudo cp cert.crt /etc/pki/ca-trust/source/anchors/ # команда вводится из директории, в которую был помещен сертификат
    
    sudo update-ca-trust force-enable
    
    sudo update-ca-trust extract # может занять некоторое время

...

  1. Создайте (например, на рабочем столе) текстовый файл pam_pkcs11.conf со следующим содержимым:
    Code Block
    languageyml
    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;
      }
    
    }
  2. Поместите файл в каталог /etc/pam_pkcs11/:
    Code Block
    languagebash
    cd /etc/pam_pkcs11/
    
    sudo mv pam_pkcs11.conf pam_pkcs11.conf.default #резервное копирование
    
    sudo mkdir cacerts crls
    
    sudo cp /путь/к/файлу/pam_pkcs11.conf /etc/pam_pkcs11/

...

  1. Узнайте поля вашего сертификата с помощью следующей команды:
    Code Block
    languagebash
    sudo pkcs11_inspect
    

    В результате отобразится сообщение:

    [user@redos ~]$ sudo pkcs11_inspect
    PIN for token: 
    Printing data for mapper digest:
    CB:13:CA:34:AC:04:CD:BF:A6:17:29:2F:C8:00:6A:D5:54:B8:0B:BB
  2. Скопируйте строчку с описанием сертификата в файл /etc/pam_pkcs11/digest_mapping в формате <вывод команды pkcs11_inspect> -> <имя_пользователя>.
    Пример:
    Code Block
    languagebash
    [user@redos ~]$ sudo cat /etc/pam_pkcs11/digest_mapping 
    CB:13:CA:34:AC:04:CD:BF:A6:17:29:2F:C8:00:6A:D5:54:B8:0B:BB -> user
  3. Подключите модуль к системе авторизации PAM:
    Code Block
    languagebash
    sudo nano /etc/pam.d/system-auth
    # Для входа с помощью устройства Рутокен на экране приветствия 
    sudo nano /etc/pam.d/password-auth
  4. Перед первым использованием модуля pam_unix добавьте туда строку со следующим содержимым:
    Code Block
    auth   sufficient             pam_pkcs11.so pkcs11_module=/usr/lib64/librtpkcs11ecp.so
  5. Убедитесь, что аутентификация настроена успешно. Для этого попробуйте аутентифицироваться в терминале или на экране приветствия. Если все настроено правильно, система попросит ввести PIN-код пользователя Рутокена.
    Пример аутентификации:

    • в терминале:

      [user@redos ~]$ su user
      Smart card found.
      Добро пожаловать Rutoken ECP <no label>!
      Smart card PIN: 
      verifying certificate
      Checking signature
      [user@redos ~]$ 

    • на экране приветствия:

...

  1. Откройте файл конфигурации /etc/pam_pkcs11/pkcs11_eventmgr.conf.
  2. Добавьте в конец файла раздел с настройками pkcs11_eventmgr:
    Code Block
    languagebashyml
    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;
             
            # Вызываем функцию блокировки экрана в зависимости от среды рабочего стола (Mate, KDE, Gnome)
            action = "mate-screensaver-command --lock";
        }
     
        # Токен долгое время извлечен
        event expire_time {
            # Оставляем значения по умолчанию (ничего не происходит)
            on_error = ignore;
     
            action = "/bin/false";
        }
    }
  3. Добавьте приложение pkcs11_eventmgr в автозагрузку, создав файл /etc/xdg/autostart/smartcard-screensaver.desktop со следующим содержимым:
    Code Block
    languagebashtext
    [Desktop Entry]
    Type=Application
    Name=Smart Card Screensaver
    Comment=Application to lock screen on smart card removal.
    Exec=/usr/bin/pkcs11_eventmgr daemon
    
  4. Перезагрузите компьютер.