Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление




Информация
titleСтатья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
    с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12
Image Removed


Стенд

Стенд

Состав стенда:

  • Сервер — Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2);
  • Клиент —Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2);
  • 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.


    Image Added

    Установка

    драйверов на сервер и клиент

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

    Для обеспечения доступа к токенам на компьютерах, работающих с токенами (УЦ, клиенты, сервер, если он выступает в роли клиента) должен быть установлен пакет 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;
    2. Распаковать архив:

      Command
      unzip <имя_загруженного_файла>


    3. Установить пакет:

      Command
      sudo apt install ./jcpkcs11-2_*.deb

      Предупреждение "Download is performed unsandboxed as root as file..." при установке пакетов из файлов с помощью apt можно игнорировать.

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

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

    1. Установить пакет jcpkcs11-2 как описано выше;
    2. Установить пакеты из

    Для обеспечения работы со смарт-картой JaCarta на клиенте и сервере требуются следующие пакеты:

    • На клиенте и сервере:
      • libccid;
      • pcscd;
      • libpcsclite1;
      • pcsc-tools;
      • opensc;
      • для обеспечения работы со смарт-картой подсистемы Kerberos дополнительно требуются пакеты:
        • krb5-pkinit;
        • libpam-krb5;
      • для обеспечения возможности обращения к смарт-картам JaCarta  установить пакет jcpkcs11-2 (не входит в дистрибутив Astra Linux, порядок установки см. ниже) и далее использовать:

        • либо библиотеку libjcPKCS11-2.so для JaCarta PKI/ГОСТ/FLASH;

        • либо библиотеку libASEP11.so для JaCarta PKI.

    • На сервере:
      • для обеспечения возможности выпуска ключей и сертификатов на JaCarta  требуется пакет libengine-pkcs11-openssl1.1.
    Команда для установки всех пакетов, входящих в состав
    1. дистрибутива Astra Linux:

      Command
      sudo apt install
    libccid pcscd libpcsclite1 pcsc
    1. -
    tools opensc krb5-pkinit libpam-krb5
    1. y opensc libengine-pkcs11-openssl1.1

    Установка пакета  jcpkcs11-2 :

  • Загрузить архив с официального сайта Аладдин:  https://www.aladdin-rd.ru/support/downloads/jacarta;
  • Распаковать архив:

    Command
    unzip <имя_загруженного_файла>
  • Установить пакет:

    Command
    sudo apt install ./jcpkcs11-2_*.deb

    Предупреждение "Download is performed unsandboxed as root as file..." при установке пакетов из файлов с помощью apt можно игнорировать.

    1. pcsc-tools


    Настройка УЦ

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

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

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

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

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

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

      Command
      sudo mkdir /etc/ssl/CA

      В этом каталоге будут размещаться сгенерированные ключи и сертификаты.


    2. Перейти в созданный каталог:

      Command
      cd /etc/ssl/CA


    3. Создать ключ и сертификат УЦ, указав собственные параметры в опции -subst:

      Примечание

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


      Command
      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


      Примечание

      Параметр days определяет количество дней действия сертификата УЦ.


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

    1. Создать ключ и сертификат службы KDC, указав собственные параметры в опции -subst:

      Примечание

      В Common name (CN) обязательно указать имя службы kdc.


      Command

      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'


    2. Установить переменные среды. Переменные среды устанавливаются в рамках сессии, не устанавливаются для других сессий, не сохраняются после закрытия сессии:

      Command
      export REALM=SMARTCARD.ALD
      export CLIENT=kdc


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

      Command
      env | grep -wE "REALM|CLIENT"


    4. Загрузить файл pkinit_extensions и сохранить в каталог в котором выполняются команды: pkinit_extensions.

      Раскрыть
      titleсодержимое файла pkinit_extensions:


      Блок кода
      [ kdc_cert ]
      basicConstraints=CA:FALSE
       
      # Here are

    Установка и настройка центра сертификации на сервере

    Image Removed

    Для работы модуля pkinit нам придется воспользоваться OpenSSL в качестве УЦ(CA), чтобы создать ключевые пары и сертификаты клиента и сервера.

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

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

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

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

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

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

      Command
      sudo mkdir /etc/ssl/CA

      В этом каталоге будут размещаться сгенерированные ключи и сертификаты.

      Перейти в созданный каталог:

      Command
      cd /etc/ssl/CA

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

      Command
      sudo openssl genrsa -out cakey.pem 2048
      sudo openssl req -key cakey.pem -new -x509 -days 3650 -out cacert.pem
      Примечание

      Параметр days определяет количество дней действия сертификата УЦ.

    1. В диалоге заполнить необходимую информацию о создаваемом УЦ.

      Примечание

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

      Image Removed

    2. Создать ключ и сертификат службы KDC:

      Command

      sudo openssl genrsa -out kdckey.pem 2048
      sudo openssl req -new -out kdc.req -key kdckey.pem

      В диалоге заполните необходимую информацию о вашем сервере.

      Примечание

      В Common name указать имя службы kdc.

      Установить переменные среды. Переменные среды устанавливаются в рамках сессии, не устанавливаются для других сессий, не сохраняются после закрытия сессии:

      Command
      export REALM=SMARTCARD.ALD
      export CLIENT=kdc

      Убедиться что переменные указаны верно, воспользовавшись командой:

      Command
      env | grep -wE "REALM|CLIENT"

      Загрузить файл pkinit_extensions и сохранить в каталог в котором выполняются команды: pkinit_extensions.

      Раскрыть
      titleсодержимое файла pkinit_extensions:
      Блок кода
      [ 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:${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}
       
      [ 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:${ENV::REALM}
      principal_name = EXP:1, SEQUENCE:principal_seq
       
      [principal_seq]
      name_type = EXP:0, INTEGER:1
      name_string = EXP:1, SEQUENCE:principals
       
      [principals]
      princ1 = GeneralString:${ENV::CLIENT}



    3. Выпустить сертификат KDC:

      Command
      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
      Файлы kdc.pem, kdckey.pem, cacert.pem переместить в каталог/var/lib/krb5kdc/:
      Command
      sudo mv kdc.pem kdckey.pem cacert.pem /var/lib/krb5kdc/
    4. Создайть резервную копию файла /etc/krb5kdc/kdc.conf;

    5. Отредактировать файл /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

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

    6. Для принятия изменений выполнить команды:

      Command
      sudo systemctl restart krb5-admin-server
      sudo systemctl restart krb5-kdc

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

    Подключить устройство, которое следует подготовить;

    Предупреждение

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


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

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

      Command
      Titledpkg -L jcpkcs11-2 | egrep "(libjcPKCS11-2.so|libASEP11.so)"
      /usr/lib/libASEP11.so
      /usr/lib/libjcPKCS11-2.so.2.7.3

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

    2. Проверить работоспособность  JaCarta:

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

        Command
        pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -T


      2. при использовании библиотеки libASEP11.so (для JaCarta PKI):

        Command
        pkcs11-tool --module /usr/lib/libASEP11.so -T


    3. Инициализировать токен:

      Предупреждение

      Внимание! Инициализация устройства удалит все данные на JaCarta PKI без возможности восстановления. 


      Command
      pkcs11-tool --slot 0x1ffff --init-token --so-pin 00000000 --label 'JaCarta PKI' --module 

    Проверка работы JaCarta в системе

    Для проверки работы JaCarta:

    libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH):

    Commandpkcs11-tool --module
    1. /usr/lib/libjcPKCS11-2.so
    -T

    1. Задать ПИН-код пользователя

    libASEP11.so (для JaCarta PKI)
    1. :

      Command
      pkcs11-tool --slot 0x1ffff --init-pin --so-pin 00000000 --login --pin 11111111 --module /usr/lib/
    x64
    1. libjcPKCS11-
    athena/libASEP11
    1. 2.so
    -T

    Image Removed

    Примечание

    1. Информация

      --slot 0x1ffff — указывает используемый виртуальный слот токена. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.дю;
      --init-token – команда инициализации токена;
      --pin - пин код пользователя JaCarta. По умолчанию имеет значение 11111111;

    Путь к библиотекам libjcPKCS11-2.so, libASEP11.so может различаться. Для того чтобы определить путь до библиотеки libjcPKCS11-2.so выполнить команду:

    Command
    find /usr/*(lib|lib64) -name libjcPKCS11-2.so

    Инициализация устройства

    Для инициализации токена воспользоваться утилитой pkcs11-tool:

    Commandpkcs11-tool --slot 0x1ffff --init-token
    1. --so-pin

    00000000 --label 'JaCarta PKI' --module /usr/lib/
    1. 00000000 – ПИН код администратора JaCarta PKI. По умолчанию имеет значение 00000000;
      --label 'JaCarta PKI' - метка(название) устройства;
      --module - указывает путь до библиотеки libjcPKCS11-2.so

    Для задания ПИН кода пользователя использовать команду

    1. Создать на устройстве пару ключей:

      Command

      pkcs11-tool

    1. --slot

    1. 0x1ffff

    1. --login -

    init
    1. -pin

    1. 11111111 --

    so
    1. keypairgen -

    pin 00000000
    1. -

    -login --pin 11111111
    1. key-type rsa:2048 --id 33 --label “2fa_test1_key” --module

    1. /usr/lib/libjcPKCS11-2.so


      Информация

      -keypairgen --

    -slot 0x1ffff — указывает в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.

    --init-token – команда инициализации токена.

    --pin - пин код пользователя JaCarta. По умолчанию имеет значение 11111111

    --so-pin 00000000 – ПИН код администратора JaCarta PKI. По умолчанию имеет значение 00000000

    --label 'JaCarta PKI' - метка(название) устройства.

    --module - указывает путь до библиотеки libjcPKCS11-2.so

    Image Removed

    Предупреждение

    Внимание! Инициализация устройства удалит все данные на 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

    Image Removed
    Примечание

    -keypairgen --key-type rsa:2048 — указывает, что должны быть сгенерированы RSA ключи длиной 2048 бит; 
    --id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым; 
    --label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым; 

    Генерация запроса на сертификат

    Сгенерировать запрос на сертификат с помощью инструмента openssl. Для этого выполнить следующие команды:
    Примечание

    В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) pkcs11 libengine-pkcs11-openssl версии 1.0.2 не совместим с библиотекой libjcPKCS11-2.so. Для корректного функционирования, следует:

    Command
    Titleopenssl

    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 <AstraLinux>:
    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 []:*********
     
    OpenSSL> exit

    Примечание

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

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

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

    Command
    pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -L
    1. key-type rsa:2048 — указывает, что должны быть сгенерированы RSA ключи длиной 2048 бит; 
      --id 33 — устанавливает атрибут CKA_ID ключа. CKA_ID может быть любым; 
      --label “test1 key” — устанавливает атрибут CKA_LABEL(имя) ключа. Атрибут может быть любым; 


    2. Создать запрос на сертификат с помощью инструмента openssl. Для этого выполнить следующие команды:

      Примечание

      В Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) pkcs11 libengine-pkcs11-openssl версии 1.0.2 не совместим с библиотекой libjcPKCS11-2.so. Для корректного функционирования, следует:


      Command
      Titleopenssl

      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 <AstraLinux>:
      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 []:*********
       
      OpenSSL> exit


      Примечание

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

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

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

      Command
      pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -L



      Примечание

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


    3. Выпустить  сертификат для пользователя:

      1. Установить переменные окружения:

        Command

        export REALM=<имя_домена>
        export CLIENT=<имя_доменного_пользователя>


      2. Убедиться что переменные указаны верно:

        Примечание

        env | grep -wE "REALM|CLIENT"


      3. Выпустить сертификат пользователя:

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


      4. Перекодировать полученный сертификат из формата PEM в формат DER:

        Command
        # openssl x509 -in client.pem -out client.cer -inform PEM -outform DER


      5. Записать полученный сертификат на токен:

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


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

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

      Command
      sudo apt install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1


    3. Созданные в УЦ файлы kdc.pem, kdckey.pem, cacert.pem переместить в каталог /var/lib/krb5kdc/ на сервере;

    4. Создать резервную копию файла /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

      Первая запись задаёт ключи и сертификат сервера, а вторая указывает на корневой сертификат центра сертификации. Для этого можно использовать команды:

      Command
      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


    5. Для принятия изменений выполнить команды:

      Command
      sudo systemctl restart krb5-admin-server
      sudo systemctl restart krb5-kdc


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

    1. Создать на клиенте каталог /etc/krb5/:

      Command
      sudo mkdir /etc/krb5/


    2. Скопировать в созданный каталог /etc/krb5/ сертификат УЦ(файл cacert.pem) c компьютера, выполняющего роль УЦ;
    3. В файле /etc/krb5.conf  секцию [libdefaults] дополнить

    Примечание

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

    Выпуск сертификата для пользователя

    Необходимо установить переменные окружения:

    Command

    export REALM=<имя_домена>
    export CLIENT=<имя_доменного_пользователя>

    Для того, чтобы убедиться что переменные указаны верно, воспользуйтесь командой:

    Примечание

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

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

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

    Настройте kerberos в /etc/krb5.conf. Секцию [libdefaults] дополните
    1. следующими строками:

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

    1. Подключить токен к компьютеру;
    2. Выполнить

    Выполните
    1. проверку: 

      Command
    $
    1. kinit


    2. Когда появится строка запроса PIN-кода к карте

    , введите его.
    1. - ввести PIN-код;

    2. Для проверки того, что

    ,
    1. билет

    kerberos-тикет
    1. Kerberos был успешно получен

    для пользователя
    1. пользователем,

    введите
    1. ввести команду:

      Command
      klist


    2. Для удаления полученного билета:

      Command
      kdestroy


    Примечание

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

    Command
    env KRB5_TRACE=/dev/stdout kinit <имя_пользователя>

    Image Removed



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

    При графическом входе в поле 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.

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




    ...