JaCarta/PKI: различия между версиями

Материал из ALT Linux Wiki
м (про 4-ю версию КП - работает!)
(Указывать конкретную версию библиотеки сейчас уже не актуально.)
 
(не показано 13 промежуточных версий 4 участников)
Строка 1: Строка 1:
* ОС: Альт Рабочая станция 8.1 (Mate) x86_64
* Токен: JaCarta PKI (определено программой [http://www.aladdin-rd.ru/support/downloads/39103/ JaCarta Info])
* Токен: JaCarta PKI (определено программой [http://www.aladdin-rd.ru/support/downloads/39103/ JaCarta Info])
* Криптопровайдер: [https://www.cryptopro.ru/products/csp/downloads КриптоПро CSP]
 
= Значения PIN-кодов по умолчанию =
 
PIN-код пользователя по умолчанию (PIN): '''11111111'''
 
PIN-код администратора по умолчанию (SO-PIN): '''00000000'''
 
=Утилита pkcs11-tool=
Должны быть установлены пакеты:
<source lang="text" highlight="1"># apt-get install opensc</source>
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с JaСarta и с ее помощью «управлять» токенами JaCarta.
== Пакеты для работы с JaCarta PKI==
Установить библиотеку libjcPKCS11:
<source lang="text" highlight="1"># apt-get install libjcpkcs11</source>
{{Note|При работе с JaCarta PKI необходимо указывать путь до библиотеки libjcPKCS11-2.so:
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0</source>}}
{{Note|? можно использовать библиотеку libjcpkcs11-2.so (версия 2.1.3) из пакета libjcpkcs11:
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/libjcpkcs11-2.so</source>
("2.4 - актуальная для всех наших устройств. 2.1 имеет ряд недостатков и багов, которые в 2.4 исправили")}}
 
==Проверка работы JaCartaPKI==
 
Проверяем работу токена, он должен быть виден в списке:
<source lang="text" highlight="1">$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
  token label        : JaCarta#4E46001119145046
  token manufacturer : Aladdin R.D.
  token model        : JaCarta Laser
  token flags        : login required, token initialized, PIN initialized, readonly
  hardware version  : 1.1
  firmware version  : 1.0
  serial num        : 4E46001119145046
  pin min/max        : 4/10
</source>
 
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):
<source lang="text" highlight="1">$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta#4E43002311275331".
Please enter User PIN: </source>
 
Список объектов в определенном слоте:
<source lang="text" highlight="1">$ pkcs11-tool -Ol --slot-index 0 --module /usr/lib64/pkcs11/libjcPKCS11-2.so</source>
 
==Инициализация (форматирование) токена==
{{Attention|При инициализации вся информация с ключа будет удалена и необходимо будет заново записывать сертификат (ключ, электронную подпись)!}}
Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin):
<source lang="text" highlight="1">$ pkcs11-tool --init-token --label JacartaPKI --module /usr/lib64/pkcs11/libjcPKCS11-2.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
</source>
 
{{Note|Если используется комбинированная модель JaCarta-2 PKI/ГОСТ, необходимо в командах указывать --slot-index, т.к. по умолчанию используется слот с индексом 0}}
 
После форматирования ключа необходимо проинициализировать PIN пользователя, в выводе команды, в строке token flags, должен присутствовать флаг PIN initialized:
<source lang="text" highlight="1">$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Available slots:
Slot 1 (0x2ffff): ACS ACR38U-CCID 00 00
  token label        : JacartaPKI
  token manufacturer : Aladdin R.D.
  token model        : JaCarta Laser
  token flags        : login required, token initialized, readonly
  hardware version  : 1.0
  firmware version  : 1.0
  serial num        : 4E43002303465331
  pin min/max        : 4/10
</source>
==Иинициализация PIN-кода==
Для инициализации PIN-кода необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код):
<source lang="text" highlight="1">$ pkcs11-tool --init-pin -l --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Using slot 0 with a present token (0x1)
Logging in to "JacartaPKI".
Please enter SO PIN:
Please enter the new PIN:
Please enter the new PIN again:
User PIN successfully initialized
</source>
 
==Смена PIN-кода==
Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый):
<source lang="text" highlight="1">$ pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libjcPKCS11-2.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
</source>
==Удаление объекта==
Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно.
<source lang="text" highlight="1">$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/libjcPKCS11-2.so</source>
 
Типы объектов:
*privkey – закрытый ключ;
*pubkey – открытый ключ;
*cert – сертификат.
 
==Создание ключевой пары==
Генерация пары ключей:
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so --keypairgen --key-type rsa:1024 --login --id 2222 --label myrsakey
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta#4E46001119145046".
Please enter User PIN:
Key pair generated:
Private Key Object; RSA
  label:      myrsakey
  ID:        2222
  Usage:      decrypt, sign, unwrap
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)
 
