Статья применима к:
- Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
- Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
- Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
- Astra Linux Common Edition 2.12
Стенд:
- Сервер — Astra Linux Smolensk SE 1.6, Update 2, Bulletin 20190222SE16;
- Клиент — Astra Linux Smolensk SE 1.6, Update 2, Bulletin 20190222SE16;
- JaCarta PKI;
Предполагается, что Astra Linux Directory (ALD) уже развернут, существует минимум один доменный пользователь, который может пройти аутентификацию по паролю, время клиента и сервера совпадают (ntp).
Терминология Kerberos
- Билет (ticket) – временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимая служба.
- Клиент (client) – некая сущность в сети (пользователь, хост или сервис), которая может получить билет от Kerberos.
- Центр выдачи ключей (key distribution center, KDC) – сервис, выдающий билеты Kerberos.
- Область (realm) – сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов. Имя realm регистрозависимо, обычно пишется в верхнем регистре и совпадает с именем домена.
- Принципал (principal) – уникальное имя для клиента, для которого разрешается аутентификация в Kerberos. Записывается в виде root[/instance]@REALM.
Установка драйверов на сервер и клиент
Для обеспечения работы со смарт-картой JaCarta на клиенте и сервере требуются следующие пакеты:
- На клиенте и сервере:
- libccid;
- pcscd;
- libpcsclite1;
- pcsc-tools;
- opensc;
- для обеспечения работы со смарт-картой подсистемы Kerberos дополнительно требуются пакеты:
- krb5-pkinit;
- libpam-krb5;
для обеспечения возможности обращения к смарт-картам JaCarta установить:
либо библиотеку libjcPKCS11-2.so для JaCarta PKI/ГОСТ/FLASH;
либо библиотеку libASEP11.so для JaCarta PKI;
- На сервере:
- для обеспечения возможности выпуска ключей и сертификатов на JaCarta требуется пакет libengine-pkcs11-openssl1.1.
Установка библиотеки:
- Загрузить архив с официального сайта Аладдин: https://www.aladdin-rd.ru/support/downloads/jacarta;
- Распаковать архив:
unzip <имя_загруженного_файла>
Установка и настройка центра сертификации на сервере
Для работы модуля pkinit нам придется воспользоваться OpenSSL в качестве УЦ(CA), чтобы создать ключевые пары и сертификаты клиента и сервера.
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.
Все настройки в руководстве выполняются для тестового домена SMARTCARD.ALD. Примем, что:
- сервер и клиент принадлежат домену SMARTCARD.ALD;
- имя службы - kdc;
- имя клиента - client.
При настройке используйте имя вашего домена, сервера и клиента.
Порядок действий:
Создать каталог удостоверяющего центра (УЦ) командой:
sudo mkdir /etc/ssl/CAВ этом каталоге будут размещаться сгенерированные ключи и сертификаты.
Перейти в созданный каталог:
cd /etc/ssl/CAСоздать ключ и сертификат УЦ:
sudo openssl genrsa -out cakey.pem 2048
sudo openssl req -key cakey.pem -new -x509 -days 3650 -out cacert.pemПараметр days определяет количество дней действия сертификата УЦ.
В диалоге заполнить необходимую информацию о создаваемом УЦ.
В параметре Common name указать имя домена. В случае нашего примера: SMARTCARD.ALD
Создать ключ и сертификат службы KDC:
sudo openssl genrsa -out kdckey.pem 2048В диалоге заполните необходимую информацию о вашем сервере.
sudo openssl req -new -out kdc.req -key kdckey.pemВ Common name указать имя службы kdc.
Установить переменные среды. Переменные среды устанавливаются в рамках сессии, не устанавливаются для других сессий, не сохраняются после закрытия сессии:
export REALM=SMARTCARD.ALD
export CLIENT=kdcУбедиться что переменные указаны верно, воспользовавшись командой:
env | grep -wE "REALM|CLIENT"Загрузить файл pkinit_extensions и сохранить в каталог в котором выполняются команды: pkinit_extensions.
Выпустить сертификат KDC:
openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial -days 365Файлы kdc.pem, kdckey.pem, cacert.pem переместить в каталог /var/lib/krb5kdc/:
sudo mv 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 systemctl restart krb5-admin-server sudo systemctl restart krb5-kdc
Подготовка смарт-карты. Выпуск ключей и сертификата пользователя
Подключить устройство, которое следует подготовить;
В зависимости от модели токена (PKI или GOST), в дальнейшем требуется указывать определенную библиотеку ( libjcPKCS11-2.so или libASEP11.so)
Проверка работы JaCarta в системе
Для проверки работы JaCarta:
libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH):
pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -TlibASEP11.so (для JaCarta PKI):
pkcs11-tool --module /usr/lib/x64-athena/libASEP11.so -T
Путь к библиотекам libjcPKCS11-2.so, libASEP11.so может различаться. Для того чтобы определить путь до библиотеки libjcPKCS11-2.so выполнить команду:
Инициализация устройства
Для инициализации токена воспользоваться утилитой pkcs11-tool:
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 и т.д.
--init-token – команда инициализации токена.
--pin - пин код пользователя JaCarta. По умолчанию имеет значение 11111111
--so-pin 00000000 – ПИН код администратора JaCarta PKI. По умолчанию имеет значение 00000000
--label 'JaCarta PKI' - метка(название) устройства.
--module - указывает путь до библиотеки libjcPKCS11-2.so
Внимание! Инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления.
Генерация пары ключей на JaCarta
Для создания ключей на устройстве выполнить команду:
-keypairgen --key-type rsa:2048 — указывает, что должны быть сгенерированы RSA ключи длиной 2048 бит;
--id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым;
--label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым;
Генерация запроса на сертификат
Сгенерировать запрос на сертификат с помощью инструмента openssl. Для этого выполнить следующие команды:
В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) pkcs11 libengine-pkcs11-openssl версии 1.0.2 не совместим с библиотекой libjcPKCS11-2.so. Для корректного функционирования, следует:
- либо скачать и установить подписанный пакет libengine-pkcs11-openssl1.1 версии 0.4.4-4 для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6): libengine-pkcs11-openssl1.1_0.4.4-4_amd64.deb
- либо установить и обновить Оперативные обновления для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
OpenSSL>
engine dynamic -pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:/usr/lib/libjcPKCS11-2.so(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:/usr/lib/libjcPKCS11-2.so
Loaded: (pkcs11) pkcs11 engine
OpenSSL> req -engine pkcs11 -new -key 131071:33 -keyform engine -out client.req
engine
"pkcs11"
set
.
Enter PKCS
#11 token PIN for JaCarta ECP <AstraLinux>:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter
'.'
, the field will be left blank.
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Moscow
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Rusbitech
Organizational Unit Name (eg, section) []: Astra
Common Name (e.g. server FQDN or YOUR name) []:test1 (!Ваш_Пользователь!)
Email Address []:*********
OpenSSL>
exit
-new -key 131071:33, где 131071— номер виртуального слота с устройством (0x1ffff) , 33— атрибут CKA_ID раннее сгенерированных ключей.
в поле CN = следует указать имя пользователя
Узнать номер виртуального слота можно используя команду:
В случае если openssl выдаст ошибку о неверном слоте, № слота следует укзать в 10-м формате, например: 131071:33
Выпуск сертификата для пользователя
Необходимо установить переменные окружения:
export CLIENT=<имя_доменного_пользователя>
env | grep -E "REALM|CLIENT"
и выпустить сертификат на пользователя:
Запишите полученный сертификат на токен:
--write-object ./client.cer— указывает, что необходимо записать объект и путь до него;
--type 'cert'— указывает, что тип записываемого объекта - сертификат;
'cert' --label 'test1'— устанавливает атрибут CKA_LABEL(имя) сертификата. Атрибут может быть любым;
Настройка клиента. Проверка работоспособности
Создайте на клиенте каталог /etc/krb5/. Скопируйте в /etc/krb5/ сертификат CA (cacert.pem) c сервера.
Настройте kerberos в /etc/krb5.conf. Секцию [libdefaults] дополните следующими строками:
[libdefaults] default_realm = SMARTCARD.ALD pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/libjcPKCS11-2.so
Выполните проверку:
Когда появится строка запроса PIN-кода к карте, введите его.
Для проверки того, что ,билет kerberos-тикет был успешно получен для пользователя, введите команду:
Для билета:
Для включения отадки перед командой команду kinit следует использовать так:
Вход выполнять с подключенным к компьютеру токеном. При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>:
Настройка политики аутентификации
Существует возможность указания дополнительных параметров модуля аутентификации 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.