|
Для обеспечения доступа к токенам на компьютерах, работающих с токенами (УЦ, клиенты, сервер, если он выступает в роли клиента) должен быть установлен пакет jcpkcs11-2. Этот пакет предоставляется производителем токенов и не входит в дистрибутивы Astra Linux. Для получения пакета и инструкций по его установке следует обратиться к производителю: https://www.aladdin-rd.ru.
Установить пакеты из дистрибутива Astra Linux:
| sudo apt install -y opensc libengine-pkcs11-openssl1.1 pcsc-tools |
При настройке рабочей системы используйте реальные имена вашего домена, сервера и клиента.
Порядок действий по настройке:
Создать каталог удостоверяющего центра (УЦ) командой:
| sudo mkdir /etc/ssl/CA |
В этом каталоге будут размещаться сгенерированные ключи и сертификаты.
Перейти в созданный каталог:
| cd /etc/ssl/CA |
Создать ключ и сертификат УЦ, указав собственные параметры в опции -subst:
В параметре Common name (CN) обязательно указать имя домена. В случае нашего примера: SMARTCARD.ALD |
| sudo openssl genrsa -out cakey.pem 2048 sudo openssl req -batch -new -key cakey.pem -out cacert.pem -subj '/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress= /CN=SMARTCARD.ALD' -x509 -days 3650 |
Параметр days определяет количество дней действия сертификата УЦ. |
Создать ключ и сертификат службы KDC, указав собственные параметры в опции -subst:
В Common name (CN) обязательно указать имя службы kdc. |
sudo openssl genrsa -out kdckey.pem 2048 |
Установить переменные среды. Переменные среды устанавливаются в рамках сессии, не устанавливаются для других сессий, не сохраняются после закрытия сессии:
| export REALM=SMARTCARD.ALD export CLIENT=kdc |
Убедиться что переменные указаны верно, воспользовавшись командой:
| env | grep -wE "REALM|CLIENT" |
Загрузить файл pkinit_extensions и сохранить в каталог в котором выполняются команды: pkinit_extensions.
|
Выпустить сертификат KDC:
| sudo openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial -days 365 |
Подключить устройство, которое следует подготовить. В зависимости от используемой модели токена (PKI или GOST), в дальнейшем требуется использовать определенную библиотеку ( libjcPKCS11-2.so или libASEP11.so). Узнать, где расположены библиотеки можно с помощью команды:
| /usr/lib/libASEP11.so /usr/lib/libjcPKCS11-2.so.2.7.3 |
Далее предполагается, что библиотеки расположены в каталоге /usr/lib/.
Проверить работоспособность JaCarta:
При использовании библиотеки libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH):
| pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -T |
при использовании библиотеки libASEP11.so (для JaCarta PKI):
| pkcs11-tool --module /usr/lib/libASEP11.so -T |
Инициализировать токен:
Внимание! Инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления. |
pkcs11-tool --slot 0x1ffff --init-token --so-pin 00000000 --label 'JaCarta PKI' --module /usr/lib/libjcPKCS11-2.so |
Задать ПИН-код пользователя:
pkcs11-tool --slot 0x1ffff --init-pin --so-pin 00000000 --login --pin 11111111 --module /usr/lib/libjcPKCS11-2.so |
--slot 0x1ffff — указывает используемый виртуальный слот токена. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.; |
Создать на устройстве пару ключей:
pkcs11-tool --slot 0x1ffff --login --pin 11111111 --keypairgen --key-type rsa:2048 --id 33 --label “2fa_test1_key” --module /usr/lib/libjcPKCS11-2.so |
-keypairgen --key-type rsa:2048 — указывает, что должны быть сгенерированы RSA ключи длиной 2048 бит; |
Создать запрос на сертификат с помощью инструмента openssl. Для этого выполнить следующие команды:
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) pkcs11 libengine-pkcs11-openssl версии 1.0.2 не совместим с библиотекой libjcPKCS11-2.so. Для корректного функционирования, следует:
|
Используемый для генерации сертификата закрытый ключ идентифицируется парой <десятичный_номер_слота>:<id>. Для токенов Рутокен слоты нумеруются числами вида 0x1, 0x2 и т.д., для токенов Аладдин слоты нумеруются как 0x1ffff, 0x2ffff и т.д. Слоту 0x1ffff соответствует десятичный номер 131071 (используется ниже в примере команды):
|
-new -key 131071:33, где 131071— номер виртуального слота с устройством (0x1ffff) , 33— атрибут CKA_ID раннее сгенерированных ключей. в поле CN = следует указать имя пользователя Узнать номер виртуального слота можно используя команду:
|
В случае если openssl выдаст ошибку о неверном слоте, № слота следует указать в десятичном формате, например: 131071:33 |
Выпустить сертификат для пользователя:
Установить переменные окружения:
export REALM=<имя_домена> |
Убедиться что переменные указаны верно:
env | grep -wE "REALM|CLIENT" |
Выпустить сертификат пользователя:
| sudo openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem -days 365 |
Перекодировать полученный сертификат из формата PEM в формат DER:
| sudo openssl x509 -in client.pem -out client.cer -inform PEM -outform DER |
Записать полученный сертификат на токен:
| pkcs11-tool --slot 0x1ffff --login --pin 11111111 --write-object client.cer --type 'cert' --label 'test1' --id 33 --module /usr/lib/libjcPKCS11-2.so |
--write-object ./client.cer— указывает, что необходимо записать объект и путь до него; |
Созданные в УЦ файлы kdc.pem, kdckey.pem, cacert.pem переместить в каталог /var/lib/krb5kdc/ на сервере;
Создать резервную копию файла /etc/krb5kdc/kdc.conf и отредактировать файл /etc/krb5kdc/kdc.conf, дополнив секцию [kdcdefaults] следующими записями:
pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem |
Первая запись задаёт ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации. Для этого можно использовать команды:
| sudo sed -i.`date +%Y-%m%d-%H:%M:%S` "/\[kdcdefaults\]/a \ pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem" /etc/krb5kdc/kdc.conf sudo sed -i "/\[kdcdefaults\]/a \ pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem" /etc/krb5kdc/kdc.conf |
Для принятия изменений выполнить команды:
| sudo systemctl restart krb5-admin-server sudo systemctl restart krb5-kdc |
Создать на клиенте каталог /etc/krb5/:
| sudo mkdir /etc/krb5/ |
В файле /etc/krb5.conf секцию [libdefaults] дополнить следующими строками:
[libdefaults] default_realm = SMARTCARD.ALD pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/libjcPKCS11-2.so |
Выполнить проверку:
| kinit |
Когда появится строка запроса PIN-кода к карте - ввести PIN-код;
Для проверки того, что билет Kerberos был успешно получен пользователем, ввести команду:
| klist |
Для удаления полученного билета:
| kdestroy |
Для включения отладки команду kinit следует использовать так:
|
Далее вход пользователя следует выполнять с подключенным к компьютеру токеном.
При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>:
| login <имя_пользователя> |
Существует возможность указания дополнительных параметров модуля аутентификации pam_krb5.so в файле /etc/pam.d/common-auth в строке относящейся к pam_krb5.so:
– try_pkinit — режим при котором осуществляется попытка аутентификации с помощью устройств PKCS-11, в случае провала попытки предоставляется возможность входа с помощью Kerberos пароля пользователя;
– use_pkinit — режим при котором требуется аутентификация с помощью устройств PKCS-11, в случае провала процесс входа прерывается;
– pkinit_prompt — вывод приглашения для подключения устройства PKCS-11 перед выполнением попытки входа.
После обновления pam-auth-update, опции pkinit исчезнут. Для того, чтобы опция сохранялась принудительно, в конфигурационном файле /usr/share/pam-configs/krb5 в поле Auth-Initial следует дописать одну из опций. |

Более подробное описание см. в руководстве man.