Стенд:
- Сервер — Astra Linux Smolensk SE 1.6, Update 2, Bulletin 20190222SE16;
- Клиент — Astra Linux Smolensk SE 1.6, Update 2, Bulletin 20190222SE16;
- Рутокен ЭЦП;
Предполагается, что Astra Linux Directory (ALD) уже развернут, существует минимум один доменный пользователь, который может пройти аутентификацию по паролю, время клиента и сервера совпадают (ntp).
Установка драйверов на сервер и клиент
Для обеспечения работы со смарт-картой Рутокен ЭЦП на клиенте и сервере установите следующие пакеты: libccid, pcscd, libpcsclite1.
Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit на клиенте и сервере.
Для обеспечения возможности выпуска ключей и сертификатов на Рутокен ЭЦП на сервере также установите пакеты libengine-pkcs11-openssl1.1 и opensc.
Для обеспечения возможности обращения к смарт-карте Рутокен ЭЦП, на клиенте и сервере следует установить библиотеку librtpkcs11ecp.so:
https://www.rutoken.ru/support/download/pkcs/
user ~$ $ sudo dpkg -i librtpkcs11ecp_1.8.2.0-1_amd64.deb
Установка и настройка центра сертификации на сервере
Для работы модуля pkinit нам придется воспользоваться OpenSSL в качестве УЦ(CA), чтобы создать ключевые пары и сертификаты клиента и сервера.
OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.
Все настройки в руководстве выполняются для тестового домена SMARTCARD.ALD. Примем, что сервер и клиент принадлежат домену SMARTCARD.ALD, имя сервера - kdc, а клиента - client. При настройке используйте имя вашего домена, сервера и клиента.
Выполните следующие действия:
1) Создайте каталог CA командой:
mkdir /etc/ssl/CA
и перейдите в него. В этом каталоге будут размещаться сгенерированные ключи и сертификаты.
2) Создайте ключ и сертификат CA:
$ 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:
$ openssl genrsa -out kdckey.pem 2048 $ openssl req -new -out kdc.req -key kdckey.pem
В диалоге заполните необходимую информацию о вашем сервере.
В Common name указать kdc.
4) Установите переменные среды. Переменные среды устанавливаются в рамках сессии и не устанавливаются для других сессий и не сохраняются после закрытия сессии.
$ export REALM=SMARTCARD.ALD $ export CLIENT=kdc Для того, чтобы убедиться что переменные указаны верно, воспользуйтесь командой: env | grep REALM CLIENT
5) Загрузите файл pkinit_extensions и сохраните в каталог в котором, Вы выполняете команды:
6) Выпустите сертификат 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
7) Файлы kdc.pem, kdckey.pem, cacert.pem перенесите в /var/lib/krb5kdc/
8) Создайте резервную копию файла /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
Первая запись задаёт ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации.
9. Для принятия изменений выполните:
systemctl restart krb5-admin-server systemctl restart krb5-kdc
Подготовка смарт-карты. Выпуск ключей и сертификата пользователя
Подключите устройство, которое следует подготовить.
Проверка работы Рутокен в системе
Для проверки работы Рутокена:
user ~$ $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
путь до библиотеки librtpkcs11ecp.so может различаться
Для того чтобы определить путь до библиотеки librtpkcs11ecp.so введите команду:
$ find /usr/*(lib|lib64) -name librtpkcs11ecp.so
Инициализация устройства
Проинициализируйте устройство, установите PIN-код пользователя. Помните, что инициализация устройства удалит все данные на Рутокен ЭЦП без возможности восстановления.
Для инициализации необходимо воспользоваться утилитой pkcs11-tool.
--slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения - 1,2 и т.д.;
--init-token - команда инициализации токена;
--so-pin 87654321 - PIN-код администратора Рутокен ЭЦП. По умолчанию имеет значение 87654321;
--label 'AstraLinux' - название устройства;
--module /usr/lib/librtpkcs11ecp.so — указывает путь до библиотеки librtpkcs11ecp.so.
Задания PIN-кода пользователя
Для задания PIN-кода пользователя используйте команду:
--init-pin - команда установки PIN-кода пользователя;
--login - команда входа в токен;
--pin 12345678 - задаваемый PIN-код пользователя;
Генерация пары ключей на Рутокен ЭЦП
Сгенерируйте ключи на устройстве, для этого введите следующую команду:
-keypairgen --key-type rsa:2048 — указывает, что должны быть сгенерированы RSA ключи длиной 2048 бит;
--id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым;
--label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым;
Генерация запроса на сертификат
Сгенерируйте запрос на сертификат с помощью утилиты openssl. Для этого введите следующие команды:
$ openssl
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/librtpkcs11ecp.so
(dynamic) Dynamic engine loading support |
OpenSSL> req -engine pkcs11 -new -key 0:33 -keyform engine -out client.req
|
-new -key 0:33, где 0— номер виртуального слота с устройством, 33— атрибут CKA_ID раннее сгенерированных ключей.
в CN = следует указать имя пользователя
Выпуск сертификата для пользователя
Необходимо установить переменные окружения:
$ export REALM=EXAMPLE.RU $ export CLIENT=test1
SMARTCARD.ALD - ваш домен
test1 - Ваш доменной пользователь
Для того, чтобы убедиться что переменные указаны верно, воспользуйтесь командой:
env | grep REALM CLIENT
и выпустить сертификат на пользователя:
$ 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.
# openssl x509 -in client.pem -out client.cer -inform PEM -outform DER
Запишите полученный сертификат на токен:
pkcs11-tool --slot 0 --login --pin 12345678 --write-object client.cer --type 'cert' --label 'test1' --id 33 --module /usr/lib/librtpkcs11ecp.so
--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/librtpkcs11ecp.so
Выполните проверку:
$ kinit
Когда появится строка запроса PIN-кода к карте, введите его.
Для проверки того, что kerberos-тикет был успешно получен для пользователя, введите команду klist.
Для удаления тикета — kdestroy.
Для debugga, перед командой kinit следует ввести:
env KRB5_TRACE=/dev/stdout kinit test1 (или другое имя пользователя)
Вход выполняется с подключенным токеном к компьютеру. При графическом входе в поле Login вводится имя пользователя, в поле Password вводится <PIN пользователя>. При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется <PIN пользователя>.
$ login test1