ESMART: различия между версиями

Материал из ALT Linux Wiki
Строка 244: Строка 244:
#1.3.6.1.4.1.311.20.2.3=user@local=FALSE
#1.3.6.1.4.1.311.20.2.3=user@local=FALSE
</source>
</source>
{{Note|Может понадобится перекодировать запрос на сертификат в формат PEM или Base64. Сделать это можно, выполнив команду:
<source lang="text" highlight="1">$ openssl req -inform der -in esmart.csr -out esmart.pem</source>}}


Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия:
# Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
# Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»:
#:[[Изображение:Certrqxt1.png|Ссылка «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»]]
# Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла {{path|test5.req}} и нажмите кнопку «Выдать»:
#:[[Изображение:Certrqxt.png|Выдача запроса на сертификат]]
# Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя {{path|certnew.p7b}}):
#:[[Изображение:Certrqxt2.png|Ссылка «Загрузить цепочку сертификатов»]]
{{Note|Просмотреть содержимое файла {{path|esmart.pem}} можно, выполнив команду:
<source lang="text" highlight="1">$ cat esmart.pem
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=</source>}}


Подписанный сертификат необходимо записать на карту:
Подписанный сертификат необходимо записать на карту:
<source lang="text" highlight="1">$ PKIClientCli importcert --pin 12345678 --path certs/ca.crt</source>
<source lang="text" highlight="1">$ PKIClientCli importcert --pin 12345678 --path certnew.crt</source>


==Подписание документов==
==Подписание документов==

Версия от 13:10, 26 февраля 2019

Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.


  • Токен: ESMART Token ГОСТ
   библиотека libisbc_pkcs11_main.so обеспечивает взаимодействие с криптопровайдером токена по стандарту PKCS#11;
   ESMART Token ГОСТ может использоваться для генерации ключей, формирования и проверки электронной подписи, строгой многофакторной аутентификации пользователей и др. 
   Российские криптографические алгоритмы ГОСТ реализованы нативно в ОС смарт-карты в маске чипа (не используются Java апплеты для реализации ГОСТ).

Значения PIN-кодов по умолчанию

PIN-коды ESMART Token ГОСТ, установленные по умолчанию — Пользователь (pin): 12345678; Администратор (so-pin): 12345678

Работа с ESMART Token ГОСТ утилитой pkcs11-tool

Пакеты для работы с ESMART Token ГОСТ

Должна быть установлена библиотека libisbc_pkcs11_main.so:

# apt-get install isbc-pkcs11
Примечание: При работе с ESMART Token ГОСТ необходимо указывать путь до библиотеки libisbc_pkcs11_main.so:
--module /usr/lib64/pkcs11/libisbc_pkcs11_main.so


Проверка работы ESMART Token ГОСТ

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

$ pkcs11-tool -L --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so 
Available slots:
Slot 0 (0x1): Generic CCID Reader [CCID Bulk Interface] 00 00
  token label        : EsmartToken
  token manufacturer : ISBC
  token model        : ESMARTToken GOST
  token flags        : login required, rng, token initialized, PIN initialized
  hardware version   : 2.5
  firmware version   : 255.255
  serial num         : 346056D604154404
  pin min/max        : 4/8

Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):

$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Logging in to "EsmartToken".
Please enter User PIN:

Инициализация токена

Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin):

$ pkcs11-tool --init-token --label EsmartToken  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the new SO PIN: 
Please enter the new SO PIN (again): 
Token successfully initialized

Смена PIN-кода

Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый):

$ pkcs11-tool --change-pin  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter the current PIN: 
Please enter the new PIN: 
Please enter the new PIN again: 
PIN successfully changed

Разблокировка PIN-кода

Для того чтобы разблокировать PIN-код необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код):

$ pkcs11-tool --init-pin -l  --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so
Using slot 0 with a present token (0x1)
Please enter SO PIN: 
Please enter the new PIN: 
Please enter the new PIN again: 
User PIN successfully initialized

Удаление объекта

Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно.

$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

Типы объектов:

  • privkey – закрытый ключ;
  • pubkey – открытый ключ;
  • cert – сертификат.

Создание ключевой пары

Создание ключевой пары по алгоритму ГОСТ:

$ pkcs11-tool --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so --login --pin 12345678 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key"
Using slot 0 with a present token (0x1)
Key pair generated:
Private Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  label:      my key
  ID:         0101
  Usage:      sign, unwrap
Public Key Object; GOSTR3410 
  PARAMS OID: 06072a850302022301
  VALUE:      a973f28ea2462781249fff1060d37276f23030e9766b54b8a14f0daa6fba6a7d
              62f2481e00a3df35bdd6c75ed82e8e95f1a78e9db549c8ee55008cfd92d7abb2
  label:      my key
  ID:         0101
  Usage:      verify, wrap

