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

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

Ключ

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

Оглавление




Информация

...

...

title

...

Статья применима к:

...

  • Astra Linux

...

Информация

Также применимо для Astra Linux: Орёл 2.12, Ленинград 8.1, Севастополь 6.2

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

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

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

Для обеспечения работы со смарт-картой подсистемы Kerberos добавочно к предустановленным пакетам ald/kerberos установите пакет krb5-pkinit, libpam-krb5 на клиенте и сервере.

Для обеспечения возможности выпуска ключей и сертификатов на JaCarta  на сервере также установите пакеты libengine-pkcs11-openssl1.1

Для обеспечения возможности обращения к смарт-карте JaCarta, на клиенте и сервере следует  установить библиотеку libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH), libASEP11.so (для JaCarta PKI)  которую следует скачать с официального сайта Аладдина:  

https://www.aladdin-rd.ru/support/downloads/jacarta

Test
$ sudo apt-get install libccid pcscd libpcsclite1 pcsc-tools opensc krb5-pkinit libpam-krb5 libengine-pkcs11-openssl1.1
Блок кода
user ~$ 

$ sudo dpkg -i название_загруженного_пакета.deb

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

Image Removed

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

...

  • Special Edition РУСБ.10015-01 (очередное обновление 1.7), РУСБ.10015-10
  • Astra Linux Special Edition РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10015-03 (очередное обновление 7.6)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6) с установленным обновлением БЮЛЛЕТЕНЬ № 20190222SE16 (оперативное обновление 2)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1
  • Astra Linux Special Edition РУСБ.10015-16 исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12


Стенд

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

  • Удостоверяющий центр (УЦ);
  • Сервер;
  • Клиент;

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

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

Предполагается, что домен 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. Для получения пакета и инструкций по его установке следует обратиться к производителю: https://www.aladdin-rd.ru.

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

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

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

    Command
    sudo apt install -y opensc libengine-pkcs11-openssl1.1 pcsc-tools


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

В качестве инструмента для создания УЦ в данном примере используется OpenSSL — криптографический пакет с открытым исходным кодом для работы с SSL/TLS.

...

Пакет позволяет создавать ключи RSA, DH, DSA, ГОСТ и сертификаты X.509, подписывать их, формировать CSR и CRT.

...

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

...

  • клиенты принадлежат домену SMARTCARD.ALD

...

  • ;
  • имя

...

  • службы - kdc

...

  • ;
  • имя клиента - client.

При настройке рабочей системы используйте

...

реальные имена вашего домена, сервера и клиента.

...

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

...

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

...

  1. Command
    sudo mkdir

...

  1. /etc/ssl/CA

...

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

...

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

Блок кода
$ openssl genrsa -out cakey.pem 2048
$ openssl req -key cakey.pem -new -x509 -days 3650 -out cacert.pem
Примечание

Где days - количество дней действия сертификата CA

...


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

    Command
    cd /etc/ssl/CA


  2. Создать ключ и сертификат УЦ, указав собственные параметры в опции -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) обязательно указать имя

...

Image Removed

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

...

  1. службы kdc.


    Command

    sudo openssl genrsa -out

...

  1. kdckey.pem

...

  1. 2048

...

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

Примечание

В Common name указать kdc.

...


  1. 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. Установить переменные среды. Переменные среды устанавливаются в рамках сессии

...

  1. , не устанавливаются для других сессий

...

  1. , не сохраняются после закрытия сессии

...

  1. :

...

  1. Command

...

  1. export

...

  1. REALM=SMARTCARD.

...

  1. ALD
    export CLIENT=kdc


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

    Command
    env | grep -wE "REALM|CLIENT"


  3. Загрузить

...

  1. файл pkinit_extensions и

...

  1. сохранить в каталог в котором

...

  1. выполняются команды:

...

...

  1. Раскрыть
    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. =  1.3.6.1.5.2.3.4
    subjectKeyIdentifier=hash
    authorityKeyIdentifier=keyid,issuer
     
     
    subjectAltName=otherName:1.3.6.1.5.2.

...

  1. 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::

...

  1. CLIENT}



  2. Выпустить сертификат 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


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

  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 /usr/lib/libjcPKCS11-2.so


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

    Command
    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


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

    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


    Информация

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


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

    Примечание

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

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

    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:

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

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

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

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

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

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

