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

Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 5 Следующий »

Стенд:



  • Сервер — 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 на клиенте и сервере.

Для обеспечения возможности выпуска ключей и сертификатов на JaCarta PKI на сервере также установите пакеты 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 365 -out cacert.pem

В диалоге заполните необходимую информацию о вашем центре сертификации. В 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 



5) Загрузите файл pkinit_extensions и сохраните в каталог в котором, Вы выполняете команды:

 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}


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. Для принятия изменений выполните:

/etc/init.d/krb5-admin-server restart
/etc/init.d/krb5-kdc restart



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



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

Проверка работы Рутокен в системе



Для проверки работы Рутокена:

user ~$ 

$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T




путь до библиотеки librtpkcs11ecp.so может различаться

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


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



Проинициализируйте устройство, установите PIN-код пользователя. Помните, что инициализация устройства удалит все данные на Рутокен ЭЦП без возможности восстановления.

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


user ~$ $ pkcs11-tool --slot 0 --init-token --so-pin 87654321 --label 'AstraLinux' --module /usr/lib/librtpkcs11ecp.so

--slot 0 — указывает, в какой виртуальный слот подключено устройство. Как правило, это слот 0, но могут быть и другие значения – 1,2 и т.д.; 
--init-token – команда инициализации токена; 
--so-pin 00000000 – PIN-код администратора Рутокен ЭЦП. По умолчанию имеет значение 87654321; 
--label 'AstraLinux' – название устройства; 
--module /usr/lib/librtpkcs11ecp.so — указывает путь до библиотеки librtpkcs11ecp.so


Задания PIN-кода пользователя



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

user ~$ pkcs11-tool --slot 0 --init-pin --so-pin 87654321 --login --pin 12345678 --module /usr/lib/librtpkcs11ecp.so






  • Нет меток