Public Key Object; RSA 1024 bits
  label:      myrsakey
  ID:         2222
  Usage:      encrypt, verify, wrap
</source>
==Сертификаты==
===Получение сертификата===
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
===Запись сертификата===
Запись сертификата на токен:
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so --pin 11111111 --write-object ./cert.der --type cert --id 0101
Using slot 0 with a present token (0x1ffff)
Created certificate:
Certificate Object; type = X.509 cert
  label:     
  subject:    DN: CN=\xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2 \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x87, C=RU, L=\xD0\xB3. \xD0\x9A\xD0\xB0\xD0\xBB\xD0\xB8\xD0\xBD\xD0\xB8\xD0\xBD\xD0\xB3\xD1\x80\xD0\xB0\xD0\xB4/street=\xd0\x9f\xd1\x80-\xd1\x82 \xd0\x9f\xd0\xbe\xd0\xb1\xd0\xb5\xd0\xb4\xd1\x8b 14 \xD0\xBA\xD0\xB2. 3, emailAddress=ivanov@mail.mail
  ID:        0101
</source>
===Чтение сертификата===
Если на карте имеется сертификат, его можно прочитать командой:
<source lang="text" highlight="1">$ pkcs11-tool --read-object --type cert --login --id 0101 --module /usr/lib64/pkcs11/libjcPKCS11-2.so
</source>
 
ID сертификата можно посмотреть, выведя список объектов на токене:
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so -O
</source>
 
= КриптоПро =
Подробнее о КриптоПро: [[КриптоПро]]
{{note|Проверена работоспособность на всех доступных для скачивания с сайта КриптоПро версиях:
{{note|Проверена работоспособность на всех доступных для скачивания с сайта КриптоПро версиях:
* '''КриптоПро CSP 5.0 R3 - 5.0.12500 - OK'''
* '''КриптоПро CSP 5.0 R2 - 5.0.12000 - OK'''
* '''КриптоПро CSP 4.0 R4 - OK'''
* '''КриптоПро CSP 3.9 R2 - 3.9.8495 - OK'''
* '''КриптоПро CSP 3.9 R2 - 3.9.8495 - OK'''
* '''КриптоПро CSP 4.0 R2 - 4.0.9842 - OK'''
* '''КриптоПро CSP 4.0 R2 - 4.0.9842 - OK'''
* КриптоПро CSP 3.6 R4 - 3.6.7777 - не работает}}
* КриптоПро CSP 3.6 R4 - 3.6.7777 - не работает}}
==== Установка КриптоПро ====
== Установка КриптоПро ==
1. Установите метапакет {{pkg|cryptopro-preinstall-full}} для установки всех необходимых зависимостей:
1. Установите метапакет {{pkg|cryptopro-preinstall-full}} для установки всех необходимых зависимостей:
  # apt-get install cryptopro-preinstall-full
  # apt-get install cryptopro-preinstall-full
Строка 16: Строка 158:
# sh install.sh
# sh install.sh
# apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1* cprocsp-rdr-jacarta* \
# apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1* cprocsp-rdr-jacarta* \
lsb-cprocsp-rdr* cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11*
cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* lsb-cprocsp-rdr-64*
</pre>
</pre>


