В данной инструкции описывается, как заставить модуль pam_p11 работать с библиотекой librtpkcs11ecp.so. Дополнительную информацию о данном вопросе можно почерпнуть из следующей статьи http://habrahabr.ru/company/aktiv-company/blog/144700/.
Итак, нам понадобится Rutoken ECP, отформатированный через Панель управления Рутокен. В качестве дистрибутива использовалась Ubuntu-12.10-desktop-i386.
1) Первым делом устанавливаем необходимые пакеты:
$ sudo apt-get install opensc libpam-p11 libengine-pkcs11-openssl
Стоит отметить, что при установке opensc также устанавливаются пакеты libccid и pcscd, а при установке libpam-p11 – пакет libp11-2.
2) Библиотеку librtpkcs11ecp.so помещаем в директорию /usr/lib/
3) Аналогично действиям в приведенной выше статье создаем файл /usr/share/pam-configs/p11, с единственным отличием – укажем путь к нашей библиотеке:
Name: Pam_p11
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient pam_p11_opensc.so /usr/lib/librtpkcs11ecp.so
4) Выполняем команду:
$ sudo pam-auth-update
В появившемся диалоге выбираем Pam_p11.
5) Переходим к созданию ключевой пары:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 -l --id 45
Утилита pkcs11-tool входит в состав opensc.
Параметры, задаваемые в этой строке:
--module <arg> – путь к библиотеке pkcs11 (обязательный параметр);
-- keypairgen – сгенерировать ключевую пару;
-- key-type <arg> - задает тип и длину ключа. В нашем случае тип – rsa, длина - 2048 бит (с длиной ключа 1024 бит возникают проблемы);
-l – запрос пин-кода токена, до каких-либо операций с ним (обязательный параметр);
--id <arg> - определяет id создаваемого объекта (понадобится при создании сертификата).
6) Переходим к созданию сертификата.
Запускаем openssl и подгружаем модуль поддержки pkcs11:
$ openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/librtpkcs11ecp.so
7) Создаем сертификат в PEM-формате:
OpenSSL> req -engine pkcs11 -new -key 0:45 -keyform engine -x509 -out cert.pem -text
Здесь:
- key – указывает закрытый ключ (в нашем случае 0:45 – слот:ID ключа);
- x509 – выдает самоподписанный сертификат.
8) Сконвертируем сертификат PEM в CRT:
OpenSSL> x509 -in cert.pem -out cert.crt -outform DER
9) Закрываем openssl. Теперь сохраняем сертификат CRT на токен:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -l -y cert -w cert.crt --id 45
Здесь параметр -y <arg> – это тип объекта (может быть cert, privkey, pubkey, data), -w <arg> – записать объект на токен.
10) Остается только добавить сертификат PEM в список доверенных.
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ less ~/cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
На этом настройка закончена. После перезапуска ОС окно входа в систему будет выглядеть так: