Page tree

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

Compare with Current View Page History

« Previous Version 2 Next »

Введение

Pluggable Authentication Modules (PAM, подключаемые модули аутентификации) — это набор разделяемых библиотек, которые позволяют интегрировать различные низкоуровневые методы аутентификации в виде единого высокоуровневого API. Это позволяет предоставить единые механизмы для управления, встраивания прикладных программ в процесс аутентификации.

Для PAM существует проект pam_p11, развивающийся как часть OpenSC, позволяющий внедрить аутентификацию по токенам. Доступны два модуля аутентификации:

  1. pam_p11_openssh: позволяет аутентифицировать пользователя по открытым ключам ssh в ~/.ssh/authorized_keys
  2. pam_p11_opensc: аутентификация по сертификатам из файла ~/.eid/authorized_certificates

Проект OpenSC также предоставляет пакет pam_pkcs11, который представляет собой более гибкий набор модулей аутентификации. Разработчики OpenSC советуют использовать его вместо pam_p11, поскольку последний представляет собой очень простое решение (проверка наличия токена и подпись случайных данных). pam_p11 не имеет понятия о цепочках сертификатов, списках отзыва и OCSP.
Инструкция есть здесь: http://www.gooze.eu/printpdf/book/export/html/221 

Общий порядок действий для настройки PAM следующий:
  1. Сгенерировать на токене ключевую пару RSA (проверено, что работает для длины ключа 2048 бит, с 1024 были проблемы)
  2. Если требуется сертификат, то с помощью OpenSSL или другого ПО сгенерировать сертификат и записать его на токен
  3. Записать открытый ключ или сертификат в необходимый каталог

В итоге выглядит это так:


Аутентификация по сертификатам

 В данном разделе подробно рассмотрим действия по настройке аутентификации по сертификату X.509.

Рабочее окружение

  • Ubuntu Linux 11.10 i386
  • pcscd 1.7.2-2ubuntu2 из репозиториев
  • OpenSC 0.12.2 собранная из исходников с поддержкой pcscd
  • OpenSSL 1.0.0e 6 Sep 2011 из репозиториев
  • libpam-p11 0.1.5-1build2 из репозиториев

Настройка pam_p11

До начала работы с токеном стоит настроить модуль pam_p11 следующим образом:

  1. Создать файл   /usr/share/pam-configs/p11 со следующим содержанием:

    Name: Pam_p11
    Default: yes
    Priority: 800
    Auth-Type: Primary
    Auth: sufficient pam_p11_opensc.so /usr/lib/opensc-pkcs11.so 
  2. Обновить конфигурацию PAM:

    sudo pam-auth-update

     

  3.  В появившемся диалоге необходимо выбрать pam_p11. Если вы хотите отключить аутентификацию по паролям, то можно отключить Unix authentication.

Создание ключей на токене

  1. Создаем ключевую пару RSA длины 2048 бит c ID "45" (id стоит запомнить, он понадобится при создании сертификата). Аутентификация на токене происходит под сущностью пользователя.

    pkcs15-init --generate-key rsa/2048 --auth-id 02 --id 45
    <вводим PIN пользователя>


  2. Проверим сгенерированный ключ:

    $ pkcs15-tool --list-keys
    Using reader with a card: Aktiv Rutoken ECP 00 00
    Private RSA Key [Private Key]
     Object Flags : [0x3], private, modifiable
     Usage : [0x4], sign
     Access Flags : [0x1D], sensitive, alwaysSensitive, neverExtract, local
     ModLength : 2048
     Key ref : 1 (0x1)
     Native : yes
     Path : 3f001000100060020001
     Auth ID : 02
     ID : 45

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

  1. Запускаем openssl

    $ openssl


  2. Подгружаем модуль поддержки pkcs11:

    OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
    (dynamic) Dynamic engine loading support
    [Success]: SO_PATH:/usr/lib/engines/engine_pkcs11.so
    [Success]: ID:pkcs11
    [Success]: LIST_ADD:1
    [Success]: LOAD
    Loaded: (pkcs11) pkcs11 engine
  3. Создаем самоподписанный сертификат в PEM-формате:

    OpenSSL> req -engine pkcs11 -new -key 1:45 -keyform engine -x509 -out cert.pem -text

    1:45 - это пара slot:id. Если OpenSSL не видит токен, то стоит попробовать другой номер слота.
    OpenSSL при этом предложит ввести PIN-код и заполнить информацию о сертификате. Теперь можно выйти из OpenSSL и проверить новый сертификат.

  4. Проверяем созданный сертификат. В текущем каталоге должен создаться файл самоподписанного сертификата с именем cert.pem.
    Примечание: если при создании сертификата в OpenSSL убрать ключ -x509, то на выходе получим заявку на сертификат.

    $openssl verify -CAfile cert.pem cert.pem
    cert.pem: OK
  5. Сохраняем сертификат на токен:

    $ pkcs15-init --store-certificate cert.pem --auth-id 02 --id 45 --format pem
    <Вводим PIN пользователя>

Занесение сертификата в список доверенных

Теперь нам необходимо прочитать с токена сертификат с нужным ID и записать его в файл доверенных сертификатов:

mkdir ~/.eid
chmod 0755 ~/.eid
pkcs15-tool -r <certificate_id> > ~/.eid/authorized_certificates
chmod 0644 ~/.eid/authorized_certificates

Заключение

Описанных выше действий достаточно для аутентификации по токену.

Источники

http://download.gooze.eu/pki/doc/sso/linux-smartcard-logon-using-pam-p11.pdf

http://www.opensc-project.org/opensc/wiki/QuickStart

http://forum.rutoken.ru/post/4546/#p4546

http://www.opensc-project.org/pam_p11/wiki/QuickStart

 

  • No labels