==== Установка драйверов и ПО JaCarta ====
{{Note|Для 32-битной версии вместо последнего пакета — lsb-cprocsp-rdr-4*}}
1. Скачать пакет с ПО и драйверами с официального сайта aladdin-rd.ru - http://www.aladdin-rd.ru/support/downloads/39875/


2. Распаковать архив и установить из него два пакета {{pkg|idprotectclient}} и {{pkg|idprotectclientlib}} (x86_64)
{{Attention|Для '''КриптоПро CSP 3.9''':
# apt-get install idprotectclient*
 
3. Для работы данных утилит необходима запущенная служба pcscd (для работы КриптоПро с Джакартой - не нужна????????????):
# service pcscd start
 
4. Из меню доступны программы: пункт Athena IDProtect Client:
* IDProtect Manager - просмотр информации о токене, импорт/экспорт сертификатов
* IDProtec PINTool - смена ПИН-кодов
 
==== Обновление модуля поддержки JaCarta для КриптоПро ====
{{Attention|Для '''КриптоПро CSP 4.0 R2''' обновление модуля не требуется, переходите сразу к пункту 3.}}
1. Скачайте МП с сайта Аладдина: http://www.aladdin-rd.ru/support/downloads/29369/
1. Скачайте МП с сайта Аладдина: http://www.aladdin-rd.ru/support/downloads/29369/


Строка 39: Строка 169:
  # apt-get install cprocsp-rdr-jacarta-3.6.1-3.6.404-1.x86_64.rpm
  # apt-get install cprocsp-rdr-jacarta-3.6.1-3.6.404-1.x86_64.rpm


3. Желательно перезагрузить компьютер. После этого проверяем доступность JaCarta в КриптоПро:
3. Желательно перезагрузить компьютер. }}


<source lang="text" highlight=1,16>
==Управление считывателями==
$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
 
CSP (Type:75) v3.9.8010 KC1 Release Ver:3.9.8495 OS:Linux CPU:AMD64 FastCode:READY:AVX.
Просмотр доступных считывателей:
CryptAcquireContext succeeded.HCRYPTPROV: 6726147
<source lang="text" highlight="1">$ 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: 32655395
GetProvParam(...PP_ENUMREADERS...) until it returns false
GetProvParam(...PP_ENUMREADERS...) until it returns false
   Len    Byte  NickName/Name
   Len    Byte  NickName/Name
_____________________________
_____________________________
  0x012a  0x72 Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
  0x012a  0x03 Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
               All PC/SC readers
               Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
  0x012a  0x58 FLASH
  0x012a  0x01 FLASH
               FLASH
               FLASH
  0x012a  0x18 HDIMAGE
  0x012a  0x00 HDIMAGE
               Структура дискеты на жестком диске
               HDD key storage
Cycle exit when getting data. 3 items found. Level completed without problems.
Cycle exit when getting data. 3 items found. Level completed without problems.
Total: SYS: 0,010 sec USR: 0,180 sec UTC: 0,200 sec
Total: SYS: 0,030 sec USR: 0,030 sec UTC: 0,070 sec
[ErrorCode: 0x00000000]</source>
 
Инициализация считывателя HDIMAGE (под правами root):
<source lang="text" highlight="1"># /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add 'Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00' -name 'Jacarta'
Adding new reader:
Nick name: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
Name device: Jacarta
Succeeded, code:0x0</source>
 
Создание контейнера на токене/смарт-карте:
<source lang="text" highlight="1">$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta'
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 21797187
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "Jacarta"
Signature key is not available.
Attempting to create a signature key...
a signature key created.
Exchange key is not available.
Attempting to create an exchange key...
an exchange key created.
Keys in container:
  signature key
  exchange key
Extensions:
  OID: 1.2.643.2.2.37.3.9
  PrivKey: Not specified - 27.05.2020 18:54:04 (UTC)
 
  OID: 1.2.643.2.2.37.3.10
  PrivKey: Not specified - 27.05.2020 18:54:35 (UTC)
