Настройка двухфакторной аутентификации в
домене Samba DC на ОС Альт
Служба обеспечения совместимости <gost@basealt.ru>, Константин Белаш
Version 1.4, 09.08.2022
Оглавление
1. Общая информация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê1
2. Базовая конфигурация стенда. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.1. Обновление контроллера домена Samba DC и ПК клиента . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.2. Cозданиe домена Samba DC. Кратко.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.3. Проверка работы домена Samba DC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê2
2.3.1. Проверка работы DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê3
2.3.2. Проверка работы службы Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê3
2.3.3. Конфигурация Samba DC после настройки контроллера домена. . . . . . . . . . . . . . . . . . . Ê3
2.4. Проверка работы Рабочей Станции в домене Samba DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê4
2.5. Установка и настройка ПО для работы с токенами. На сервере и на клиенте.. . . . . . . . . . Ê5
2.5.1. Настройка Polkit. На сервере и на клиенте.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê5
2.5.2. Проверка работы PC/SC интерфейса. На сервере и на клиенте.. . . . . . . . . . . . . . . . . . . . Ê6
2.5.3. Проверка работы библиотек вендоров PKCS#11. На сервере и на клиенте.. . . . . . . . . Ê7
2.5.3.1. ESMART Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê7
2.5.3.2. Rutoken ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê7
2.5.3.3. JaCarta-2 SE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê8
2.5.3.4. p11-kit-proxy. На сервере.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê8
3. Настройка на сервере Samba DC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê13
3.1. Настройка УЦ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê13
3.2. Выпускаем сертификаты для пользователей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê16
3.2.1. Генерируем ключевую пару на токенах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê17
3.2.2. Генерируем запрос на сертификат . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê19
3.2.3. Выпускаем сертификаты. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê20
3.2.4. Записываем сертификаты на токены. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê23
3.3. Выпускаем сертификат для службы OCSP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê24
3.4. Настройка TLS службы Samba DC. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê25
3.5. Настраиваем Kerberos PKINIT на DC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê26
3.6. Создаём доменных пользователей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê27
4. Настраиваем PKINIT на клиенте . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê28
4.1. Настройка и проверка Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê28
4.1.1. Рутокен ECP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê28
4.1.2. ESMART Token. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê29
4.1.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê29
4.1.4. Отладка Kerberos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê29
4.2. Настройка sssd. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê30
4.2.1. p11_child. Проверка работы sssd c токенами . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê30
4.2.2. sssd.conf. Настройка службы sssd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê32
5. Проверяем 2ФА в текстовой консоли . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê34
5.1. Рутокен ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê34
5.2. ESMART Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê34
5.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê34
6. Проверяем 2ФА в графическом сеансе. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê36
6.1. Рутокен ECP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê36
6.2. ESMART Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê39
6.3. JaCarta-2 SE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê43
7. Проверка отзыва сертификата . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê48
8. Отладка sssd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê49
9. Полезные ссылки. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ê50
# 1. Общая информация
Настоящий документ можно считать практическим руководством для конечного
пользователя с методическими рекомендациями по контролю за успешностью выполнения
настройки.
Из этого документа станет понятно, как настроить двухфакторную аутентификацию (2ФА) в
домене Samba DC, где в качестве клиента выступает ОС «Альт Рабочая станция (K) 10».
В процессе настройки и тестирования мы убедимся, что токены, содержащие
криптографическую информацию, позволяют зарегистрироваться в домене при корректном
вводе PIN-кода, без дополнительных способов аутентификации (например, ввода пароля), а
также убедиться в обратном, что при вводе некорректного PIN-кода в аутентификации
будет отказано. Также в аутентификации будет отказано если сертификат отозван
Удостоверяющим Центром (УЦ).
Под криптографической информацией на токене здесь явно подразумеваются: сертификат
пользователя, выданный УЦ, открытый и закрытый ключи пользователя.
С теоретической информацией по доменной двухфакторной аутентификации можно
ознакомиться в документе «Двухфакторная аутентификация в доменной инфраструктуре
ОС Альт. Общая информация.».
1
# 2. Базовая конфигурация стенда
Стенд состоит из контроллера домена Samba DC и клиента домена.
Контроллер домена можно настроить по инструкции https://docs.altlinux.org/ru-RU/
index.html#alt-server, п. Samba 4 в роли контроллера домена Active Directory или
https://www.altlinux.org/ActiveDirectory/DC
2.1. Обновление контроллера домена Samba DC и
ПК клиента
Настройка выполняется на обновлённой пакетной базе и последнем ядре из репозитория:
$ su-
# apt-get update
# apt-get dist-upgrade
# update-kernel
# reboot
2.2. Cозданиe домена Samba DC. Кратко.
p10-srv ~ # apt-get install task-samba-dc
p10-srv ~ # for service in smb nmb krb5kdc slapd bind; \
Ê do chkconfig $service off; service $service stop; done
p10-srv ~ # rm -f /etc/samba/smb.conf
p10-srv ~ # rm -rf /var/lib/samba
p10-srv ~ # rm -rf /var/cache/samba
p10-srv ~ # mkdir -p /var/lib/samba/sysvol
p10-srv ~ # cat /etc/sysconfig/network | grep HOSTNAME
HOSTNAME=p10-srv.test5.alt
p10-srv ~ # hostname p10-srv.test5.alt
p10-srv ~ # domainname test5.alt
p10-srv ~ # samba-tool domain provision --realm=test5.alt \
Ê --domain test5 --adminpass='Pa$$word' --dns-backend=SAMBA_INTERNAL \
Ê --server-role=dc
p10-srv ~ # systemctl enable --now samba
p10-srv ~ # cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
2.3. Проверка работы домена Samba DC
p10-srv ~ # samba-tool domain info 127.0.0.1
Forest : test5.alt
2
Domain : test5.alt
Netbios domain : TEST5
DC name : p10-srv.test5.alt
DC netbios name : P10-SRV
Server site : Default-First-Site-Name
Client site : Default-First-Site-Name
p10-srv ~ # smbclient -L localhost -U administrator
Enter TEST5\administrator's password:
Ê Sharename Type Comment
Ê --------- ---- -------
Ê sysvol Disk
Ê netlogon Disk
Ê IPC$ IPC IPC Service (Samba 4.14.10)
SMB1 disabled -- no workgroup available
2.3.1. Проверка работы DNS
Убедитесь в наличии nameserver 127.0.0.1 в /etc/resolv.conf.
p10-srv ~ # host test5.alt
test5.alt has address 10.33.33.233
p10-srv ~ # host -t SRV _kerberos._udp.test5.alt.
_kerberos._udp.test5.alt has SRV record 0 100 88 p10-srv.test5.alt.
p10-srv ~ # host -t SRV _ldap._tcp.test5.alt.
_ldap._tcp.test5.alt has SRV record 0 100 389 p10-srv.test5.alt.
p10-srv ~ # host -t A p10-srv.test5.alt.
p10-srv.test5.alt has address 10.33.33.233
2.3.2. Проверка работы службы Kerberos
p10-srv ~ # kinit administrator
Password for administrator@TEST5.ALT:
Warning: Your password will expire in 41 days on Чт 30 июн 2022 17:34:09
p10-srv ~ # klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@TEST5.ALT
Valid starting Expires Service principal
19.05.2022 17:42:21 20.05.2022 03:42:21 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 20.05.2022 17:42:17
2.3.3. Конфигурация Samba DC после настройки контроллера домена
3
p10-srv ~ # cat /etc/samba/smb.conf | grep -viE '(^#|^$)'
[global]
Ê dns forwarder = 10.33.33.1
Ê netbios name = P10-SRV
Ê realm = TEST5.ALT
Ê server role = active directory domain controller
Ê workgroup = TEST5
[sysvol]
Ê path = /var/lib/samba/sysvol
Ê read only = No
[netlogon]
Ê path = /var/lib/samba/sysvol/test5.alt/scripts
Ê read only = No
2.4. Проверка работы Рабочей Станции в домене
Samba DC
Вводим ОС Альт Рабочая станция в домен:
если используется ОС Альт Рабочая станция К https://docs.altlinux.org/ru-RU/index.html#
alt-kworkstation, п. «Ввод рабочей станции в домен Active Directory»
если используется ОС Альт Рабочая станция https://docs.altlinux.org/ru-RU/index.html#
alt-workstation, п. «Ввод рабочей станции в домен Active Directory»
work ~ # getent passwd administrator
administrator:*:1855200500:1855200513:Administrator:/home/TEST5.ALT/administrator:/bin
/bash
work ~ # net ads info
LDAP server: 10.33.33.233
LDAP server name: p10-srv.test5.alt
Realm: TEST5.ALT
Bind Path: dc=TEST5,dc=ALT
LDAP port: 389
Server time: Чт, 19 мая 2022 18:39:18 MSK
KDC server: 10.33.33.233
Server time offset: -1
Last machine account password change: Чт, 19 мая 2022 18:00:03 MSK
work ~ # net ads testjoin
Join is OK
Проверка работы Kerberos на клиенте:
work ~ # kinit administrator
Password for administrator@TEST5.ALT:
work ~ # klist
Ticket cache: KEYRING:persistent:0:0
4
Default principal: administrator@TEST5.ALT
Valid starting Expires Service principal
19.05.2022 18:41:12 20.05.2022 04:41:12 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 26.05.2022 18:41:03
2.5. Установка и настройка ПО для работы с
токенами. На сервере и на клиенте.
Для работы с токенами необходимо установить следующие пакеты:
# apt-get install librtpkcs11ecp libjcpkcs11 isbc-pkcs11 \
Ê opensc pcsc-lite-ccid pcsc-lite pcsc-tools gnutls-utils \
Ê libp11 libp11-kit
librtpkcs11ecp, libjcpksc11, isbc-pkcs11библиотеки PKCS#11 вендоров токенов: Актив,
Аладдин и ISBC, соответственно;
opensc, pcsc-lite-ccid, pcsc-lite, pcsc-tools, gnutls-utilsутилиты и библиотеки,
необходимые для обеспечения работы интерфейсов PC/SC(+CCID) и PKCS#11;
libp11библиотека для работы с токенами в openssl (openssl engine);
libp11-kitпрокси-библиотека для работы с библиотеками вендоров токенов по
протоколу PKCS#11.
Если каких-то пакетов в репозитории нет или с ними выявлены проблемы, необходимо
установить их с сайта производителя:
Актив Рутокен (librtpkcs11ecp): https://www.rutoken.ru/support/download/pkcs/
Аладдин JaСarta (libjcPKCS11-2): https://www.aladdin-rd.ru/support/downloads/jacarta_client
(теперь ещё и в составе «Единого Клиента JaCarta»)
ISBC ESMART (libisbc_pkcs11_main): https://esmart.ru/download/
2.5.1. Настройка Polkit. На сервере и на клиенте.
По умолчанию Policy Kit позволяет работать с токенами только в активном сеансе (после
входа в ОС) и только локальному пользователю. Чтобы можно было работать с токенами на
этапе логина доменных пользователей, необходимо поменять все запреты ">no<" на
разрешения ">yes<" в файле /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy.
В итоге конфигурационный файл polkit примет следующий вид:
# cat /usr/share/polkit-1/actions/org.debian.pcsc-lite.policy
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
Ê"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
5
Ê"http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
<policyconfig>
Ê <vendor>The PCSC-lite Project</vendor>
Ê <vendor_url>https://pcsclite.apdu.fr/</vendor_url>
<!-- <icon_name>smart-card</icon_name> -->
Ê <action id="org.debian.pcsc-lite.access_pcsc">
Ê <description>Access to the PC/SC daemon</description>
Ê <message>Authentication is required to access the PC/SC daemon</message>
Ê <defaults>
Ê <allow_any>yes</allow_any>
Ê <allow_inactive>yes</allow_inactive>
Ê <allow_active>yes</allow_active>
Ê </defaults>
Ê </action>
Ê <action id="org.debian.pcsc-lite.access_card">
Ê <description>Access to the smart card</description>
Ê <message>Authentication is required to access the smart card</message>
Ê <defaults>
Ê <allow_any>yes</allow_any>
Ê <allow_inactive>yes</allow_inactive>
Ê <allow_active>yes</allow_active>
Ê </defaults>
Ê </action>
</policyconfig>
2.5.2. Проверка работы PC/SC интерфейса. На сервере и на клиенте.
Работу интерфейса PC/SC обеспечивает служба pcscd.service, которая запускается через
одноимённый сокет pcscd.socket.
Включаем pcscd.socket:
# systemctl enable --now pcscd.socket
Created symlink /etc/systemd/system/sockets.target.wants/pcscd.socket
/lib/systemd/system/pcscd.socket.
Убеждаемся, что токен виден в выводе утилиты pcsc_scan, запущенной с правами
пользователя, и однозначно определяется его модель:
$ pcsc_scan -r
Using reader plug'n play mechanism
Scanning present readers...
0: Aktiv Rutoken ECP 00 00
1: ESMART Token GOST [ESMART Token] 01 00
2: Aladdin R.D. JaCarta 02 00
Если в выводе команды pcsc_scan -r вы не видите токенов, то для решения этого вопроса
обратитесь к документу «Методика тестирования токенов» (доступна по запросу в службу
6
обеспечения совместимости).
2.5.3. Проверка работы библиотек вендоров PKCS#11. На сервере и на
клиенте.
Библиотеки PKCS#11 являются основой для работы с токенами и будут использоваться
всеми компонентами, участвующими в 2ФА.
В общем виде работа с библиотеками вендоров токенов выглядит следующим образом:
$ pkcs11-tool --module путь_до_библиотеки_вендора --list-token-slots
Для каждого токена мы должны получить информацию о нём и о доступных слотах. Если в
выводе вышеуказанных команд вы не видите слотов токена, то для решения этого вопроса
обратитесь к документу «Методика тестирования токенов» (доступна по запросу в службу
обеспечения совместимости).
2.5.3.1. ESMART Token
$ pkcs11-tool --module /usr/lib64/libisbc_pkcs11_main.so --list-token-slots
Available slots:
Slot 0 (0x2): ESMART Token GOST [ESMART Token] 02 00
Ê token label : esmart_64
Ê token manufacturer : ISBC
Ê token model : ESMART Token
Ê token flags : login required, rng, token initialized, PIN initialized
Ê hardware version : 0.0
Ê firmware version : 2.4
Ê serial num : 206F6060C102
Ê pin min/max : 4/8
2.5.3.2. Rutoken ECP
$ pkcs11-tool --module /usr/lib64/librtpkcs11ecp.so --list-token-slots
Available slots:
Slot 0 (0x0): Aktiv Rutoken ECP 00 00
Ê token label : RutokenECP2151
Ê token manufacturer : Aktiv Co.
Ê token model : Rutoken ECP
Ê token flags : login required, rng, SO PIN to be changed, token initialized,
PIN initialized, user PIN to be changed
Ê hardware version : 138.1
Ê firmware version : 23.2
Ê serial num : 3b088b41
Ê pin min/max : 6/32
7
2.5.3.3. JaCarta-2 SE
$ pkcs11-tool --module /usr/lib64/libjcPKCS11-2.so --list-token-slots
Available slots:
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta 01 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta GOST 2.0
Ê token flags : login required, rng, token initialized, PIN initialized, other
flags=0x800
Ê hardware version : 1.0
Ê firmware version : 2.55
Ê serial num : 6082023848937678
Ê pin min/max : 6/32
Slot 1 (0x2ffff): Aladdin R.D. JaCarta 01 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta Laser
Ê token flags : login required, token initialized, PIN initialized
Ê hardware version : 1.0
Ê firmware version : 1.0
Ê serial num : 6082023848937678
Ê pin min/max : 4/10
2.5.3.4. p11-kit-proxy. На сервере.
Для упрощения работы с тремя разными токенами вместо трёх библиотек вендоров можно
использовать одну p11-kit-proxy. Эта библиотека является промежуточным звеном
(прокси) между утилитами (например, pkcs11-tool) и библиотеками вендоров (например,
librtpkcs11ecp.so). Таким образом, для работы с разными токенами, для которых есть
модуль pkcs11, можно использовать одну библиотеку.
Обратите внимание, что разные библиотеки PKCS#11 по разному
присваивают идентификатор слота, он указывается после индекса слота в
скобках Slot 2 ( 0x2ffff ).
Чтобы использовать p11-kit-proxy, необходимо убедиться что необходимые модули PKCS#11
для работы с библиотеками вендоров присутствуют:
user@p10-srv ~ $ ls /etc/pkcs11/modules/
isbc.module jcpkcs11.module rutokenecp.module
Все необходимые модули (isbc.module, jcpkcs11.module, rutokenecp.module), для
используемых трёх токенов, присутствуют. Проверим работу библиотеки p11-kit-proxy:
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
8
Ê --list-token-slots
Available slots:
Slot 0 (0x10): ESMART Token GOST [ESMART Token] 01 00
Ê token label : esmart_64
Ê token manufacturer : ISBC
Ê token model : ESMART Token
Ê token flags : login required, rng, token initialized, user PIN count low, PIN
initialized
Ê hardware version : 0.0
Ê firmware version : 2.4
Ê serial num : 206F6060C102
Ê pin min/max : 4/8
Slot 1 (0x12): Aladdin R.D. JaCarta 02 00
C_GetTokenInfo() failed: rv = unknown PKCS11 error
Slot 2 (0x13): Aladdin R.D. JaCarta 02 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta Laser
Ê token flags : login required, token initialized, PIN initialized
Ê hardware version : 1.0
Ê firmware version : 1.0
Ê serial num : 6082023848937678
Ê pin min/max : 4/10
Slot 3 (0x32): Aktiv Rutoken ECP 00 00
Ê token label : Rutoken ECP <no label>
Ê token manufacturer : Aktiv Co.
Ê token model : Rutoken ECP
Ê token flags : login required, rng, SO PIN to be changed, token initialized,
PIN initialized, user PIN to be changed
Ê hardware version : 138.1
Ê firmware version : 23.2
Ê serial num : 3b088b41
Ê pin min/max : 6/32
Библиотека p11-kit-proxy.so показывает все токены и слоты на них в виде общего набора
слотов.
Ошибка в Slot 1 связана с тем, что данный слот токена JaCarta-2 SE работает только с
ГОСТовыми протоколами шифрования и для этого слота требуется библиотека libjckt2. Эта
библиотека присутствует в пакете libjcpksc11, но p11-kit-proxy ничего о ней не знает, так
как ищет эту библиотеку в /usr/lib64/pkcs11/, а её там нет.
Чтобы это исправить, создадим символическую ссылку в каталоге /usr/lib64/pkcs11/ на
библиотеку libjckt2.so:
p10-srv ~ # cd /usr/lib64/pkcs11/
p10-srv pkcs11 # ln -s ../libjckt2.so .
Убедимься что все слоты на всех токенах отображаются корректно:
9
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --list-token-slots
Available slots:
Slot 0 (0x10): ESMART Token GOST [ESMART Token] 01 00
Ê token label : esmart_64
Ê token manufacturer : ISBC
Ê token model : ESMART Token
Ê token flags : login required, rng, token initialized, user PIN count low, PIN
initialized
Ê hardware version : 0.0
Ê firmware version : 2.4
Ê serial num : 206F6060C102
Ê pin min/max : 4/8
Slot 1 (0x12): Aladdin R.D. JaCarta 02 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta GOST 2.0
Ê token flags : login required, rng, token initialized, PIN initialized, other
flags=0x800
Ê hardware version : 1.0
Ê firmware version : 2.55
Ê serial num : 6082023848937678
Ê pin min/max : 6/32
Slot 2 (0x13): Aladdin R.D. JaCarta 02 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta Laser
Ê token flags : login required, token initialized, PIN initialized
Ê hardware version : 1.0
Ê firmware version : 1.0
Ê serial num : 6082023848937678
Ê pin min/max : 4/10
Slot 3 (0x32): Aktiv Rutoken ECP 00 00
Ê token label : Rutoken ECP <no label>
Ê token manufacturer : Aktiv Co.
Ê token model : Rutoken ECP
Ê token flags : login required, rng, SO PIN to be changed, token initialized,
PIN initialized, user PIN to be changed
Ê hardware version : 138.1
Ê firmware version : 23.2
Ê serial num : 3b088b41
Ê pin min/max : 6/32
Для токена JaCarta-2 SE мы будем использовать Slot 2 (0x13)(token model: JaCarta Laser).
Только этот слот поддерживает протоколы шифрования RSA в данном токене.
Во время настройки 2ФА на клиенте для токена JaCarta-2 SE нам необходимо
будет указать конкретный слот, на котором будет находиться сертификат.
Служба sssd (служба аутентификации) будет определять этот слот по метке
10
токена (token label). И метки для каждого слота должны быть уникальны.
На новых токенах JaCarta метки слотов могут совпадать.
Чтобы установить метку слота его необходимо проинициализировать.
При инициализации слота все данные на нём будут удалены.
Проинициализируем Slot 2 (0x13) и установим метку jacarta-slot-laser:
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so --init-token \
Ê --slot 0x13 --label jacarta-slot-laser
Please enter the new SO PIN:
Please enter the new SO PIN (again):
Token successfully initialized
SO PIN - пин-код администратора
0x13 - идентификатор слота
После инициализации слота необходимо установить пин-код пользователя:
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so --init-pin \
Ê --slot 0x13 --login
Logging in to "jacarta-slot-laser".
Please enter SO PIN:
Please enter the new PIN:
Please enter the new PIN again:
User PIN successfully initialized
Таким же способом можно проинициализировать и установить метки для других слотов.
Теперь слоты будут выглядеть следующим образом:
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --list-token-slots
Available slots:
Slot 0 (0x11): ESMART Token GOST [ESMART Token] 01 00
Ê token label : esmart_64
Ê token manufacturer : ISBC
Ê token model : ESMART Token
Ê token flags : login required, rng, token initialized, PIN initialized
Ê hardware version : 0.0
Ê firmware version : 2.4
Ê serial num : 206F6060C102
Ê pin min/max : 4/8
Slot 1 (0x12): Aladdin R.D. JaCarta 00 00
Ê token label : STANDART.SE
Ê token manufacturer : Aladdin R.D.
11
Ê token model : JaCarta GOST 2.0
Ê token flags : login required, rng, token initialized, PIN initialized, other
flags=0x800
Ê hardware version : 1.0
Ê firmware version : 2.55
Ê serial num : 6082023848937678
Ê pin min/max : 6/32
Slot 2 (0x13): Aladdin R.D. JaCarta 00 00
Ê token label : jacarta-slot-laser
Ê token manufacturer : Aladdin R.D.
Ê token model : JaCarta Laser
Ê token flags : login required, token initialized, PIN initialized
Ê hardware version : 1.0
Ê firmware version : 1.0
Ê serial num : 6082023848937678
Ê pin min/max : 4/10
Slot 3 (0x34): Aktiv Rutoken ECP 02 00
Ê token label : RutokenECP2151
Ê token manufacturer : Aktiv Co.
Ê token model : Rutoken ECP
Ê token flags : login required, rng, SO PIN to be changed, token initialized,
PIN initialized, user PIN to be changed
Ê hardware version : 138.1
Ê firmware version : 23.2
Ê serial num : 3b088b41
Ê pin min/max : 6/32
12
# 3. Настройка на сервере Samba DC
3.1. Настройка УЦ
УЦ настраиваем на Samba DC, в домашней папке локального пользователя. Для работы с
сертификатами x509 будем использовать openssl, как наиболее распространённое ПО для
этих целей.
Создаём необходимую структуру каталогов УЦ в домашней папке локального пользователя
"user".
user@p10-srv ~ $ mkdir -pv demoCA/{certs,newcerts,private}
mkdir: создан каталог 'demoCA'
mkdir: создан каталог 'demoCA/certs'
mkdir: создан каталог 'demoCA/newcerts'
mkdir: создан каталог 'demoCA/private
user@p10-srv ~ $ touch demoCA/index.txt
user@p10-srv ~ $ echo "01" > demoCA/serial
Генерируем ключ УЦ
user@p10-srv ~ $ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
Ê -outform PEM -out demoCA/private/cakey.pem
........................................................+++++
..+++++
Создаём сертификат УЦ
user@p10-srv ~ $ openssl req -new -x509 -key demoCA/private/cakey.pem \
Ê -out demoCA/certs/cacert.pem -extensions v3_ca -days +3650 \
Ê -outform PEM -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=CA"
user@p10-srv ~ $ openssl x509 -in demoCA/certs/cacert.pem -noout -text
Certificate:
Ê Data:
Ê Version: 3 (0x2)
Ê Serial Number:
Ê 08:2c:12:15:fa:3b:dc:95:ae:a9:d8:a2:60:75:ea:bd:33:3c:ab:9a
Ê Signature Algorithm: sha256WithRSAEncryption
Ê Issuer: C = RU, ST = Moscow, O = TEST5.ALT, CN = CA
Ê Validity
Ê Not Before: May 20 08:45:42 2022 GMT
Ê Not After : May 17 08:45:42 2032 GMT
13
Ê Subject: C = RU, ST = Moscow, O = TEST5.ALT, CN = CA
Ê Subject Public Key Info:
Ê Public Key Algorithm: rsaEncryption
Ê RSA Public-Key: (2048 bit)
Ê Modulus:
Ê 00:b2:d1:3b:4d:e4:4d:07:f4:a2:22:4d:89:be:9e:
Ê a9:3b:39:79:d7:c0:de:ce:be:94:80:1d:b2:9a:9d:
Ê e0:23:a7:8e:1b:69:a2:ac:39:7b:f0:83:90:d5:86:
Ê d2:c1:bb:89:04:17:44:c3:f9:4c:25:ef:5f:1c:8b:
Ê 99:a3:87:7d:41:08:14:55:63:e0:62:1f:ca:77:c3:
Ê 34:e7:d1:f2:fe:a9:97:79:7d:e1:2a:46:11:1a:5a:
Ê ac:44:0c:93:f1:19:08:a1:0c:bb:c6:10:45:0f:c0:
Ê 8a:aa:7b:a5:42:6f:e5:4d:c3:08:35:dd:6c:f3:b5:
Ê 6d:49:b4:f0:72:6a:67:6b:80:e7:5d:4d:df:45:d7:
Ê 63:72:99:4b:85:30:1d:d6:f8:26:e8:a7:3c:a5:1f:
Ê 76:b4:6c:54:4c:9f:d5:f9:d0:90:f6:99:ce:53:52:
Ê 89:e8:a3:de:17:02:13:b7:c4:ef:7c:44:a7:20:f9:
Ê db:f2:a4:b6:91:ed:59:63:01:f3:c7:c7:8e:e9:00:
Ê 96:d3:ff:c1:27:b1:4d:39:91:8c:40:00:46:a9:ad:
Ê a8:b9:91:46:78:64:bb:7f:bb:4b:62:f4:12:d6:bd:
Ê 6b:da:9b:e1:35:c3:b0:39:f6:17:8c:f1:38:c9:40:
Ê 64:8d:59:b5:be:2c:50:65:dd:5e:31:7a:35:ac:00:
Ê 49:f9
Ê Exponent: 65537 (0x10001)
Ê X509v3 extensions:
Ê X509v3 Subject Key Identifier:
Ê D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Basic Constraints:
Ê CA:TRUE
Ê Signature Algorithm: sha256WithRSAEncryption
Ê 3e:85:bd:87:4a:14:63:e2:9a:a0:a1:93:52:cb:18:21:61:64:
Ê d6:ee:c6:d4:f6:41:38:e9:2c:dc:3c:88:d8:d6:70:df:b3:d3:
Ê 86:5d:8b:13:b8:43:20:9f:80:63:21:cc:90:75:aa:ef:ad:b9:
Ê 00:45:62:0e:68:06:7a:2b:08:cf:e7:2f:e3:4a:de:fd:49:c5:
Ê 8d:0e:3d:cf:ad:46:76:96:23:a2:50:55:07:b7:8f:de:34:09:
Ê 34:ff:00:40:a0:4d:6e:ac:3d:86:96:70:76:60:ab:ea:68:a7:
Ê 5b:ec:1b:67:d8:49:5f:c0:e6:c6:7a:65:e0:a0:63:7c:72:84:
Ê e3:1d:03:45:53:bf:1a:1e:1e:2c:1c:a0:9a:96:99:94:ac:d5:
Ê 4f:96:43:72:71:83:50:e1:d9:a6:77:7d:34:42:86:3e:81:21:
Ê 24:a8:7e:d5:00:30:7c:c4:47:65:af:9e:4e:fb:da:fb:d4:ae:
Ê 47:5c:5e:f2:0d:32:00:ed:64:dc:9b:ae:94:39:aa:20:5a:03:
Ê 0c:72:e9:94:66:8e:ff:db:0a:64:d3:94:7d:47:78:e2:a6:30:
Ê 67:ac:e6:c4:91:be:d4:ca:90:b7:3a:69:66:00:55:1c:bb:0a:
Ê 11:52:5c:8f:50:2c:11:35:5c:e9:44:97:9d:00:ad:26:48:e9:
Ê 9d:12:7e:da
Генерируем ключ KDC (Key Distribution Center)
14
user@p10-srv ~ $ openssl genrsa -out demoCA/private/dc-key.pem 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
...................+++++
........+++++
e is 65537 (0x010001)
Создаём запрос на выдачу сертификата для KDC
user@p10-srv ~ $ openssl req -new -out demoCA/dc-req.csr \
Ê -key demoCA/private/dc-key.pem \
Ê -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=p10-srv.test5.alt"
Создаём файл расширений (extensions) сертификата для KDC
user@p10-srv ~ $ cat demoCA/cert_extension_KDC
[kdc_cert]
basicConstraints=CA:FALSE
keyUsage=nonRepudiation,digitalSignature,keyEncipherment,keyAgreement
extendedKeyUsage=1.3.6.1.5.2.3.5
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
issuerAltName=issuer:copy
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name
[kdc_princ_name]
realm=EXP:0,GeneralString:${ENV::REALM}
principal_name=EXP:1,SEQUENCE:kdc_principal_seq
[kdc_principal_seq]
name_type=EXP:0,INTEGER:1
name_string=EXP:1,SEQUENCE:kdc_principals
[kdc_principals]
princ1=GeneralString:krbtgt
princ2=GeneralString:${ENV::REALM}
По умолчанию Kerberos PKINIT ожидает, что сертификат KDC содержит EKU
(extendedKeyUsage) id-pkinit-KPKdc (OID 1.3.6.1.5.2.3.5), как определено в RFC4556, и имеет имя
хоста KDC в id-pkinit-san (OID 1.3.6.1.5.2.2), как определено в RFC4556.
extendedKeyUsage = 1.3.6.1.5.2.3.5указывает что сертификат выпускается для KDC (id-
pkinit-KPKdc, https://oidref.com/1.3.6.1.5.2.3.5)
subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_nameздесь указываем Kerberos
principalname (id-pkinit-san, https://oidref.com/1.3.6.1.5.2.2).
Kerberos principalname формируется сложным образом — kdc_principals + kdc_principal_seq +
kdc_princ_name.
15
Выпускаем сертификат для KDC
user@p10-srv ~ $ env REALM=TEST5.ALT openssl ca -batch -in demoCA/dc-req.csr \
Ê -out demoCA/certs/dc-cert.pem -cert demoCA/certs/cacert.pem \
Ê -extfile demoCA/cert_extension_KDC -extensions kdc_cert
Using configuration from /var/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Ê Serial Number: 1 (0x1)
Ê Validity
Ê Not Before: May 20 09:03:33 2022 GMT
Ê Not After : May 20 09:03:33 2023 GMT
Ê Subject:
Ê countryName = RU
Ê stateOrProvinceName = Moscow
Ê organizationName = TEST5.ALT
Ê commonName = p10-srv.test5.alt
Ê X509v3 extensions:
Ê X509v3 Basic Constraints:
Ê CA:FALSE
Ê X509v3 Key Usage:
Ê Digital Signature, Non Repudiation, Key Encipherment, Key Agreement
Ê X509v3 Extended Key Usage:
Ê Signing KDC Response
Ê X509v3 Subject Key Identifier:
Ê 7C:1D:47:D1:98:FB:C4:45:01:3C:7B:BA:2F:36:D8:33:C0:B7:03:8E
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Issuer Alternative Name:
Ê <EMPTY>
Ê X509v3 Subject Alternative Name:
Ê othername:<unsupported>
Certificate is to be certified until May 20 09:03:33 2023 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
3.2. Выпускаем сертификаты для пользователей
Перед выпуском сертификатов необходимо сгенерировать ключевую пару на токене. Перед
генерирацией необходимо определить механизмы шифрования поддерживаемые
конкретным токеном. Просмотреть механизмы можно при помощи утилиты pkcs11-tool.
Пример для JaCarta-2 SE. Просматривать будем слот JaCarta Laser, в котором поддерживается
протокол RSA.
16
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --list-mechanisms --token-label jacarta-slot-laser
Supported mechanisms:
Ê RSA-PKCS-KEY-PAIR-GEN, keySize={1024,2048}, hw, generate_key_pair
Ê RSA-PKCS, keySize={1024,2048}, hw, encrypt, decrypt, sign, verify, wrap, unwrap
Ê SHA1-RSA-PKCS, keySize={1024,2048}, sign, verify
Ê RSA-PKCS-OAEP, keySize={1024,2048}, hw, encrypt, decrypt, wrap, unwrap
Ê SHA256-RSA-PKCS, keySize={1024,2048}, sign, verify
Ê SHA384-RSA-PKCS, keySize={1024,2048}, sign, verify
Ê SHA512-RSA-PKCS, keySize={1024,2048}, sign, verify
Ê DES2-KEY-GEN, keySize={128,128}, generate
Ê DES3-KEY-GEN, keySize={192,192}, generate
Ê DES3-ECB, keySize={24,24}, encrypt, decrypt
Ê DES3-CBC, keySize={24,24}, encrypt, decrypt
Ê DES3-MAC, keySize={24,24}, sign, verify
Ê DES3-MAC-GENERAL, keySize={24,24}, sign, verify
Ê MD5, digest
Ê MD5-HMAC, sign, verify
Ê SHA-1, digest
Ê SHA-1-HMAC, sign, verify
Ê SHA256, digest
Ê SHA256-HMAC, sign, verify
Ê SHA224, digest
Ê SHA384, digest
Ê SHA384-HMAC, sign, verify
Ê SHA512, digest
Ê SHA512-HMAC, sign, verify
Ê TLS-PRE-MASTER-KEY-GEN, hw, generate
Ê TLS-MASTER-KEY-DERIVE, hw, derive
Ê TLS-KEY-AND-MAC-DERIVE, hw, derive
Ê TLS-MASTER-KEY-DERIVE-DH, hw, derive
Ê mechtype-0x378, hw, derive
Ê mechtype-0x500, hw, sign
Ê AES-KEY-GEN, keySize={16,32}, generate
Ê AES-ECB, keySize={16,32}, encrypt, decrypt
Ê AES-CBC, keySize={16,32}, encrypt, decrypt
Ê AES-MAC, keySize={16,32}, sign, verify
Ê AES-MAC-GENERAL, keySize={16,32}, sign, verify
Слот jacarta-slot-laser на JaCarta-2 SE поддерживает генерацию ключевой пары длиной
1024 и 2048 бит (RSA-PKCS-KEY-PAIR-GEN).
3.2.1. Генерируем ключевую пару на токенах
Рутокен ECP
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --pin 12345678 --login --keypairgen --key-type rsa:1024 --id 7011 \
Ê --label rt_2fa_smb --token-label RutokenECP2151
17
Key pair generated:
Private Key Object; RSA
Ê label: rt_2fa_smb
Ê ID: 7011
Ê Usage: decrypt, sign, unwrap
Ê Access: sensitive, always sensitive, never extractable, local
Public Key Object; RSA 1024 bits
Ê label: rt_2fa_smb
Ê ID: 7011
Ê Usage: encrypt, verify, wrap
Ê Access: local
ESMART Token
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --pin 12345678 --login --keypairgen --key-type rsa:2048 --id 7012 \
Ê --label es_2fa_smb --token-label esmart_64
Key pair generated:
Private Key Object; RSA
Ê label: es_2fa_smb
Ê ID: 7012
Ê Usage: decrypt, sign, unwrap
Ê Access: sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
Ê label: es_2fa_smb
Ê ID: 7012
Ê Usage: encrypt, verify, wrap
Ê Access: local
JaCarta-2 SE
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --pin 11111111 --login --keypairgen --key-type rsa:2048 --id 7013 \
Ê --label jc_2fa_smb --token-label jacarta-slot-laser
Key pair generated:
Private Key Object; RSA
Ê label: jc_2fa_smb
Ê ID: 7013
Ê Usage: decrypt, sign, unwrap
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv =
CKR_ATTRIBUTE_TYPE_INVALID (0x12)
Ê Access: sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
Ê label: jc_2fa_smb
Ê ID: 7013
Ê Usage: encrypt, verify, wrap
Ê Access: local
18
Утилита pkcs11-tool при работе с токенами JaCarta иногда выдаёт предупреждение "warning:
PKCS11 function …". Данное предупреждение ошибкой не является и на работоспособность
не влияет.
3.2.2. Генерируем запрос на сертификат
Для выпуска сертификата пользователя openssl должен «попросить» токен подписать
запрос на выпуск сертификата при помощи приватного ключа, который находится на
токене, и доступа к которому ни у кого нет, кроме самого токена. НоÊopensslÊне умеет
напрямую обращаться к токенам по протоколу PKCS#11. ЧтобыÊopensslÊcмог передать токену
«просьбу» о подписании запроса на сертификат, необходимо использовать так называемый
«engine».
EngineÊ— это некий механизм, своего рода прокси, который позволяет opensslÊпереложить
криптофункции на «чужие плечи». В данном случае на стороннюю библиотеку PKCS#11. А
уже она, в свою очередь, умея общаться с токеном, сможет донести «просьбу» о подписании
запроса на сертификат.
Если в системе установлены пакетыÊlibp11ÊиÊlibp11-kit (ранее были установлены), тоÊopenssl
engineÊработает без дополнительной конфигурации.
Проверим доступность openssl engine:
user@p10-srv ~ $ openssl engine pkcs11 -t
(pkcs11) pkcs11 engine
Ê [ available ]
Доступные протоколы шифрования:
user@p10-srv ~ $ openssl engine pkcs11 -c
(pkcs11) pkcs11 engine
Ê[RSA, rsaEncryption, id-ecPublicKey]
Далее создаём запросы на выпуск сертификатов.
Рутокен ECP
user@p10-srv ~ $ openssl req -new -out demoCA/rt_smb.csr -keyform engine \
Ê -engine pkcs11 -key "pkcs11:token=RutokenECP2151;object=rt_2fa_smb" \
Ê -passin pass:12345678 -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=rt_smb"
engine "pkcs11" set.
ESMART Token
user@p10-srv ~ $ openssl req -new -out demoCA/es_smb.csr -keyform engine \
Ê -engine pkcs11 -key "pkcs11:token=esmart_64;object=es_2fa_smb" \
19
Ê -passin pass:12345678 -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=es_smb"
engine "pkcs11" set.
JaCarta-2 SE
user@p10-srv ~ $ openssl req -new -out demoCA/jc_smb.csr -keyform engine \
Ê -engine pkcs11 -key "pkcs11:token=jacarta-slot-laser;object=jc_2fa_smb" \
Ê -passin pass:11111111 -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=jc_smb"
engine "pkcs11" set.
Здесь, для openssl engine, определяем с каким именно слотом нужно работать при
помощиÊpkcs11:<URL>, в котором указываем метку слота и идентификатор объекта.
3.2.3. Выпускаем сертификаты
Создаём файл расширений для выпуска сертификатов пользователей следующего
содержания:
user@p10-srv ~ $ cat demoCA/cert_extension_user
[ kdc_user ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = otherName:1.3.6.1.4.1.311.20.2.3;UTF8:${ENV::NAME}@${ENV::REALM}
issuerAltName = issuer:copy
extendedKeyUsage = clientAuth,1.3.6.1.4.1.311.20.2.2
authorityInfoAccess = OCSP;URI:http://p10-srv.test5.alt
subjectAltName=otherName:1.3.6.1.4.1.311.20.2.3;UTF8:${ENV::NAME}@${ENV::REALM} - указываем,
что здесь содержится User Principal Name (UPN) — OID 1.3.6.1.4.1.311.20.2.3 (https://oidref.com/
1.3.6.1.4.1.311.20.2.3).
Наличие такогоÊotherNameÊнеобходимо, если мы используем сертификат для
аутентификации по токену. Данное поле вÊsubjectAltName, в котором содержится UPN, будет
использоваться службой sssd на ПК клиента для сопоставления с доменной учетной
записью (mapping).
extendedKeyUsage = clientAuth,1.3.6.1.4.1.311.20.2.2расширенный ключ, в котором
указано:
clientAuthсертификат для аутентификации клиента (https://oidref.com/1.3.6.1.5.2.3.5)
1.3.6.1.4.1.311.20.2.2может использоваться на токене (https://oidref.com/
1.3.6.1.4.1.311.20.2.2)
${ENV::NAME}переменная, в которую будем передавать имя пользователя сертификата.
${ENV::REALM}переменная, в которую будем передавать имя домена.
20
Выпускаем сертификаты
Рутокен ECP
user@p10-srv ~ $ env REALM=TEST5.ALT NAME=rt_smb openssl ca -batch \
Ê -in demoCA/rt_smb.csr -out demoCA/certs/rt_smb.pem -cert demoCA/certs/cacert.pem \
Ê -extfile demoCA/cert_extension_user -extensions kdc_user
Using configuration from /var/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Ê Serial Number: 2 (0x2)
Ê Validity
Ê Not Before: May 20 12:26:03 2022 GMT
Ê Not After : May 20 12:26:03 2023 GMT
Ê Subject:
Ê countryName = RU
Ê stateOrProvinceName = Moscow
Ê organizationName = TEST5.ALT
Ê commonName = rt_smb
Ê X509v3 extensions:
Ê X509v3 Basic Constraints:
Ê CA:FALSE
Ê X509v3 Key Usage:
Ê Digital Signature, Non Repudiation, Key Encipherment
Ê X509v3 Subject Key Identifier:
Ê 09:F4:3C:BB:5B:6D:9D:52:9E:2A:FD:06:A2:07:58:C3:62:89:7B:A0
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Subject Alternative Name:
Ê othername:<unsupported>
Ê X509v3 Issuer Alternative Name:
Ê <EMPTY>
Ê X509v3 Extended Key Usage:
Ê TLS Web Client Authentication, Microsoft Smartcard Login
Ê Authority Information Access:
Ê OCSP - URI:http://p10-srv.test5.alt
Certificate is to be certified until May 20 12:26:03 2023 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
ESMART Token
user@p10-srv ~ $ env REALM=TEST5.ALT NAME=es_smb openssl ca -batch \
Ê -in demoCA/es_smb.csr -out demoCA/certs/es_smb.pem -cert demoCA/certs/cacert.pem \
21
Ê -extfile demoCA/cert_extension_user -extensions kdc_user
Using configuration from /var/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Ê Serial Number: 3 (0x3)
Ê Validity
Ê Not Before: May 20 12:27:54 2022 GMT
Ê Not After : May 20 12:27:54 2023 GMT
Ê Subject:
Ê countryName = RU
Ê stateOrProvinceName = Moscow
Ê organizationName = TEST5.ALT
Ê commonName = es_smb
Ê X509v3 extensions:
Ê X509v3 Basic Constraints:
Ê CA:FALSE
Ê X509v3 Key Usage:
Ê Digital Signature, Non Repudiation, Key Encipherment
Ê X509v3 Subject Key Identifier:
Ê B8:07:D5:B5:00:18:A1:A9:BB:5D:C0:68:5C:61:18:CF:9A:99:C7:8B
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Subject Alternative Name:
Ê othername:<unsupported>
Ê X509v3 Issuer Alternative Name:
Ê <EMPTY>
Ê X509v3 Extended Key Usage:
Ê TLS Web Client Authentication, Microsoft Smartcard Login
Ê Authority Information Access:
Ê OCSP - URI:http://p10-srv.test5.alt
Certificate is to be certified until May 20 12:27:54 2023 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
JaCarta-2 SE
user@p10-srv ~ $ env REALM=TEST5.ALT NAME=jc_smb openssl ca -batch \
Ê -in demoCA/jc_smb.csr -out demoCA/certs/jc_smb.pem -cert demoCA/certs/cacert.pem \
Ê -extfile demoCA/cert_extension_user -extensions kdc_user
Using configuration from /var/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Ê Serial Number: 4 (0x4)
Ê Validity
22
Ê Not Before: May 20 12:29:03 2022 GMT
Ê Not After : May 20 12:29:03 2023 GMT
Ê Subject:
Ê countryName = RU
Ê stateOrProvinceName = Moscow
Ê organizationName = TEST5.ALT
Ê commonName = jc_smb
Ê X509v3 extensions:
Ê X509v3 Basic Constraints:
Ê CA:FALSE
Ê X509v3 Key Usage:
Ê Digital Signature, Non Repudiation, Key Encipherment
Ê X509v3 Subject Key Identifier:
Ê C7:CA:72:83:A5:F2:A1:8B:74:73:CC:07:43:54:85:02:BA:2B:42:8D
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Subject Alternative Name:
Ê othername:<unsupported>
Ê X509v3 Issuer Alternative Name:
Ê <EMPTY>
Ê X509v3 Extended Key Usage:
Ê TLS Web Client Authentication, Microsoft Smartcard Login
Ê Authority Information Access:
Ê OCSP - URI:http://p10-srv.test5.alt
Certificate is to be certified until May 20 12:29:03 2023 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
3.2.4. Записываем сертификаты на токены
Рутокен ECP
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --pin 12345678 --login --write-object ./demoCA/certs/rt_smb.pem --type cert \
Ê --id 7011 --label rt_2fa_smb --token-label RutokenECP2151
Created certificate:
Certificate Object; type = X.509 cert
Ê label: rt_2fa_smb
Ê subject: DN: C=RU, ST=Moscow, O=TEST5.ALT, CN=rt_smb
Ê ID: 7011
ESMART Token
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
23
Ê --pin 12345678 --login --write-object ./demoCA/certs/es_smb.pem --type cert \
Ê --id 7012 --label es_2fa_smb --token-label esmart_64
Created certificate:
Certificate Object; type = X.509 cert
Ê label: es_2fa_smb
Ê subject: DN: C=RU, ST=Moscow, O=TEST5.ALT, CN=es_smb
Ê ID: 7012
JaCarta-2 SE
user@p10-srv ~ $ pkcs11-tool --module /usr/lib64/p11-kit-proxy.so \
Ê --pin 11111111 --login --write-object ./demoCA/certs/jc_smb.pem --type cert \
Ê --id 7013 --label jc_2fa_smb --token-label jacarta-slot-laser
Created certificate:
Certificate Object; type = X.509 cert
Ê label: jc_2fa_smb
Ê subject: DN: C=RU, ST=Moscow, O=TEST5.ALT, CN=jc_smb
Ê ID: 7013
3.3. Выпускаем сертификат для службы OCSP
Создаём файл расширений (extensions) сертификата для OCSP
user@p10-srv ~ $ cat demoCA/cert_extension_ocsp
[ ocsp ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, digitalSignature
extendedKeyUsage = critical, OCSPSigning
OCSPSigningуказываем, что приватный ключ данного сертификата может использоваться
для подписи ответов OCSP (https://oidref.com/1.3.6.1.5.5.7.3.9).
Генерируем ключ службы OCSP
user@p10-srv ~ $ openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 \
Ê -outform PEM -out demoCA/private/ocsp-key.pem
......................................+++++
...................................+++++
Запрос на сертификат для службы OCSP
user@p10-srv ~ $ openssl req -new -out demoCA/ocsp-req.csr \
Ê -key demoCA/private/ocsp-key.pem \
24
Ê -subj "/C=RU/ST=Moscow/O=TEST5.ALT/CN=ocsp.test5.alt"
Выпускаем сертификат для службы OCSP
user@p10-srv ~ $ env REALM=TEST5.ALT openssl ca -batch -in demoCA/ocsp-req.csr \
Ê -out demoCA/certs/ocsp-cert.pem -cert demoCA/certs/cacert.pem \
Ê -extfile demoCA/cert_extension_ocsp -extensions ocsp
Using configuration from /var/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Ê Serial Number: 5 (0x5)
Ê Validity
Ê Not Before: May 20 12:58:56 2022 GMT
Ê Not After : May 20 12:58:56 2023 GMT
Ê Subject:
Ê countryName = RU
Ê stateOrProvinceName = Moscow
Ê organizationName = TEST5.ALT
Ê commonName = ocsp.test5.alt
Ê X509v3 extensions:
Ê X509v3 Basic Constraints:
Ê CA:FALSE
Ê X509v3 Subject Key Identifier:
Ê 4D:E0:C2:A2:8C:DD:AF:95:CB:23:EB:63:5B:2E:C7:88:E9:D6:A6:77
Ê X509v3 Authority Key Identifier:
Ê keyid:D4:96:86:C7:8F:5F:9E:2A:BA:9A:DC:22:97:67:B2:BC:C7:26:B2:98
Ê X509v3 Key Usage: critical
Ê Digital Signature
Ê X509v3 Extended Key Usage: critical
Ê OCSP Signing
Certificate is to be certified until May 20 12:58:56 2023 GMT (365 days)
Write out database with 1 new entries
Data Base Updated
3.4. Настройка TLS службы Samba DC
Копируем закрытый ключ KDC, а также сертификаты KDC и УЦ в папку
/var/lib/samba/private/tls
p10-srv ~ # cp -v /home/user/demoCA/certs/{cacert.pem,dc-cert.pem} \
Ê /var/lib/samba/private/tls/
'/home/user/demoCA/certs/cacert.pem' -> '/var/lib/samba/private/tls/cacert.pem'
'/home/user/demoCA/certs/dc-cert.pem' -> '/var/lib/samba/private/tls/dc-cert.pem'
p10-srv ~ # cp -v /home/user/demoCA/private/dc-key.pem \
Ê /var/lib/samba/private/tls/
25
'/home/user/demoCA/private/dc-key.pem' -> '/var/lib/samba/private/tls/dc-key.pem'
Доступ к ключу KDC делаем только для root
p10-srv ~ # chmod 600 /var/lib/samba/private/tls/dc-key.pem
Добавляем следующие опции для TLS в секцию [global] в конфигурационный файл Samba:
Ê tls enabled = yes
Ê tls certfile = /var/lib/samba/private/tls/dc-cert.pem
Ê tls keyfile = /var/lib/samba/private/tls/dc-key.pem
Ê tls cafile = /var/lib/samba/private/tls/cacert.pem
p10-srv ~ # cat /etc/samba/smb.conf | grep -ivE '(^#|^$)'
[global]
Ê dns forwarder = 10.33.33.1
Ê netbios name = P10-SRV
Ê realm = TEST5.ALT
Ê server role = active directory domain controller
Ê workgroup = TEST5
Ê tls enabled = yes
Ê tls certfile = /var/lib/samba/private/tls/dc-cert.pem
Ê tls keyfile = /var/lib/samba/private/tls/dc-key.pem
Ê tls cafile = /var/lib/samba/private/tls/cacert.pem
[sysvol]
Ê path = /var/lib/samba/sysvol
Ê read only = No
[netlogon]
Ê path = /var/lib/samba/sysvol/test5.alt/scripts
Ê read only = No
3.5. Настраиваем Kerberos PKINIT на DC
Добавляем секцию [kdc] со следующим содержимым в /etc/krb5.conf:
[kdc]
enable-pkinit = yes
pkinit_identity = FILE:/var/lib/samba/private/tls/dc-
cert.pem,/var/lib/samba/private/tls/dc-key.pem
pkinit_anchors = FILE:/var/lib/samba/private/tls/cacert.pem
pkinit_principal_in_certificate = yes
pkinit_win2k_require_binding = yes
В итоге конфигурационный файл керберос на Samba DC выглядит следующим образом:
26
p10-srv ~ # cat /etc/krb5.conf | grep -ivE '(^#|^$)'
[libdefaults]
Ê default_realm = TEST5.ALT
Ê dns_lookup_realm = false
Ê dns_lookup_kdc = true
[realms]
TEST5.ALT = {
Ê default_domain = test5.alt
}
[domain_realm]
Ê p10-srv = TEST5.ALT
[kdc]
enable-pkinit = yes
pkinit_identity = FILE:/var/lib/samba/private/tls/dc-
cert.pem,/var/lib/samba/private/tls/dc-key.pem
pkinit_anchors = FILE:/var/lib/samba/private/tls/cacert.pem
pkinit_principal_in_certificate = yes
pkinit_win2k_require_binding = yes
Перезапускаем службу samba:
# systemctl restart samba.service
3.6. Создаём доменных пользователей
p10-srv ~ # samba-tool user create rt_smb 'Pa$$word' --given-name=rutoken
User 'rt_smb' added successfully
p10-srv ~ # samba-tool user create es_smb 'Pa$$word' --given-name=esmart
User 'es_smb' added successfully
p10-srv ~ # samba-tool user create jc_smb 'Pa$$word' --given-name=jacarta
User 'jc_smb' added successfully
27
# 4. Настраиваем PKINIT на клиенте
4.1. Настройка и проверка Kerberos
Копируем сертификат УЦ на ПК доменного пользователя, в папку /etc/pki/tls/certs.
work ~ # scp user@p10-srv.test5.alt:/home/user/demoCA/certs/cacert.pem \
Ê /etc/pki/tls/certs/
Укажем в конфигурационном файле Kerberos путь к сертификату УЦ и установим фильтр,
чтобы использовать сертификаты выданные для домена test5.alt. Для этого добавим в
секцию [realms] следующее содержимое:
TEST5.ALT = {
Ê pkinit_anchors = FILE:/etc/pki/tls/certs/cacert.pem
Ê pkinit_cert_match = <ISSUER>.TEST5.ALT.
}
Итого получается следующий конфигурационный файл Kerberos:
work ~ # cat /etc/krb5.conf | grep -viE '(^#|^$)'
includedir /etc/krb5.conf.d/
[logging]
[libdefaults]
default_realm = TEST5.ALT
Êdns_lookup_kdc = true
Êdns_lookup_realm = false
Êticket_lifetime = 24h
Êrenew_lifetime = 7d
Êforwardable = true
Êrdns = false
Êdefault_ccache_name = KEYRING:persistent:%{uid}
[realms]
TEST5.ALT = {
Ê pkinit_anchors = FILE:/etc/pki/tls/certs/cacert.pem
Ê pkinit_cert_match = <ISSUER>.*TEST5.ALT.*
}
[domain_realm]
Далее проверяем получение билета Kerberos.
4.1.1. Рутокен ECP
user@work ~ $ kinit -X X509_user_identity=PKCS11:librtpkcs11ecp.so rt_smb
RutokenECP2151 PIN:
28
Warning: Your password will expire in 41 days on Пт 01 июл 2022 16:19:38
user@work ~ $ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: rt_smb@TEST5.ALT
Valid starting Expires Service principal
20.05.2022 16:56:43 21.05.2022 02:56:43 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 16:56:34
4.1.2. ESMART Token
user@work ~ $ kinit -X X509_user_identity=PKCS11:libisbc_pkcs11_main.so es_smb
esmart_64 PIN:
Warning: Your password will expire in 41 days on Пт 01 июл 2022 16:20:16
user@work ~ $ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: es_smb@TEST5.ALT
Valid starting Expires Service principal
20.05.2022 17:00:33 21.05.2022 03:00:33 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 17:00:24
4.1.3. JaCarta-2 SE
Здесь необходимо дополнительно указать метку слота, так как токен мультислотовый.
user@work ~ $ kinit \
Ê -X X509_user_identity='PKCS11:libjcPKCS11-2.so:token=jacarta-slot-laser' jc_smb
jacarta-slot-laser PIN:
Warning: Your password will expire in 41 days on Пт 01 июл 2022 16:21:02
user@work ~ $ klist
Ticket cache: KEYRING:persistent:500:500
Default principal: jc_smb@TEST5.ALT
Valid starting Expires Service principal
20.05.2022 17:05:53 21.05.2022 03:05:53 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 17:05:31
4.1.4. Отладка Kerberos
Если при проверке Kerberos возникают ошибки, то для более полной информации по
процессу PKINIT добавьте опцию вывода отладочной информации в консоль -
KRB5_TRACE=/dev/stdout. Команда получения билета Kerberos с отладкой:
user@work ~ $ KRB5_TRACE=/dev/stdout \
Ê kinit -X X509_user_identity='PKCS11:libjcPKCS11-2.so:token=jacarta-slot-laser'
29
jc_smb
4.2. Настройка sssd
После ввода ПК клиента в домен Samba DC за аутентификацию отвечает служба sssd.
УтилитаÊp11_child, входящая в состав пакета sssd, обеспечивает доступ к сертификату на
токене.
4.2.1. p11_child. Проверка работы sssd c токенами
Перед проверкой работы необходимо запустить OCSP Responder на Samba DC. В качестве
OCSP ответчика будем использовать openssl (не подходит для использования на
производстве в силу ограниченного функционала):
Убедитесь, что порт 80 на сервере не занят!
p10-srv user # cd /home/user; openssl ocsp -index demoCA/index.txt -port 80 \
Ê -rsigner demoCA/certs/ocsp-cert.pem -rkey demoCA/private/ocsp-key.pem \
Ê -CA demoCA/certs/cacert.pem
ocsp: waiting for OCSP client connections...
Убедимся, что служба sssd видит сертификат на токене.
Рутокен ECP
user@work ~ $ /usr/libexec/sssd/p11_child \
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre
RutokenECP2151
/usr/lib64/pkcs11/librtpkcs11ecp.so
7011
rt_2fa_smb
MIIDaTCCAlGgAwIBAgIBAjANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJSVTEPMA0GA1UECAwGTW9zY293MR
IwEAYDVQQKDAlURVNUNS5BTFQxCzAJBgNVBAMMAkNBMB4XDTIyMDUyMDEyMjYwM1oXDTIzMDUyMDEyMjYwM1ow
QzELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzESMBAGA1UECgwJVEVTVDUuQUxUMQ8wDQYDVQQDDAZydF
9zbWIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJJgHV5M6AijIT4xqKwpxf8LudURsHPa/td4pYPXK1+m
eYINXIqUiKO15Dw4upQWwzHy8FBgxhjy4vNx0e/2UcLinkPHCTw0RiJqOPKVugRPV5kubN60yvuFONvIlaavng
waDKMqSvcdco9jMdh02kqr5ucbuXE80KI1gMYoaevrAgMBAAGjge8wgewwCQYDVR0TBAIwADALBgNVHQ8EBAMC
BeAwHQYDVR0OBBYEFAn0PLtbbZ1Snir9BqIHWMNiiXugMB8GA1UdIwQYMBaAFNSWhsePX54quprcIpdnsrzHJr
KYMCsGA1UdEQQkMCKgIAYKKwYBBAGCNxQCA6ASDBBydF9zbWJAVEVTVDUuQUxUMAkGA1UdEgQCMAAwHwYDVR0l
BBgwFgYIKwYBBQUHAwIGCisGAQQBgjcUAgIwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi8vc3
A4LXNydi0yMDIyLnRlc3Q1LmFsdDANBgkqhkiG9w0BAQsFAAOCAQEACy/DUjuVW/uuPNarw1s/K1oIdYrgqijS
2pdMFEVOusBVIXp7I4+hAIII0DFFCgGp163nKoVh0n+vJ+ckA0+/hBXPlo2SQt1Gpd8bEsx7RVGBOz4JMb/QQ+
UMYWMrS63k61GSh6d8PoDCvA868EHS/a5ycmzClUk/GgLY/OEBVI2p95Jl9X0O5q5LYafGKgiWmGlHSAXdMwNJ
t0pRdihPiwDyS6tkIjNF+nIwuTCg1xWWVuClh+1sylbCl85jVCKX7/GCqc/MgXJFus3Zhb2b5hyvvaZw2UnvVO
Zw3U0BHaAwvmQyK3baZyLlJM1wzvfQF7SOiVKVIj/8cL2c5RuQqw==
30
RutokenECP2151метка (label) токена
/usr/lib64/pkcs11/librtpkcs11ecp.soбиблиотеку, которая подходит для данного токена
7011идентификатор (id) сертификата
rt_2fa_smbметка (label) сертификата
MIIDaTCCA…JghMdbcotA==сертификат
ESMART Token
user@work ~ $ /usr/libexec/sssd/p11_child \
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre
esmart_64
/usr/lib64/pkcs11/libisbc_pkcs11_main.so
7012
es_2fa_smb
MIID7DCCAtSgAwIBAgIBAzANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJSVTEPMA0GA1UECAwGTW9zY293MR
IwEAYDVQQKDAlURVNUNS5BTFQxCzAJBgNVBAMMAkNBMB4XDTIyMDUyMDEyMjc1NFoXDTIzMDUyMDEyMjc1NFow
QzELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzESMBAGA1UECgwJVEVTVDUuQUxUMQ8wDQYDVQQDDAZlc1
9zbWIwggEhMA0GCSqGSIb3DQEBAQUAA4IBDgAwggEJAoIBAHOu4SiTPSq4Vg5HgEAw0bX5J7gTlbWbeCUmQa3v
VBvKUbZcYckhHFfnrPHvdCgJ9Vvq5Gvh0EwDmQrBwKsA1cdiF8pCBhrB91jn+SC4ojb2d2po+1YdYIFTOeTUUt
Go57F4qfd7ikCy4c9/icGmBkCRBfhGv+B2o9QfDoWKJ5Iw7gN+GIFKW8KbdXyYJ1XkUUUJpnrrdX8qGHP9AVyz
OyR9WhE0Lqb+woWvZ2kL7fUAxdV8VlX6H9OS9jKAvUcOGVs3o0U1Ns0RNAgb/4ZOGZN6xfxzOoWT6xWVrdVJ+U
aU5K2wYRO1P4V7f/0nFxkbTVj7IxxMGX1k4nEy5nFnKk8CAwEAAaOB7zCB7DAJBgNVHRMEAjAAMAsGA1UdDwQE
AwIF4DAdBgNVHQ4EFgQUuAfVtQAYoam7XcBoXGEYz5qZx4swHwYDVR0jBBgwFoAU1JaGx49fniq6mtwil2eyvM
cmspgwKwYDVR0RBCQwIqAgBgorBgEEAYI3FAIDoBIMEGVzX3NtYkBURVNUNS5BTFQwCQYDVR0SBAIwADAfBgNV
HSUEGDAWBggrBgEFBQcDAgYKKwYBBAGCNxQCAjA5BggrBgEFBQcBAQQtMCswKQYIKwYBBQUHMAGGHWh0dHA6Ly
9zcDgtc3J2LTIwMjIudGVzdDUuYWx0MA0GCSqGSIb3DQEBCwUAA4IBAQASdhVVz0uZZb5UXkyMyht3rht2GayS
0V0xrCNsOS2S8h8gd1hvJMsX/iDqPNNKoTjXrljZWggbfVrRJk/2waFvVRlbplKoIKqwO252LT7UhxWwCdorTH
P9STwaBnbJTdQ4LA+1sIH8DmZ0aHK0fk+bMDTMSdEZLBoIvZfps1BzUUVkNuypvmMuT/TefRoPWQOIlHEVpgLc
DEYNq3yCPI05nb0jLPX6sLwpWOnv2SeqWStEN5t9xjraMa8mEU4WoxYgpsyJeX/Ue6SZ8rrAWcst1bsNbFDAON
8N9x70b6orOHPCk+mUlqmFBdRdgwT/+fuqw6dS0z1kqdei0x84tk9x
JaCarta-2 SE
Для проверки работы службы sssd c токеном JaCarta-2 SE необходимо дополнительно
указать слот. Сделать это можно при помощи схемы pkcs11:<URI>, которая поддерживается в
sssd. С полным перечнем параметров pkcs11:<URI> можно ознакомиться в RFC7512
(https://datatracker.ietf.org/doc/html/rfc7512#section-2.1).
Создадим символическую ссылку в каталогеÊ/usr/lib64/pkcs11/Êна библиотекуÊlibjckt2.so
(чтобы не было ошибок с первым слотом JaCarta GOST 2.0; исправлено с версии 2.7.4-alt6
пакетаÊlibjcpkcs11):
work ~ # cd /usr/lib64/pkcs11/
work pkcs11 # ln -s ../libjckt2.so .
user@work ~ $ /usr/libexec/sssd/p11_child \
31
Ê --ca_db=/etc/pki/tls/certs/cacert.pem --pre --uri=pkcs11:token=jacarta-slot-laser
jacarta-slot-laser
/usr/lib64/pkcs11/libjcPKCS11-2.so
7013
jc_2fa_smb
MIID7TCCAtWgAwIBAgIBBDANBgkqhkiG9w0BAQsFADA/MQswCQYDVQQGEwJSVTEPMA0GA1UECAwGTW9zY293MR
IwEAYDVQQKDAlURVNUNS5BTFQxCzAJBgNVBAMMAkNBMB4XDTIyMDUyMDEyMjkwM1oXDTIzMDUyMDEyMjkwM1ow
QzELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzESMBAGA1UECgwJVEVTVDUuQUxUMQ8wDQYDVQQDDAZqY1
9zbWIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCblR31v8zaNoJG5E4ipDQzztD2Bb7OEbFLMCm9
vOP2cjjnxzOTunybrbfc1WuMBYvvnpdpcZmiCRc92oQHi+aEcjVjIHavojMVdIcWy6U23uH2YhRsFoe+UqzrUd
FzOb6kcyP/UdRm5UuD9d0cOxlIPBC+YkIaVXV0Y+OKkBnxhzDN+7afQt9ueNH/9TVjovwn42+4CB+3/BGTs3Pq
+6M1IllwqgF81XkCwRSJxf4sKRgCBM5xfCYBNxjVLUcSZJGYnNP+hxNGx0RMgijYZBcepJSPIJS2jOYmqkS8tI
fWDYNWgo87znNnq8qVxP9HmUU6c3jI2cYrI9jtWEdTaLBhAgMBAAGjge8wgewwCQYDVR0TBAIwADALBgNVHQ8E
BAMCBeAwHQYDVR0OBBYEFMfKcoOl8qGLdHPMB0NUhQK6K0KNMB8GA1UdIwQYMBaAFNSWhsePX54quprcIpdnsr
zHJrKYMCsGA1UdEQQkMCKgIAYKKwYBBAGCNxQCA6ASDBBqY19zbWJAVEVTVDUuQUxUMAkGA1UdEgQCMAAwHwYD
VR0lBBgwFgYIKwYBBQUHAwIGCisGAQQBgjcUAgIwOQYIKwYBBQUHAQEELTArMCkGCCsGAQUFBzABhh1odHRwOi
8vc3A4LXNydi0yMDIyLnRlc3Q1LmFsdDANBgkqhkiG9w0BAQsFAAOCAQEAdm+MwzCmy8MRPCXRYJTUwOmFPzzF
Y2pKF3xgJBzNlABG5oYKvpBxoSsjQkHMu2AfVU5Smp6GHfc22YfFc7flCHMNQF62eu+Y5wBQ3SFBrSt44b689e
etwVcSUAYJeeQu1zmmxdGvTjVAXyfMGjntK9aM6+6Yg5R9gMma3qoy0DqMQ4Hc46IP+F8XnDTagAFxWEKA0aW/
YLYnAfC/z0phb+1ICQHFXeGoaThGToYw7MqToHzyrLcg9LE+ZI25/DbrLIEvjtotdM50KdjT3Qx2R94YR4N0yK
AFWSH9s5g8HG4AlOUvXpUqfnj2gjlTgXQ4JG3xp3tQ1UHX/ST0td9nDQ==
4.2.2. sssd.conf. Настройка службы sssd
Добавим в секциюÊ[pam]Êследующие параметры для 2ФА по сертификатам:
[pam]
pam_cert_auth = True
pam_p11_allowed_services = +mate-screensaver, +lightdm, +kf5-screenlocker, +sddm
pam_cert_db_path = /etc/pki/tls/certs/cacert.pem
pam_cert_authопределяем что следует проводит аутентификацию по сертификату
pam_p11_allowed_servicesопределяем каким службам sssd предоставит доступ к
сертификату на токене
pam_cert_db_pathуказываем расположение сертификата УЦ
Добавим правило сопоставления сертификата с доменным пользователем:
[certmap/test5.alt/adcerts]
maprule = (samAccountName={subject_principal.short_name})
Так как аутентификация по токену занимает больше времени чем по паролю (поиск
сертификата на токене, проверка сертификата по протоколу OCSP и т.п) необходимо
увеличить таймауты для Kerberos и для p11_child. Добавим следующие параметры:
[domain/test5.alt]
32
...
krb5_auth_timeout = 60
...
[pam]
...
p11_child_timeout = 60
В итоге конфигурационный файл службы sssd примет следующий вид:
work ~ # cat /etc/sssd/sssd.conf | grep -viE '(^#|^$|^;)'
[sssd]
config_file_version = 2
services = nss, pam
user = _sssd
domains = TEST5.ALT
[nss]
[pam]
pam_cert_auth = True
pam_p11_allowed_services = +mate-screensaver, +lightdm, +kf5-screenlocker, +sddm
pam_cert_db_path = /etc/pki/tls/certs/cacert.pem
p11_child_timeout = 60
[domain/TEST5.ALT]
id_provider = ad
auth_provider = ad
chpass_provider = ad
access_provider = ad
default_shell = /bin/bash
fallback_homedir = /home/%d/%u
debug_level = 0
ad_gpo_ignore_unreadable = true
ad_gpo_access_control = permissive
krb5_auth_timeout = 60
[certmap/test5.alt/adcerts]
maprule = (samAccountName={subject_principal.short_name})
После изменения конфигурации перезапустим службу, очистив при этом кеш службы sssd:
work ~ # systemctl stop sssd && sss_cache -E \
Ê && systemctl start sssd
33
# 5. Проверяем 2ФА в текстовой консоли
При аутентификации по сертификату на токене, мы должны сначала получить
приглашение ввести пин-код, до приглашения ввести пароль. И если пин-код правильный,
то аутентификация должна пройти успешно, иначе отказ. После успешной
аутентификации мы должны получить действующий билет Kerberos.
5.1. Рутокен ECP
work login: rt_smb
PIN for RutokenECP2151:
rt_smb@work ~ $ klist
Ticket cache: KEYRING:persistent:1855201104:krb_ccache_D6Dd62D
Default principal: rt_smb@TEST5.ALT
Valid starting Expires Service principal
20.05.2022 19:23:15 21.05.2022 05:23:15 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 19:23:11
5.2. ESMART Token
work login: es_smb
PIN for esmart_64:
es_smb@work ~ $ klist
Ticket cache: KEYRING:persistent:1855201105:krb_ccache_aoV7xk2
Default principal: es_smb@TEST5.ALT
Valid starting Expires Service principal
20.05.2022 19:26:01 21.05.2022 05:26:01 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 19:25:56
5.3. JaCarta-2 SE
Для проверки работы службы sssd c токеном JaCarta-2 SE необходимо дополнительно
указать слот.
Добавьте параметрÊp11_uri=pkcs11:token=jacarta-slot-laser в секцию [pam] и перезапустите
службу sssd.
work login: jc_smb
PIN for jacarta-slot-laser:
jc_smb@work ~ $ klist
Ticket cache: KEYRING:persistent:1855201106:krb_ccache_YW8oJq3
Default principal: jc_smb@TEST5.ALT
Valid starting Expires Service principal
34
20.05.2022 19:34:19 21.05.2022 05:34:19 krbtgt/TEST5.ALT@TEST5.ALT
Ê renew until 27.05.2022 19:34:06
35
# 6. Проверяем 2ФА в графическом сеансе
6.1. Рутокен ECP
36
37
Разблокировка графического сеанса MATE по сертификату:
38
6.2. ESMART Token
39
40
41
Разблокировка графического сеанса MATE по сертификату:
42
6.3. JaCarta-2 SE
Для проверки работы службы sssd c токеном JaCarta-2 SE необходимо дополнительно
указать слот.
Добавьте параметрÊp11_uri=pkcs11:token=jacarta-slot-laser в секцию [pam] и перезапустите
службу sssd.
43
44
45
Разблокировка графического сеанса MATE по сертификату:
46
47
# 7. Проверка отзыва сертификата
Отзываем сертификат на контроллере домена (на примере пользователя jc_smb):
user@p10-srv ~ $ openssl ca -cert ./demoCA/certs/cacert.pem \
Ê -revoke ./demoCA/certs/jc_smb.pem
Using configuration from /var/lib/ssl/openssl.cnf
Revoking Certificate 04.
Data Base Updated
Перезапускаем OCSP responder на контроллере домена:
p10-srv ~ # cd /home/user; openssl ocsp -index demoCA/index.txt -port 80 \
Ê -rsigner demoCA/certs/ocsp-cert.pem -rkey demoCA/private/ocsp-key.pem \
Ê -CA demoCA/certs/cacert.pem -text -out log.txt
ocsp: waiting for OCSP client connections...
Проверяем 2ФА в консоли:
work login: jc_smb
Password:
Так как сертификат отозван, то запроса пин-кода нет.
Увидеть это можно в /var/log/sssd/p11_child.log:
...
Ê * (2022-05-23 12:33:22): [p11_child[3579]] [read_certs] (0x4000): found
cert[jc_2fa_smb][/C=RU/ST=Moscow/O=TEST5.ALT/CN=jc_smb]
Ê * (2022-05-23 12:33:22): [p11_child[3579]] [do_ocsp] (0x4000): Using OCSP URL
[http://p10-srv.test5.alt].
Ê * (2022-05-23 12:33:22): [p11_child[3579]] [do_ocsp] (0x4000): Nonce in OCSP
response is the same as the one used in the request.
Ê * (2022-05-23 12:33:22): [p11_child[3579]] [do_ocsp] (0x0020): OCSP check failed
with [1][revoked].
...
(2022-05-23 12:33:22): [p11_child[3579]] [read_certs] (0x0040): Certificate
[jc_2fa_smb][/C=RU/ST=Moscow/O=TEST5.ALT/CN=jc_smb] not valid, skipping.
48
# 8. Отладка sssd
Если аутентификация по токену не работает как ожидается, то для более полной
информации по этому процессу добавьте опцию вывода отладочной информации в файлы
логов службы sssd. Логи службы sssd находятся в директорииÊ/var/log/sssd/*. Добавление
опции вывода отладочной информации необходимо добавить в те секции
конфигурационного файлаÊsssd.conf, которые необходимо исследовать. Выглядеть это
может, примерно, так:
[domain/test5.alt]
debug_level = 8
...
[sssd]
debug_level = 8
...
[nss]
[ssh]
[sudo]
[pam]
debug_level = 8
...
debug_level = 8уровень отладки при котором выводится содержимое внутренних
переменных функций службы sssd.
Более подробно об уровнях отладки смman sssd.conf.
49
# 9. Полезные ссылки
https://wiki.samba.org/index.php/Samba_AD_Smart_Card_Login
https://github.com/heimdal/heimdal/wiki/Setting-up-PK-INIT-and-Certificates
https://sssd.io/design-pages/smartcard_authentication_pkinit.html#etc-krb5-conf
https://sssd.io/design-pages/certmaps_for_LDAP_AD_file.html
https://sssd.io/design-pages/smartcard_authentication_testing_with_ad.html
https://sssd.io/design-pages/smartcards.html
https://sssd.io/design-pages/smartcard_authentication_require.html
https://k5wiki.kerberos.org/wiki/Pkinit_configuration
https://web.mit.edu/kerberos/krb5-devel/doc/admin/pkinit.html
https://jamielinux.com/docs/openssl-certificate-authority/index.html
https://www.mankier.com/5/sssd.conf#Certificate_Mapping_Section
https://datatracker.ietf.org/doc/html/rfc7512#section-2.1
50