...

Блок кода
user ~$ 

libjcPKCS11-2.so (для JaCarta PKI/ГОСТ/FLASH):
$ pkcs11-tool --module /usr/lib/libjcPKCS11-2.so -T

libASEP11.so (для JaCarta PKI)
$ pkcs11-tool --module /usr/lib/x64-athena/libASEP11.so -T

...

Примечание

путь до библиотеки libjcPKCS11-2.so, libASEP11.so может различаться.

Для того чтобы определить путь до библиотеки libjcPKCS11-2.so введите команду:
$ find /usr/*(lib|lib64) -name libjcPKCS11-2.so

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

Для инициализации токена необходимо воспользоваться утилитой pkcs11-tool.

Test
pkcs11-tool --slot 0x1ffff --init-token --so-pin 00000000 --label 'JaCarta PKI' --module /usr/lib/libjcPKCS11-2.so

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

Test
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

Image Removed

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

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

Генерация пары ключей на JaCarta 

Сгенерируйте ключи на устройстве, для этого введите следующую команду:

...

Image Removed

Примечание

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

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

...

  1. 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
Примечание

1) В Astra Linux SE 1.6 pkcs11 libengine-pkcs11-openssl версии 1.0.2 не совместим с библиотекой libjcPKCS11-2.so. Для корректного функционирования, следует скачать и установить подписанный пакет libengine-pkcs11-openssl1.1 версии 0.4.4-4 для Смоленска 1.6:

 libengine-pkcs11-openssl1.1_0.4.4-4_amd64.deb

2) Либо установить и обновить Обновления безопасности и методические указания Astra Linux Special Edition 1.6

$ 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

...

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

...

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 []:shuhrat@astralinux.ru
 
OpenSSL> exit

  1. -L



    Примечание

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


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

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

      Command

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


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

      Command

      env | grep -wE "REALM|CLIENT"


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

      Command
      sudo 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
      sudo 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. Созданные в УЦ файлы 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

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

    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


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

    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] дополнить

Примечание

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

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

Примечание

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

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

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

Блок кода
$ export REALM=SMARTCARD.ALD
$ export CLIENT=test1 
Примечание

SMARTCARD.ALD - ваш домен

test1 - Ваш доменной пользователь

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

env | grep REALM
env | grep CLIENT

...

Блок кода
$ openssl x509 -CAkey cakey.pem -CA cacert.pem -req -in client.req -extensions client_cert -extfile pkinit_extensions -out client.pem -days 365

...

Блок кода
# openssl x509 -in client.pem -out client.cer -inform PEM -outform DER

...

Блок кода
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 сервера.

...

  1. следующими строками:

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

...


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

...

  1. проверку: 

...

  1. Command

...

  1. kinit


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

...

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

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

...

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

...

  1. пользователем, ввести команду:

    Command
    klist


  2. Для удаления

...

  1. полученного билета:

    Command
    kdestroy


Примечание

Для

...

включения отладки команду kinit следует

...

Image Removed

...

использовать так:

Command
env KRB5_TRACE=/dev/stdout kinit

...

<имя_пользователя>



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

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

...

:

...

Command

...

login <имя_пользователя>

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


Существует возможность указания дополнительных параметров модуля аутентификации pam_krb5.so в файле /etc/pam.d/common-auth в строке относящейся к pam_krb5.so:
Image Modified

– try_pkinit — режим при котором осуществляется попытка аутентификации с помощью устройств PKCS-11, в случае провала попытки предоставляется возможность входа с помощью Kerberos пароля пользователя;
– use_pkinit — режим при котором требуется аутентификация с помощью устройств PKCS-11, в случае провала процесс входа прерывается;
– pkinit_prompt — вывод приглашения для подключения устройства PKCS-11 перед выполнением попытки входа.

Примечание

После обновления pam-auth-update, опции pkinit исчезнут.

...

Для того, чтобы опция сохранялась принудительно, в конфигурационном файле /usr/share/pam-configs/krb5 в поле Auth-Initial следует дописать одну из опций.

Image Modified

Более подробное описание см. в руководстве man.

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