Total: SYS: 0,210 sec USR: 0,200 sec UTC: 45,550 sec
[ErrorCode: 0x00000000]</source>
При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:
 
При установленном пакете {{pkg|cprocsp-rdr-gui-gtk}} будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:
 
[[Изображение:Cryptopro-newkeyset-ru.png|Генерация случайной последовательности]]
 
{{note|Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры.}}
После этого необходимо предъявить PIN-код пользователя:
 
[[Изображение:Cryptopro-newkeyset-pin.png|Запрос пин-кода для аутентификации на носителе]]
 
После указания PIN-кода снова будет предложено перемещать указатель мыши.
{{note|В КриптоПРо 5, если используется комбинированная модель JaCarta-2 PKI/ГОСТ, можно будет выбрать выбрать способ создания контейнера.
 
Создание неизвлекаемого контейнера:
 
[[Файл:Jacarta_newcont.png|Выбор носителя для создания контейнера]]
 
В этом случае будет использована встроенная криптография носителя. В этом случае см. [[JaCarta/ГОСТ]]
 
Создание обычного контейнера:
 
[[Файл:Jacarta_newcont2.png|Выбор носителя для создания контейнера]]
}}
 
Проверить наличие контейнеров можно с помощью команды:
 
<source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 16152611
\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta
OK.
Total: SYS: 0,090 sec USR: 0,040 sec UTC: 4,470 sec
[ErrorCode: 0x00000000]</source>
Просмотр подробной информации о контейнере:
 
<source lang="text" highlight="1">$ csptestf -keyset -container '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' -info</source>
 
Удалить контейнер можно с помощью команды:
 
<source lang="text" highlight="1">$ csptestf -keyset -deletekeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta'</source>
 
== Управление сертификатами ==
=== Создание запроса на получение сертификата ===
Создание запроса на получение сертификата средствами КриптоПро:
<source lang="text" highlight="1">$ cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr</source>
Например:
<source lang="text" highlight="1-5">
cryptcp -creatrqst \
-dn "E=ivanov@mail.mail,CN=Иванов Иван Иванович,SN=Иванов,G=Иван Иванович,C=RU,L=Калининград,ST=39 Калининградская обл.,street=Пр-т Победы 14 кв.3" \
-provtype 80 -nokeygen \
-cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta.req
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Запрос успешно создан и сохранен в файле.
[ErrorCode: 0x00000000]
[ErrorCode: 0x00000000]
$ csptest -keyset -enum_cont -fqcn -verifyc
</source>
CSP (Type:75) v3.9.8010 KC1 Release Ver:3.9.8495 OS:Linux CPU:AMD64 FastCode:READY:AVX.
 
AcquireContext: OK. HCRYPTPROV: 6726147
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\9c6989cc-7b35-4186-9a06-96c67d406434
 
OK.
Запись сертификата клиента в контейнер:
Total: SYS: 0,040 sec USR: 0,220 sec UTC: 3,030 sec
<source lang="text" highlight="1">$ certmgr -inst -file jacarta.cer -store uMy -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' -inst_to_cont
Installing:
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : E=ivanov@mail.mail
Serial              : 0x120032E7B852F4CC6681F6887500000032E7B8
SHA1 Hash          : 33ba9e77ead5e56c01c71c32e53241b8904f8688
SubjKeyID          : 860b17ff1114be40161396a5d536ce3dd19bb2f7
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 27/02/2019  18:56:15 UTC
Not valid after    : 27/05/2019  19:06:15 UTC
PrivateKey Link    : No                 
CA cert URL        : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================
 
</source>
 
Запись сертификата УЦ:
 
<source lang="text" highlight="1"># /opt/cprocsp/bin/amd64/certmgr -inst -file cc.cer -store uRoot
Installing:  
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash          : 046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID          : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after    : 05/08/2019  13:54:03 UTC
PrivateKey Link    : No                 
=============================================================================
 