Создание ключевой пары RSA 1024:

$ pkcs11-tool --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so --keypairgen --key-type rsa:1024 --login --id 2222 --label myrsakey
Using slot 0 with a present token (0x1)
Logging in to "EsmartToken".
Please enter User PIN: 
Key pair generated:
Private Key Object; RSA 
  label:      myrsakey
  ID:         2222
  Usage:      decrypt, sign, unwrap
Public Key Object; RSA 1024 bits
  label:      myrsakey
  ID:         2222
  Usage:      encrypt, verify, wrap

Сертификаты

Создание запроса на сертификат

Получение сертификата

Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.

Запись сертификата на карту

Подписанный сертификат необходимо записать на карту:

$ pkcs11-tool -w cert.cer -y cert --id 1024 --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

OpenSC требует сертификаты в двоичном формате (DER). При попытке записать файл в кодировке base64 (PEM), появляется сообщение об ошибке.

Сертификат можно переконвертировать при помощи OpenSSL:

PEM → DER

$ openssl x509 -inform pem -in cert.pem -out cert.cer

DER → PEM

$ openssl x509 -inform der -in cert.cer -out cert.pem

Чтение сертификата

Если на карте имеется сертификат, его можно прочитать командой:

$ pkcs11-tool -r cert.cer -y cert --login --id 0000 --label certificate --module /usr/lib64/pkcs11/libisbc_pkcs11_main.so

Создание и настройка входа через ssh

Примечание: Только для RSA ключей

Предполагается что ssh-сервер запущен (на 192.168.3.108) и имеет настройки, принятые по умолчанию в ALT Linux.

  1. Вывести список открытых ключей на смарт-карте в формате OpenSSH:
    $ ssh-keygen -D /usr/lib64/pkcs11/libisbc_pkcs11_main.so
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCHahc9HhA/DQkvJFShNHo2BJV3/cj0tmGNfj0RO3mCtRl8cgqvkb9N/4bJcfG3NiDR4T+x1MxmFxHcQXDstUwnF1mc40kabWz9d1a16dlwVmtFCKv0l2pK6MMX6igqtHnapGNvyUpsYSV4wXnMwevGNQGeq6l9AE+r18cEVx4KLQ==
    
  2. Добавить ключ на сервер в файл ~/.ssh/authorized_keys
  3. Подключение к серверу (необходимо будет ввести PIN):
    $ ssh -I /usr/lib64/pkcs11/libisbc_pkcs11_main.so user@192.168.3.108
    The authenticity of host '192.168.3.108 (192.168.3.108)' can't be established.
    ED25519 key fingerprint is SHA256:6wjAK3qjuaASBQOHaBLH5mZMeHP6cAjws4HI1Xr3vZc.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.3.108' (ED25519) to the list of known hosts.
    Enter PIN for 'EsmartToken': 
    [user@host-15 ~]$
    

Для удобства на компьютере клиенте в файле ~/.ssh/config можно указать сокращение:

$ vim ~/.ssh/config
Host example
   Hostname 192.168.3.108
   PKCS11Provider /usr/lib64/pkcs11/libisbc_pkcs11_main.so

и вызывать просто:

$ssh example
Enter PIN for 'EsmartToken': 
Last login: Tue Feb 26 14:04:32 2019 from 192.168.3.106
[user@host-15 ~]$

Утилита PKIClientCli

Изменение ПИН-кода:

$ PKIClientCli changepin --pin 12345678 --newpin 00000000
Success

Изменение SO PIN (PIN ) для смарт карты или токена:

$ PKIClientCli changesopin --sopin 12345678 --newsopin 00000000

Разблокировка PIN-кода:

$PKIClientCli unlockpin --sopin 12345678 --newpin 00000000

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

$ PKIClientCli genkey --pin <PIN> --keytype 	<Key type>

где Key type: GOST, GOST:256, GOST:512 или RSA:бит (512/1024/ и т.д) [по умолчанию GOST:256] Например :

$ PKIClientCli genkey --pin 12345678

Просмотр объектов (verbose 1 — показать подробную информацию, 0 — краткую):

$ PKIClientCli list --pin 12345678 --verbose 1
private key; GOSTR3410-2001
	 label: 	my key
	 ID: 		0101
	 usage: 	SIGN, UNWRAP, 
public key; GOSTR3410-2001
	 label: 	my key
	 ID: 		0101
	 usage: 	VERIFY

Создание запроса на сертификат и импорт полученного сертификата

Создание запроса на сертификат:

