Единый клиент jakarta astra linux

Стенд

Удостоверяющий центр может быть объединен с сервером или с клиентом.

Если на сервере предполагается осуществлять двухфакторную аутентификацию, то сервер выступает в роли клиента и требует соответствующих настроек;

Предполагается, что домен Astra Linux Directory (ALD) уже развернут, существует минимум один доменный пользователь, который может пройти аутентификацию по паролю, время клиента и сервера совпадают (ntp).

Терминология Kerberos

  • Билет (ticket) – временные данные, выдаваемые клиенту для аутентификации на сервере, на котором располагается необходимая служба;
  • Клиент (client) – некая сущность в сети (пользователь, хост или сервис), которая может получить билет от Kerberos;
  • Центр выдачи ключей (key distribution center, KDC) – сервис, выдающий билеты Kerberos;
  • Область (realm) – сеть, используемая Kerberos, состоящая из серверов KDC и множества клиентов. Имя realm регистрозависимо, обычно пишется в верхнем регистре и совпадает с именем домена;
  • Принципал (principal) – уникальное имя для клиента, для которого разрешается аутентификация в Kerberos. Записывается в виде root[/instance]@REALM.

Установка пакетов для доступа к токенам

Для обеспечения доступа к токенам на компьютерах, работающих с токенами (УЦ, клиенты, сервер, если он выступает в роли клиента) должен быть установлен пакет jcpkcs11-2. Этот пакет предоставляется производителем токенов и не входит в дистрибутивы Astra Linux. Для установки пакета:

  1. Загрузить архив с официального сайта Аладдин: https://www.aladdin-rd.ru/support/downloads/jacarta. На сайте доступны версии пакета:
    1. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6);
    2. Для Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.5);
    3. для Astra Linux Common Edition можно использовать версию для Ubuntu/Debian;

    Создание УЦ и работа с УЦ

    Установка пакетов

    1. Установить пакет jcpkcs11-2 как описано выше;
    2. Установить пакеты из дистрибутива Astra Linux:

    Настройка УЦ

    В качестве УЦ в данном примере используется OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS. Позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.

    Все настройки далее выполняются для тестового домена SMARTCARD.ALD. Примем, что:

    • сервер и клиенты принадлежат домену SMARTCARD.ALD;
    • имя службы — kdc;
    • имя клиента — client.

    При настройке рабочей системы используйте реальные имена вашего домена, сервера и клиента.

    Порядок действий по настройке:

      Создать каталог удостоверяющего центра (УЦ) командой:

    В параметре Common name (CN) обязательно указать имя домена. В случае нашего примера: SMARTCARD.ALD

    sudo openssl genrsa -out cakey.pem 2048
    sudo openssl req -batch -new -key cakey.pem -out cacert.pem -subj ‘/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress= /CN=SMARTCARD.ALD’ -x509 -days 3650

    Создание ключей службы аутентификации kdc

    sudo openssl genrsa -out kdckey.pem 2048
    sudo openssl req -batch -new -key kdckey.pem -out kdc.req -subj ‘/C=RU/ST=MO/L=Moscow/O=Astra/OU=Wiki/emailAddress= /CN=kdc’

    [ kdc_cert ] basicConstraints=CA:FALSE # Here are some examples of the usage of nsCertType. If it is omitted keyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement #Pkinit EKU extendedKeyUsage = 1.3.6.1.5.2.3.5 subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # Copy subject details issuerAltName=issuer:copy # Add id-pkinit-san (pkinit subjectAlternativeName) subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:kdc_princ_name [kdc_princ_name] realm = EXP:0, GeneralString:$ 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:$ [ client_cert ] # These extensions are added when ‘ca’ signs a request. basicConstraints=CA:FALSE keyUsage = digitalSignature, keyEncipherment, keyAgreement extendedKeyUsage = 1.3.6.1.5.2.3.4 subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer subjectAltName=otherName:1.3.6.1.5.2.2;SEQUENCE:princ_name # Copy subject details issuerAltName=issuer:copy [princ_name] realm = EXP:0, GeneralString:$ principal_name = EXP:1, SEQUENCE:principal_seq [principal_seq] name_type = EXP:0, INTEGER:1 name_string = EXP:1, SEQUENCE:principals [principals] princ1 = GeneralString:$

    sudo openssl x509 -req -in kdc.req -CAkey cakey.pem -CA cacert.pem -out kdc.pem -extfile pkinit_extensions -extensions kdc_cert -CAcreateserial -days 365

    Подготовка токенов. Выпуск ключей и сертификата пользователей

    1. Подключить устройство, которое следует подготовить. В зависимости от используемой модели токена (PKI или GOST), в дальнейшем требуется использовать определенную библиотеку ( libjcPKCS11-2.so или libASEP11.so). Узнать, где расположены библиотеки можно с помощью команды:

    dpkg -L jcpkcs11-2 | egrep «(libjcPKCS11-2.so|libASEP11.so)»
    /usr/lib/libASEP11.so
    /usr/lib/libjcPKCS11-2.so.2.7.3

    Далее предполагается, что библиотеки расположены в каталоге /usr/lib/.

      При использовании библиотеки libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH):

    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

    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 бит;
    —id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым;
    —label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым;

    • либо скачать и установить п одписанный пакет 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)

    Используемый для генерации сертификата закрытый ключ идентифицируется парой :. Для токенов Рутокен слоты нумеруются числами вида 0x1, 0x2 и т.д., для токенов Аладдин слоты нумеруются как 0x1ffff, 0x2ffff и т.д. Слоту 0x1ffff соответствует десятичный номер 131071 (используется ниже в примере команды):

    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/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 :
    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 []:*********

    -new -key 131071:33 , где 131071 — номер виртуального слота с устройством (0x1ffff) , 33 — атрибут CKA_ID раннее сгенерированных ключей.

    в поле CN = следует указать имя пользователя

    Узнать номер виртуального слота можно используя команду:

    В случае если openssl выдаст ошибку о неверном слоте, № слота следует указать в десятичном формате, например: 131071:33

    sudo openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem -days 365

    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 — указывает, что необходимо записать объект и путь до него;
    —type ‘cert’ — указывает, что тип записываемого объекта — сертификат;
    ‘cert’ —label ‘test1’ — устанавливает атрибут CKA_LABEL(имя) сертификата. Атрибут может быть любым;

    Подготовка сервера

    1. Созданные в УЦ файлы kdc.pem, kdckey.pem, cacert.pem переместить в каталог /var/lib/krb5kdc/ на сервере;
    2. Создать резервную копию файла /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 sed -i.`date +%Y-%m%d-%H:%M:%S` «/\[kdcdefaults\]/a \ pkinit_anchors = FILE:/var/lib/krb5kdc/cacert.pem» /etc/krb5kdc/kdc.conf
    sudo sed -i «/\[kdcdefaults\]/a \ pkinit_identity = FILE:/var/lib/krb5kdc/kdc.pem,/var/lib/krb5kdc/kdckey.pem» /etc/krb5kdc/kdc.conf

    Настройка клиента. Проверка работоспособности

    [libdefaults] default_realm = SMARTCARD.ALD pkinit_anchors = FILE:/etc/krb5/cacert.pem # для аутентификации по токену pkinit_identities = PKCS11:/usr/lib/libjcPKCS11-2.so

    Для включения отладки команду kinit следует использовать так:

    Далее вход пользователя следует выполнять с подключенным к компьютеру токеном.

    При графическом входе в поле Login вводится имя пользователя, в поле Password вводится . При консольном входе все аналогично, только в момент ввода пароля будет сообщено, что требуется :

    Настройка политики аутентификации

    Существует возможность указания дополнительных параметров модуля аутентификации 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.

    Полезные ссылки

    Источник

    Читайте также:  Восстановить загрузку линукс минт
Оцените статью
Adblock
detector