Оглавление |
---|
...
Информация | ||
---|---|---|
|
...
| |
|
...
Стенд:
- Сервер — 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, opensc.
Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit, libpam-krb5 на клиенте и сервере.
Для обеспечения возможности выпуска ключей и сертификатов на JaCarta на сервере также установите пакеты libengine-pkcs11-openssl1.1
Для обеспечения возможности обращения к смарт-карте JaCarta, на клиенте и сервере следует установить библиотеку libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH), libASEP11.so (для JaCarta PKI) которую следует скачать с официального сайта Аладдина:
...
Command |
---|
...
sudo apt |
...
install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1 |
...
Command |
---|
sudo dpkg -i <имя_загруженного_ |
...
файла> |
Установка и настройка центра сертификации на сервере
Для работы модуля pkinit нам придется воспользоваться OpenSSL в качестве УЦ(CA), чтобы создать ключевые пары и сертификаты клиента и сервера.
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.
Все настройки в руководстве выполняются для тестового домена SMARTCARD.ALD. Примем, что сервер и клиент принадлежат домену SMARTCARD.ALD, имя сервера - kdc, а клиента - client. При настройке используйте имя вашего домена, сервера и клиента.
Выполните следующие действия:
1) Создайте каталог CA командой:
...
Command |
---|
mkdir |
...
/etc/ssl/CA |
и перейдите в него. В этом каталоге будут размещаться сгенерированные ключи и сертификаты.
2) Создайте ключ и сертификат CA:
...
Command |
---|
...
openssl |
...
genrsa |
...
-out |
...
cakey.pem |
...
2048 |
...
openssl |
...
req |
...
-key |
...
cakey.pem |
...
-new |
...
-x509 |
...
-days |
...
3650 |
...
-out |
...
cacert.pem |
Примечание |
---|
...
Параметр days - количество дней действия сертификата CA |
В диалоге заполните необходимую информацию о вашем центре сертификации.
Примечание |
---|
В Common name указать имя домена. В случае нашего примера: SMARTCARD.ALD |
3) Создайте ключ и сертификат KDC:
...
Command |
---|
...
openssl |
...
genrsa |
...
-out |
...
kdckey.pem |
...
2048 |
...
|
...
req |
...
-new |
...
-out |
...
kdc.req |
...
-key |
...
kdckey.pem |
В диалоге заполните необходимую информацию о вашем сервере.
Примечание |
---|
В Common name указать kdc. |
4) Установите переменные среды. Переменные среды устанавливаются в рамках сессии и не устанавливаются для других сессий и не сохраняются после закрытия сессии.
...
Command |
---|
...
export |
...
REALM=SMARTCARD. |
...
ALD export CLIENT=kdc |
Для того, чтобы убедиться что переменные указаны верно, воспользуйтесь командой:
Command |
---|
env | grep -E "REALM|CLIENT" |
5) Загрузите файл pkinit_extensions и сохраните в каталог в котором, Вы выполняете команды:
View file name pkinit_extensions height 150
Раскрыть | ||
---|---|---|
| ||
|
6) Выпустите сертификат KDC:
...
Command |
---|
$ |
...
openssl |
...
x509 |
...
-req |
...
-in |
...
kdc.req |
...
-CAkey |
...
cakey.pem |
...
-CA |
...
cacert.pem |
...
-out |
...
kdc.pem |
...
-extfile |
...
pkinit_extensions |
...
-extensions |
...
kdc_cert |
...
-CAcreateserial |
...
-days |
...
365 |
7) Файлы kdc.pem, kdckey.pem, cacert.pem перенесите в /var/lib/krb5kdc/
8) Создайте резервную копию файла /etc/krb5kdc/kdc.conf. Отредактируйте /etc/krb5kdc/kdc.conf, дополнив секцию [kdcdefaults] следующими записями:
...
Command |
---|
pkinit_identity |
...
= |
...
FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem |
...
pkinit_anchors |
...
= |
...
FILE:/var/lib/krb5kdc/cacert.pem |
Первая запись задаёт ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации.
9. Для принятия изменений выполните:
Блок кода |
---|
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):
...
Command pkcs11-tool
...
--module
...
/usr/lib/libjcPKCS11-2.so
...
-T
...
libASEP11.so
...
(для
...
JaCarta
...
PKI)
...
:
Command pkcs11-tool
...
--module
...
/usr/lib/x64-athena/libASEP11.so
...
-T
Примечание | |
---|---|
путь до библиотеки libjcPKCS11-2.so, libASEP11.so может различаться. Для того чтобы определить путь до библиотеки libjcPKCS11-2.so введите команду:
|
...
|
Инициализация устройства
Для инициализации токена необходимо воспользоваться утилитой pkcs11-tool.
...
Command |
---|
pkcs11-tool --slot 0x1ffff --init-token --so-pin 00000000 --label 'JaCarta PKI' --module /usr/lib/libjcPKCS11-2.so |
Для задания ПИН кода пользователя используйте команду:
...
Command |
---|
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
Сгенерируйте ключи на устройстве, для этого введите следующую команду:
...
Command |
---|
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. Для этого введите следующие команды:
Примечание |
---|
1) В 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): 2) Либо установить и обновить Оперативные обновления для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) |
Command | |
---|---|
|
...
| |
|
...
pre SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11. |
...
so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD - |
...
...
SO_PATH:/usr/lib/x86_64-linux-gnu/engines-1.1/pkcs11.so |
...
MODULE_PATH:/usr/lib/libjcPKCS11-2.so |
...
req |
...
-engine |
...
pkcs11 |
...
-new |
...
-key |
...
131071:33 |
...
-keyform |
...
engine |
...
-out |
...
client. |
...
req |
...
|
Примечание |
---|
-new -key 131071:33, где 131071— номер виртуального слота с устройством (0x1ffff) , 33— атрибут CKA_ID раннее сгенерированных ключей. в CN = следует указать имя пользователя |
Примечание |
---|
В случае если openssl выдаст ошибку о неверном слоте, № слота следует укзать в 10-м формате, например: 131071:33 |
Выпуск сертификата для пользователя
Необходимо установить переменные окружения:
...
Command |
---|
...
export |
...
SMARTCARD.ALD - ваш домен
test1 - Ваш доменной пользователь
REALM= |
...
<имя_домена> |
Для того, чтобы убедиться что переменные указаны верно, воспользуйтесь командой:
Примечание |
---|
env | grep -E "REALM |
...
| |
...
CLIENT" |
и выпустить сертификат на пользователя:
...
Command |
---|
$ |
...
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.
...
Command |
---|
# |
...
openssl |
...
x509 |
...
-in |
...
client.pem |
...
-out |
...
client.cer |
...
-inform |
...
PEM |
...
-outform |
...
DER |
Запишите полученный сертификат на токен:
...
Command |
---|
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— указывает, что необходимо записать объект и путь до него; |
Настройка клиента. Проверка работоспособности
Создайте на клиенте каталог /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 |
Выполните проверку:
...
Command |
---|
$ |
...
kinit |
Когда появится строка запроса PIN-кода к карте, введите его.
Для проверки того, что ,билет kerberos-тикет был успешно получен для пользователя, введите команду:
Command |
---|
klist |
...
Для
...
билета:
Command |
---|
kdestroy |
Примечание |
---|
Для |
...
включения отадки перед командой команду kinit следует |
...
использовать так:
|
...
|
Вход выполняется с подключенным токеном к компьютеру. При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>.
...
Command |
---|
...
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.