$ PKIClientCli genkey --pin <PIN> --path <Путь к шаблону CSR> --csrpath <Путь к шаблону CSR> --pubkeyid <ID открытого ключа>
$ PKIClientCli csr --pin 12345678 --pubkeyid 7c4f962376cfe --path esmart.tmpl --csrpath esmart.csr
Success
# CSR template example for PKIClientCli
[DN]
# Distinguished Name section
#(ИНН)
1.2.643.3.131.1.1=395556660000
#(СНИЛС)
1.2.643.100.3=11223344556
#(Country)
2.5.4.6=RU
#(State)
2.5.4.8=39 Калининградская обл.
#(City)
2.5.4.7=Калининград
#(Street)
2.5.4.9=Пр-т Победы 14 кв.3
#(Organization)
2.5.4.10=
#(OU)
2.5.4.11=
#(Unstructured Name)
1.2.840.113549.1.9.2=
#(Title)
2.5.4.12=
#(email)
1.2.840.113549.1.9.1=ivanov@mail.mail
#(Given Name)
2.5.4.42=Иван Иванович
#(Surname)
2.5.4.4=Иванов
#(Common Name)
2.5.4.3=Иванов Иван Иванович
[ATTRIBUTES]
# CSR attributes section
#(challengePassword)
1.2.840.113549.1.9.7=
# GOST R 34.10-2012, 256 bit
1.2.643.7.1.1.2.2=FALSE
[EXTENSIONS]
# CSR extensiotns section
keyUsage=digitalSignature,keyEncipherment,nonRepudiation,dataEncipherment,keyAgreement=FALSE
# Extended Key Usage
#extKeyUsage=clientAuth,emailProtection=TRUE
2.5.29.37=DER:303006072A85030202220606082A8503030700010C06072A85030307080106082B0601050507030206082B06010505070304=TRUE
# Microsoft UPN
#1.3.6.1.4.1.311.20.2.3=user@local=FALSE
Примечание: Может понадобится перекодировать запрос на сертификат в формат PEM или Base64. Сделать это можно, выполнив команду:
$ openssl req -inform der -in esmart.csr -out esmart.pem


Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре. Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия:

  1. Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
  2. Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»:
    Ссылка «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»
  3. Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла test5.req и нажмите кнопку «Выдать»:
    Выдача запроса на сертификат
  4. Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя certnew.p7b):
    Ссылка «Загрузить цепочку сертификатов»
Примечание: Просмотреть содержимое файла esmart.pem можно, выполнив команду:
$ cat esmart.pem
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=


Подписанный сертификат необходимо записать на карту:

$ PKIClientCli importcert --pin 12345678 --path certnew.crt

Подписание документов

Создание присоединенной подписи

$ PKIClientCli pkcs7sign --pin 12345678 --inpath ./my_file.odt --outpath --certid 1234 --intcertids 5678,6789

где --inpath — путь к файлу для подписи; --outpath — путь к файлу, где будет храниться подпись; --certid — ID объекта сертификата пользователя; --intcertids — промежуточные идентификаторы объекта сертификата (через запятую). Создание отсоединенной подписи

$ PKIClientCli pkcs7sign --pin 12345678 --detached 1 --certid 1234 --intcertids 5678,6789
Please enter path to file to be signed: my_file.odt

Please enter path to file where signature will be stored: my_file.odt.p7s

КриптоПро

Электронный идентификатор ESMART Token ГОСТ поддерживается в СКЗИ «КриптоПро CSP» в качестве ключевого носителя. Для этого необходимо установить модуль поддержки.

# apt-get install isbc-cryptoproV5*

Просмотр доступных считывателей:

$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 34658307
GetProvParam(...PP_ENUMREADERS...) until it returns false
  Len    Byte  NickName/Name
_____________________________
 0x012a  0x03  ACS ACR38U-CCID 00 00
               ACS ACR38U-CCID 00 00
 0x012a  0x01  FLASH
               FLASH
 0x012a  0x00  HDIMAGE
               HDD key storage
Cycle exit when getting data. 3 items found. Level completed without problems.
Total: SYS: 0,000 sec USR: 0,070 sec UTC: 0,090 sec
[ErrorCode: 0x00000000]

Инициализация считывателя ACS ACR38U-CCID 00 00, где в параметре -add указано имя, которое было получено при просмотре доступных считывателей, в параметре -name указано удобное для обращения к считывателю имя, например, Esmart (под правами root):

# cpconfig -hardware reader -add 'ACS ACR38U-CCID 00 00' -name 'Esmart'
Adding new reader:
Nick name: ACS ACR38U-CCID 00 00
Name device: Esmart
Succeeded, code:0x0