Содержание

Перейти к концу метаданных
Переход к началу метаданных

Настройка Kerberos-аутентификации

Введение

Related links

http://dev.rutoken.ru/pages/viewpage.action?pageId=3440679
https://help.ubuntu.com/community/Kerberos
https://help.ubuntu.com/10.04/serverguide/kerberos.html 
По аутентификации с использованием сертификатов здесь: http://k5wiki.kerberos.org/wiki/Pkinit_configuration


Основные понятия

Key Distribution Center (KDC) - хранилище информации о паролях пользователей
Admin server - основной сервер kerberos. У нас KDC и admin server находятся на одной машине
Realm - "среда", в которой производится аутентификация
Principal - пользователь или сервис, участвующий в механизме аутентификации. Мы пока рассматриваем только пользователей

Стенд

две машины с Astra Linux 1.3 x64 и настроенной ALD

Важно: время на клиенте и сервере должно быть синхронизировано. Невыполнение этого требования может привести к возникновению проблем.

<username> = test1
<realm> = RUSBITECH.RU
<server> = server.rusbitech.ru

Клиент

Установлены стандартные пакеты для работы с токенами:

libopenct1_0.6.20-1.2_amd64.deb
openct_0.6.20-1.2_amd64.deb
opensc_0.12.2-2_amd64.deb
libp11-2_0.2.8-2_amd64.deb
libengine-pkcs11-openssl_0.1.8-2_amd64.deb


Сервер и клиент

Kerberos realm: RUSBITECH.RU, доменное имя server.rusbitech.ru (прописано в /etc/hosts на клиенте)
Пользователи: test1@RUSBITECH.RU
Добавочно к предустановленным пакетам ald/kerberos установлен krb5-pkinit(krb5-pkinit_1.10.1+dfsg-3_amd64.deb, Debian Wheezy):

dpkg -i --force-depends krb5-pkinit_1.10.1+dfsg-3_amd64.deb

Общий порядок действий

Проверка получения тикета пользователем на сервере

$ kinit <username>
...
$ klist
...
$ kdestroy

Проверка получения тикета пользователем на клиенте, используя идентификацию по паролю

$ kinit <username>@<realm>
...
$ klist
...
$ kdestroy

Настрока работы с сертификатами и токеном

Сервер

Создать ключ и сертификат CA:

openssl genrsa -out cakey.pem 2048
openssl req -key cakey.pem -new -x509 -out cacert.pem

Common name указать test1 (ваш пользователь).

Создать ключ и сертификат KDC:

openssl genrsa -out kdckey.pem 2048

Cоздание запроса

openssl req -new -out kdc.req -key kdckey.pem
Common name указать RUSBITECH.RU

Подпись запроса

export REALM=RUSBITECH.RU #Ваш домен
export CLIENT=server #Имя Вашего сервера
# файл pkinit_extensions следует положить в тот каталог, откуда вы выполняете команды.
openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial
Перенести следующие файлы в /var/lib/krb5kdc/:

kdc.pem
kdckey.pem
cacert.pem

Включить preauth на сервере.

Необходимо дополнить секцию kdcdefaults новыми параметрами из примера ниже:

/etc/krb5kdc/kdc.conf
[kdcdefaults]
    kdc_tcp_ports = 88
    pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem
    pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem
[realms]
    AKTIV-TEST = {
        database_name = /var/lib/krb5kdc/principal
        admin_keytab = FILE:/etc/krb5kdc/kadm5.keytab
        acl_file = /etc/krb5kdc/kadm5.acl
        key_stash_file = /etc/krb5kdc/stash
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = aes256-cts:normal arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }

Включить preauth для пользователя

kadmin.local$: modprinc +requires_preauth <username>

Клиент


Создать каталог /etc/krb5/

Скопировать сертификат CA (cacert.pem) c сервера в /etc/krb5/ на клиенте

Отформатировать токен

pkcs15-init --erase-card -p rutoken_ecp
pkcs15-init --create-pkcs15 --so-pin "87654321" --so-puk ""
pkcs15-init --store-pin --label "User PIN" --auth-id 02 --pin "12345678" --puk "" --so-pin "87654321" --finalize

Сгенерировать ключевую пару и заявку на сертификат на токене

# не забываем про ID!

pkcs15-init -G rsa/2048 --auth-id 02 --id 42 --label "testuser's key" --public-key-label "testuser's public key"
# ...
openssl
OpenSSL> engine dynamic -pre SO_PATH:/usr/lib/ssl/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 -pre LOAD -pre MODULE_PATH:opensc-pkcs11.so
Должен появится следующий вывод:

(dynamic) Dynamic engine loading support
[Success]: SO_PATH:/usr/lib/openssl/engines/engine_pkcs11.so
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:opensc-pkcs11.so
Loaded: (pkcs11) pkcs11 engine

OpenSSL> req -engine pkcs11 -new -key 1:42 -keyform engine -out client.req -subj "/C=RU/ST=Moscow/L=Moscow/O=Aktiv/OU=dev/CN=testuser (!Ваш_Пользователь!)/emailAddress=testuser@mail.com"
Должен появится следующий вывод:

engine "pkcs11" set.
PKCS#11 token PIN:

OpenSSL> quit

Сервер

Скопировать с клиента заявку (client.req) и подписать ее ключом CA:

export REALM=RUSBITECH.RU #Ваш домен
export CLIENT=testuser #Ваш пользователь
openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem
Перезапустить сервер и kdc:
/etc/init.d/krb5-admin-server restart
/etc/init.d/krb5-kdc restart

Клиент

Вернуть сертификат клиента (client.pem) и положить его в /etc/krb5/ <

Также записать его на токен

pkcs15-init --store-certificate client.pem --auth-id 02 --id 42 --format pem
client.pem должен быть подписан на сервере!

Настроить kerberos

/etc/krb5.conf
[libdefaults]
default_realm = RUSBITECH.RU
pkinit_anchors = FILE:/etc/krb5/cacert.pem
# для аутентификации по локальному ключу
# pkinit_identities = FILE:/etc/krb5/client.pem,/etc/krb5/clientkey.pem
# для аутентификации по токену
pkinit_identities = PKCS11:/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so

Проверить как оно все работает

$ kinit <username>