[ErrorCode: 0x00000000]
[ErrorCode: 0x00000000]
</source>
</source>
{{note|Если данные команды не работают, то либо перейдите в каталог с КриптоПро - {{path|/opt/cprocsp/bin/amd64/}} - и запускайте команды оттуда (добавив './' перед именем команды), либо выполните перед их использованием следующую команду: <source lang="Bash">export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"</source>}}


== ПО JaCarta (Athena IDProtect) ==
=== Установка ПО JaCarta ===
#Скачать пакет с ПО и драйверами с официального сайта aladdin-rd.ru — http://www.aladdin-rd.ru/support/downloads/39875/
#Распаковать архив и установить из него два пакета {{pkg|idprotectclient}} и {{pkg|idprotectclientlib}} (x86_64):
#:apt-get install idprotectclient*.x86_64.rpm
#Из меню доступны программы (пункт «Athena IDProtect Client»):
* IDProtect Manager — просмотр информации о токене, импорт/экспорт сертификатов:
*: [[Файл:IDP_manager.png|IDProtect Manager]]
* IDProtec PINTool — смена ПИН-кодов:
*: [[Файл:IDP_pintool.png|IDProtect PINTool]]
[[Категория:HOWTO]]
[[Категория:HOWTO]]
[[Категория:Криптография]]
[[Категория:Криптография]]

Текущая версия от 12:44, 22 ноября 2022

  • Токен: JaCarta PKI (определено программой JaCarta Info)

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

PIN-код пользователя по умолчанию (PIN): 11111111

PIN-код администратора по умолчанию (SO-PIN): 00000000

Утилита pkcs11-tool

Должны быть установлены пакеты:

# apt-get install opensc

В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с JaСarta и с ее помощью «управлять» токенами JaCarta.

Пакеты для работы с JaCarta PKI

Установить библиотеку libjcPKCS11:

# apt-get install libjcpkcs11
Примечание: При работе с JaCarta PKI необходимо указывать путь до библиотеки libjcPKCS11-2.so:
--module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Примечание: ? можно использовать библиотеку libjcpkcs11-2.so (версия 2.1.3) из пакета libjcpkcs11:
--module /usr/lib64/pkcs11/libjcpkcs11-2.so
("2.4 - актуальная для всех наших устройств. 2.1 имеет ряд недостатков и багов, которые в 2.4 исправили")


Проверка работы JaCartaPKI

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

$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
  token label        : JaCarta#4E46001119145046
  token manufacturer : Aladdin R.D.
  token model        : JaCarta Laser
  token flags        : login required, token initialized, PIN initialized, readonly
  hardware version   : 1.1
  firmware version   : 1.0
  serial num         : 4E46001119145046
  pin min/max        : 4/10

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

$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta#4E43002311275331".
Please enter User PIN:

Список объектов в определенном слоте:

$ pkcs11-tool -Ol --slot-index 0 --module /usr/lib64/pkcs11/libjcPKCS11-2.so

Инициализация (форматирование) токена

Внимание! При инициализации вся информация с ключа будет удалена и необходимо будет заново записывать сертификат (ключ, электронную подпись)!

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

$ pkcs11-tool --init-token --label JacartaPKI --module /usr/lib64/pkcs11/libjcPKCS11-2.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
Примечание: Если используется комбинированная модель JaCarta-2 PKI/ГОСТ, необходимо в командах указывать --slot-index, т.к. по умолчанию используется слот с индексом 0


После форматирования ключа необходимо проинициализировать PIN пользователя, в выводе команды, в строке token flags, должен присутствовать флаг PIN initialized:

$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so
Available slots:
Slot 1 (0x2ffff): ACS ACR38U-CCID 00 00
  token label        : JacartaPKI
  token manufacturer : Aladdin R.D.
  token model        : JaCarta Laser
  token flags        : login required, token initialized, readonly
  hardware version   : 1.0
  firmware version   : 1.0
  serial num         : 4E43002303465331
  pin min/max        : 4/10

Иинициализация PIN-кода

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

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

Смена PIN-кода

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

$ pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libjcPKCS11-2.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

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

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

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

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

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

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

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

$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so --keypairgen --key-type rsa:1024 --login --id 2222 --label myrsakey
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta#4E46001119145046".
Please enter User PIN: 
Key pair generated:
Private Key Object; RSA 
  label:      myrsakey
  ID:         2222
  Usage:      decrypt, sign, unwrap
warning: PKCS11 function C_GetAttributeValue(ALWAYS_AUTHENTICATE) failed: rv = CKR_ATTRIBUTE_TYPE_INVALID (0x12)

Public Key Object; RSA 1024 bits
  label:      myrsakey
  ID:         2222
  Usage:      encrypt, verify, wrap

Сертификаты

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

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

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

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

$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so --pin 11111111 --write-object ./cert.der --type cert --id 0101
Using slot 0 with a present token (0x1ffff)
Created certificate:
Certificate Object; type = X.509 cert
  label:      
  subject:    DN: CN=\xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2 \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd \xd0\x98\xd0\xb2\xd0\xb0\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb8\xd1\x87, C=RU, L=\xD0\xB3. \xD0\x9A\xD0\xB0\xD0\xBB\xD0\xB8\xD0\xBD\xD0\xB8\xD0\xBD\xD0\xB3\xD1\x80\xD0\xB0\xD0\xB4/street=\xd0\x9f\xd1\x80-\xd1\x82 \xd0\x9f\xd0\xbe\xd0\xb1\xd0\xb5\xd0\xb4\xd1\x8b 14 \xD0\xBA\xD0\xB2. 3, emailAddress=ivanov@mail.mail
  ID:         0101

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

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

$ pkcs11-tool --read-object --type cert --login --id 0101 --module /usr/lib64/pkcs11/libjcPKCS11-2.so

ID сертификата можно посмотреть, выведя список объектов на токене:

$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so -O

КриптоПро

Подробнее о КриптоПро: КриптоПро

Примечание: Проверена работоспособность на всех доступных для скачивания с сайта КриптоПро версиях:
  • КриптоПро CSP 5.0 R3 - 5.0.12500 - OK
  • КриптоПро CSP 5.0 R2 - 5.0.12000 - OK
  • КриптоПро CSP 4.0 R4 - OK
  • КриптоПро CSP 3.9 R2 - 3.9.8495 - OK
  • КриптоПро CSP 4.0 R2 - 4.0.9842 - OK
  • КриптоПро CSP 3.6 R4 - 3.6.7777 - не работает

Установка КриптоПро

1. Установите метапакет cryptopro-preinstall-full для установки всех необходимых зависимостей:

# apt-get install cryptopro-preinstall-full

2. Скачайте архив с RPM-пакетами с оф.сайта КриптоПро - linux-amd64.tgz

3. Выполните под рутом из папки с распакованным архивом следующие команды:

# sh install.sh
# apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1* cprocsp-rdr-jacarta* \
 cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* lsb-cprocsp-rdr-64*
Примечание: Для 32-битной версии вместо последнего пакета — lsb-cprocsp-rdr-4*


Внимание! Для КриптоПро CSP 3.9:

1. Скачайте МП с сайта Аладдина: http://www.aladdin-rd.ru/support/downloads/29369/

2. Установите RPM-пакет из архива:

# apt-get install cprocsp-rdr-jacarta-3.6.1-3.6.404-1.x86_64.rpm
3. Желательно перезагрузить компьютер.


Управление считывателями

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

$ 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: 32655395
GetProvParam(...PP_ENUMREADERS...) until it returns false
  Len    Byte  NickName/Name
_____________________________
 0x012a  0x03  Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
               Aladdin R.D. JaCarta [SCR Interface] (000000000000) 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,030 sec USR: 0,030 sec UTC: 0,070 sec
[ErrorCode: 0x00000000]

Инициализация считывателя HDIMAGE (под правами root):

# /opt/cprocsp/sbin/amd64/cpconfig -hardware reader -add 'Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00' -name 'Jacarta'
Adding new reader:
Nick name: Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00
Name device: Jacarta
Succeeded, code:0x0

Создание контейнера на токене/смарт-карте:

$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta'
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 21797187
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "Jacarta"
Signature key is not available.
Attempting to create a signature key...
a signature key created.
Exchange key is not available.
Attempting to create an exchange key...
an exchange key created.
Keys in container:
  signature key
  exchange key
Extensions:
  OID: 1.2.643.2.2.37.3.9
  PrivKey: Not specified - 27.05.2020 18:54:04 (UTC)

  OID: 1.2.643.2.2.37.3.10
  PrivKey: Not specified - 27.05.2020 18:54:35 (UTC)
Total: SYS: 0,210 sec USR: 0,200 sec UTC: 45,550 sec
[ErrorCode: 0x00000000]

При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:

При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:

Генерация случайной последовательности

Примечание: Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры.

После этого необходимо предъявить PIN-код пользователя:

Запрос пин-кода для аутентификации на носителе

После указания PIN-кода снова будет предложено перемещать указатель мыши.

Примечание: В КриптоПРо 5, если используется комбинированная модель JaCarta-2 PKI/ГОСТ, можно будет выбрать выбрать способ создания контейнера.

Создание неизвлекаемого контейнера:

Выбор носителя для создания контейнера

В этом случае будет использована встроенная криптография носителя. В этом случае см. JaCarta/ГОСТ

Создание обычного контейнера:

Выбор носителя для создания контейнера


Проверить наличие контейнеров можно с помощью команды:

$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 16152611
\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta
OK.
Total: SYS: 0,090 sec USR: 0,040 sec UTC: 4,470 sec
[ErrorCode: 0x00000000]

Просмотр подробной информации о контейнере:

$ csptestf -keyset -container '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' -info

Удалить контейнер можно с помощью команды:

$ csptestf -keyset -deletekeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta'

Управление сертификатами

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

Создание запроса на получение сертификата средствами КриптоПро:

$ cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr

Например:

cryptcp -creatrqst \
-dn "E=ivanov@mail.mail,CN=Иванов Иван Иванович,SN=Иванов,G=Иван Иванович,C=RU,L=Калининград,ST=39 Калининградская обл.,street=Пр-т Победы 14 кв.3" \
-provtype 80 -nokeygen \
-cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta.req
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Запрос успешно создан и сохранен в файле.
[ErrorCode: 0x00000000]

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

Запись сертификата клиента в контейнер:

$ certmgr -inst -file jacarta.cer -store uMy -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\Jacarta' -inst_to_cont
Installing: 
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=ivanov@mail.mail
Serial              : 0x120032E7B852F4CC6681F6887500000032E7B8
SHA1 Hash           : 33ba9e77ead5e56c01c71c32e53241b8904f8688
SubjKeyID           : 860b17ff1114be40161396a5d536ce3dd19bb2f7
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before    : 27/02/2019  18:56:15 UTC
Not valid after     : 27/05/2019  19:06:15 UTC
PrivateKey Link     : No                  
CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================

Запись сертификата УЦ:

# /opt/cprocsp/bin/amd64/certmgr -inst -file cc.cer -store uRoot
Installing: 
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash           : 046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID           : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after     : 05/08/2019  13:54:03 UTC
PrivateKey Link     : No                  
=============================================================================

[ErrorCode: 0x00000000]

ПО JaCarta (Athena IDProtect)

Установка ПО JaCarta

  1. Скачать пакет с ПО и драйверами с официального сайта aladdin-rd.ru — http://www.aladdin-rd.ru/support/downloads/39875/
  2. Распаковать архив и установить из него два пакета idprotectclient и idprotectclientlib (x86_64):
    apt-get install idprotectclient*.x86_64.rpm
  3. Из меню доступны программы (пункт «Athena IDProtect Client»):
  • IDProtect Manager — просмотр информации о токене, импорт/экспорт сертификатов:
    IDProtect Manager
  • IDProtec PINTool — смена ПИН-кодов:
    IDProtect PINTool