Page tree

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 11 Next »

Введение

Стенд

Нам понадобится токен или смарт-карта семейства Рутокен ЭЦП, отформатированные через Утилита администрирования Рутокен (rtadmin).

Настройки для токена и смарт-карты идентичны.

Общий порядок действий

Шаг 1: Установка необходимых пакетов

Переходим в режим суперпользователя и обновляем список пакетов, затем устанавливаем необходимые компоненты для работы с Рутокен:

su -
apt-get update
apt-get install librtpkcs11ecp libp11 pam_pkcs11 opensc openssl

Проверка установки библиотеки Рутокен:

ls -la /usr/lib64/librtpkcs11ecp.so

✅ Если файл существует — библиотека установлена успешно
❌ Если файл не найден — установка не удалась, проверьте наличие пакета в репозитории

Шаг 2: Проверка и создание пользователя

Проверяем существование пользователя user и создаём его при необходимости. Этот шаг критически важен, так как все последующие настройки (права доступа, сертификаты, аутентификация) будут применяться именно к этому пользователю:

id user 2>/dev/null || useradd -m user

Установите временный пароль для резервного входа:

echo "user:TempPass123" | chpasswd 2>/dev/null || true

⚠️ Примечание: временный пароль "TempPass123" используется только для резервного входа. После настройки аутентификации через токен рекомендуется сменить пароль.

Проверьте результат:

id user

Шаг 3: Проверка подключения токена

Проверяем, что токен Рутокен ЭЦП корректно определился системой и доступен для работы:

lsusb | grep -i "Aktiv\|Rutoken"

Проверяем доступность токена через библиотеку PKCS#11:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --list-slots

✅ Если устройство отображается — токен физически подключён и определён системой
❌ Если вывод пустой — проверьте подключение токена к порту USB

Шаг 4: Создание ключевой пары на токене

Генерируем на токене новую криптографическую пару ключей (приватный + публичный) с использованием алгоритма RSA длиной 2048 бит. Приватный ключ никогда не покидает токен — это обеспечивает безопасность аутентификации:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 12345678 --keypairgen --key-type rsa:2048 --id 45 --label "user"

Что делают параметры команды:

  • --module /usr/lib64/librtpkcs11ecp.so — указывает путь к библиотеке Рутокен для работы с токеном
  • --login — выполняет вход на токен (требуется для операций с ключами)
  • --pin 12345678 — передаёт PIN-код пользователя для аутентификации на токене (используется стандартный заводской PIN)
  • --keypairgen — команда генерации ключевой пары
  • --key-type rsa:2048 — указывает тип ключа (RSA) и длину в битах (2048)
  • --id 45 — задаёт уникальный идентификатор ключа (в шестнадцатеричном формате: 0x45)
  • --label "user" — присваивает ключу понятную метку для идентификации

⚠️Важно: Идентификатор --id 45 будет использоваться позже для связи сертификата с этим ключом. Он должен совпадать при записи сертификата на токен.

Смена PIN-кода (рекомендуется):

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 12345678 --change-pin --new-pin 123456789

Проверка успешной смены PIN:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 123456789 --list-slots

⚠️ Если команда выше запрашивает старый PIN — смена не удалась. Повторите смену PIN.

Шаг 5: Создание конфигурации OpenSSL

В OpenSSL 3.x изменилась архитектура движков. Для работы с PKCS#11 теперь обязательно требуется конфигурационный файл, даже при использовании переменной окружения OPENSSL_CONF. Этот файл настраивает взаимодействие OpenSSL с библиотекой Рутокен.

Проверяем существование движка PKCS#11 для OpenSSL 3.x:

ls -la /usr/lib64/openssl/engines-3/pkcs11.so

Почему важно: В некоторых установках путь может отличаться.

Создаём конфигурационный файл для работы с PKCS#11:

cat > /root/pkcs11.cnf << 'EOF'
openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib64/openssl/engines-3/pkcs11.so
MODULE_PATH = /usr/lib64/librtpkcs11ecp.so
PIN = 123456789
init = 1
EOF

⚠️Важно: Параметр PIN содержит новый пользовательский PIN-код, установленный на Шаге 4. Убедитесь, что он совпадает с вашим фактическим PIN-кодом токена.

Проверяем корректность конфигурации:

cat /root/pkcs11.cnf

Шаг 6: Создание самоподписанного сертификата

Создаём самоподписанный X.509 сертификат, который будет связан с приватным ключом на токене. Сертификат содержит идентифицирующую информацию о пользователе, включая поле CN (Common Name), которое должно совпадать с логином системы для корректной работы маппера opensc.

Проверяем наличие приватного ключа на токене:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 123456789 --list-objects --type privkey

Ожидаемый вывод должен содержать:

Private Key Object; RSA 2048 bits
  label:      user
  ID:         45

Создаём самоподписанный сертификат, связанный с приватным ключом на токене:

OPENSSL_CONF=/root/pkcs11.cnf openssl req -engine pkcs11 -x509 -new -key 45 -keyform engine -out client.pem -days 365 -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=user/emailAddress=user@mail.com"

Проверяем корректность созданного сертификата:

openssl x509 -in client.pem -text -noout | grep "Subject:"

Шаг 7: Запись сертификата на токен

Записываем созданный самоподписанный сертификат на токен Рутокен ЭЦП, связывая его с ранее созданным приватным ключом через совпадающий идентификатор ID=45. Эта связка «приватный ключ + сертификат» на токене является основой для аутентификации через модуль pam_pkcs11:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 123456789 -y cert -w client.pem --id 45 --label "user"

Проверяем наличие сертификата и приватного ключа на токене:

pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --login --pin 123456789 --list-objects

Ожидаемый вывод:

Private Key Object; RSA 2048 bits
  label:      user
  ID:         45
Certificate Object; type = X.509 cert
  label:      user
  ID:         45

Шаг 8: Настройка конфигурации pam_pkcs11

Создаём основной конфигурационный файл модуля pam_pkcs11, который управляет аутентификацией через токен:

cat > /etc/security/pam_pkcs11/pam_pkcs11.conf << 'EOF'
pam_pkcs11 {
  nullok = false;
  debug = false;
  use_first_pass = false;
  use_authtok = false;
  card_only = false;
  wait_for_card = true;
  use_pkcs11_module = rutokenecp;
 
  pkcs11_module rutokenecp {
    module = /usr/lib64/librtpkcs11ecp.so;
    slot_num = 0;
    support_thread = true;
    ca_dir = /etc/security/pam_pkcs11/cacerts;
    crl_dir = /etc/security/pam_pkcs11/crls;
    cert_policy = none;
  }
 
  use_mappers = opensc;
  mapper_search_path = /lib64/pam_pkcs11;
 
  mapper opensc {
    debug = false;
    module = /lib64/pam_pkcs11/opensc_mapper.so;
  }
}
EOF

 

  • No labels