JaCarta/ГОСТ: различия между версиями
(Новая страница: «{{Stub}} * Токен: JaCarta-2 ГОСТ библиотека libjcPKCS11-2.so.2.4.0 обеспечивает взаимодействие с крип…») |
|||
(не показаны 22 промежуточные версии 3 участников) | |||
Строка 6: | Строка 6: | ||
криптопровайдер токена осуществляет функции подписи секретным ключом передаваемых ему данных; секретный ключ при этом не покидает пределов токена; | криптопровайдер токена осуществляет функции подписи секретным ключом передаваемых ему данных; секретный ключ при этом не покидает пределов токена; | ||
= Значения PIN-кодов по умолчанию = | |||
PIN-код пользователя по умолчанию (PIN): '''1234567890''' | |||
PIN-код администратора (SO-PIN): '''не предусмотрен''' | |||
=Утилита pkcs11-tool= | |||
Должны быть установлены пакеты: | |||
<source lang="text" highlight="1"># apt-get install opensc</source> | |||
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с Jacarta ГОСТ 2.0 и с ее помощью «управлять» токенами JaCarta. | |||
== Пакеты для работы с JaCarta-2 ГОСТ== | |||
Установить утилиту для работы с аппаратными токенами Jacarta ГОСТ и библиотеку libjcPKCS11: | Установить утилиту для работы с аппаратными токенами Jacarta ГОСТ и библиотеку libjcPKCS11: | ||
<source lang="text" highlight="1"># apt-get install jacarta-tools jcPKCS11-2</source> | <source lang="text" highlight="1"># apt-get install jacarta-tools jcPKCS11-2</source> | ||
{{Note|При работе с JaCarta-2 ГОСТ необходимо указывать путь до библиотеки libjcPKCS11-2.so: | |||
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0</source>}} | |||
==Проверка работы JaCarta-2 ГОСТ== | |||
Проверяем работу токена, он должен быть виден в списке: | |||
<source lang="text" highlight="1">$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | |||
Available slots: | |||
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] 00 00 | |||
token label : JaCarta ГОСТ | |||
token manufacturer : Aladdin R.D. | |||
token model : JaCarta GOST 2.0 | |||
token flags : login required, rng, token initialized, PIN initialized, other flags=0x800 | |||
hardware version : 1.0 | |||
firmware version : 2.53 | |||
serial num : 4E3900016432304C | |||
pin min/max : 6/32 | |||
</source> | |||
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена): | |||
<source lang="text" highlight="1">$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | |||
Using slot 0 with a present token (0x1ffff) | |||
Logging in to "JaCarta-2 GOST". | |||
Please enter User PIN: | |||
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 | |||
Public Key Object; GOSTR3410 | |||
PARAMS OID: 06072a850302022301 | |||
VALUE: 5c6a95785381c6e97f188b5c1bda5b452984c57846b6439455847b6852078138 | |||
0cf4b6e0bae04ce05234e18c608613a839945056875fd3f38fb32ae3130bc705 | |||
label: key | |||
ID: 0123 | |||
Usage: verify | |||
Private Key Object; GOSTR3410 | |||
PARAMS OID: 06072a850302022301 | |||
label: key | |||
ID: 0123 | |||
Usage: sign | |||
Public Key Object; RSA 0 bits | |||
label: | |||
ID: 56504b4f5f4944 | |||
Usage: verify, wrap | |||
</source> | |||
==Инициализация токена== | |||
{{Note|Если используется комбинированная модель JaCarta-2 PKI/ГОСТ, необходимо в командах указывать --slot-index, т.к. по умолчанию используется слот с индексом 0}} | |||
{{Attention|Если были забыты (заблокированы) пароли пользователя и администратора, то ключ JaCarta полностью теряет свой функционал, работать с ним больше не получится}} | |||
==Смена PIN-кода== | |||
Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый): | |||
<source lang="text" highlight="1">$ pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | |||
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> | |||
==Разблокировка PIN-кода== | |||
При разблокировке PIN-кода, только сбрасывается счётчик попыток ввода. Т.е., если пароль пользователя неизвестен, то даже с помощью пароля администратора, нельзя получить доступ к ключу. В данном случае поможет инициализация. | |||
==Удаление объекта== | |||
Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно. | |||
<source lang="text" highlight="1">$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0</source> | |||
Типы объектов: | |||
*privkey – закрытый ключ; | |||
*pubkey – открытый ключ; | |||
*cert – сертификат. | |||
==Создание ключевой пары== | |||
Генерация пары ключей: | Генерация пары ключей: | ||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --login --pin 1234567890 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key" | <source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --login --pin 1234567890 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key" | ||
Строка 29: | Строка 114: | ||
Usage: verify | Usage: verify | ||
</source> | </source> | ||
==Сертификаты== | |||
===Создание запроса на сертификат=== | |||
Формирование запроса на сертификат: | Формирование запроса на сертификат: | ||
<source lang="text" highlight="1">$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | <!-- | ||
Желательно воздерживаться от использования в примерах любых приватных OID. | |||
Например, таких как: | |||
- 1.2.643.2.2.34.6 - приватный OID ПО "КриптоПро УЦ" http://oidref.com/1.2.643.2.2.34 - подробнее: www.cryptopro.ru/forum2/default.aspx?g=posts&t=1619 | |||
- 1.2.643.3.7.0.1.12, 1.2.643.3.7.8.1 - приватные OID, которые назначает УЦ "СКБ Контур" https://oid.iitrust.ru/oid_search/16/ при выпуске сертификатов | |||
Примечание: 1.2.643.3.7.8.1 (Квалифицированный сертификат) вносит особую путаницу, когда его пытаются использовать вне "СКБ Контур". | |||
Например, можно выпустить самоподписанный сертификат с OID 1.2.643.3.7.8.1, но без удовлетворения требований RFC4491 | |||
https://datatracker.ietf.org/doc/html/draft-deremin-rfc4491-bis-06#section-5 | |||
и без присутствия доверенного УЦ в цепочке сертификатов - такой сертификат не будет "квалифицированным". | |||
Другие примеры: | |||
- https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=97465#post97465 | |||
- https://fksrf.pro/info/196.html#rd4 | |||
--> | |||
<source lang="text" highlight="1-15">$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr5.der \ | |||
--pin=1234567890 \ | |||
--dn "INN=395556660000" \ | |||
--dn "SNILS=11223344556" \ | |||
--dn "emailAddress=ivanov@mail.mail" \ | |||
--dn "CN=Иванов Иван Иванович" \ | |||
--dn "SN=Иванов" \ | |||
--dn "2.5.4.42=Иван Иванович" \ | |||
--dn "C=RU" \ | |||
--dn "L=Калининград" \ | |||
--dn "ST=39 Калининградская обл." \ | |||
--dn "street=Пр-т Победы 14 кв.3" \ | |||
--ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \ | |||
--ext "extendedKeyUsage=clientAuth,emailProtection" \ | |||
--ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST" | |||
Trying to load /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | Trying to load /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | ||
jcPKCS11-2 library initialized. | jcPKCS11-2 library initialized. | ||
Строка 50: | Строка 164: | ||
</source> | </source> | ||
Можно использовать OID для формирования запроса на сертификат: | |||
<source lang="text" highlight="1-15">$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr.der \ | |||
--pin=1234567890 \ | |||
--dn "1.2.643.3.131.1.1=391506390000" \ | |||
--dn "1.2.643.100.3=11223344556" \ | |||
--dn "1.2.840.113549.1.9.1=ivanov@mail.mail" \ | |||
--dn "2.5.4.3=Иванов Иван Иванович" \ | |||
--dn "2.5.4.4=Иванов" \ | |||
--dn "2.5.4.42=Иван Иванович" \ | |||
--dn "2.5.4.6=RU" \ | |||
--dn "2.5.4.7=Калининград" \ | |||
--dn "2.5.4.8=39 Калининградская обл." \ | |||
--dn "2.5.4.9=Пр-т Победы 14 кв.3" \ | |||
--ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \ | |||
--ext "extendedKeyUsage=1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4" \ | |||
--ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST" | |||
</source> | |||
===Получение сертификата=== | |||
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре. | |||
===Запись сертификата=== | |||
Запись сертификата на токен: | Запись сертификата на токен: | ||
<source lang="text" highlight="1">$ pkcs11-tool | <source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --pin 1234567890 --write-object ./cert.der --type cert --id 0101 | ||
Using slot 0 with a present token (0x1ffff) | Using slot 0 with a present token (0x1ffff) | ||
Created certificate: | Created certificate: | ||
Строка 59: | Строка 194: | ||
ID: 0101 | ID: 0101 | ||
</source> | </source> | ||
===Чтение сертификата=== | |||
Если на карте имеется сертификат, его можно прочитать командой: | |||
<source lang="text" highlight="1">$ pkcs11-tool --read-object --type cert --login --id 0101 --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 | |||
</source> | |||
ID сертификата можно посмотреть, выведя список объектов на токене: | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -O | |||
</source> | |||
=КриптоПро= | |||
Электронный идентификатор JaCarta ГОСТ поддерживается в СКЗИ «КриптоПро CSP» в качестве ключевого носителя. Для этого необходимо установить модуль поддержки (команда выполняется из папки с распакованным архивом КриптоПро см. [[КриптоПро#Установка]]): | |||
<source lang="text" highlight="1"># apt-get install cprocsp-rdr-jacarta*</source> | |||
==Управление считывателями== | |||
Просмотр доступных считывателей: | |||
<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: 34658307 | |||
GetProvParam(...PP_ENUMREADERS...) until it returns false | |||
Len Byte NickName/Name | |||
_____________________________ | |||
0x012a 0x03 Aladdin R.D. JaCarta [SCR Interface] 00 00 | |||
Aladdin R.D. JaCarta [SCR Interface] 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]</source> | |||
Инициализация считывателя Aladdin R.D. JaCarta [SCR Interface] 00 00, где в параметре -add указано имя, которое было получено при просмотре доступных считывателей, в параметре -name указано удобное для обращения к считывателю имя, например, JaCarta (под правами root): | |||
<source lang="text" highlight="1"># cpconfig -hardware reader -add 'Aladdin R.D. JaCarta [SCR Interface] 00 00' -name 'JaCarta' | |||
Adding new reader: | |||
Nick name: Aladdin R.D. JaCarta [SCR Interface] 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] 00 00\jacarta_2012' | |||
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX. | |||
AcquireContext: OK. HCRYPTPROV: 17975555 | |||
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP | |||
Container name: "jacarta_2012" | |||
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 - 25.02.2022 11:48:48 (UTC) | |||
OID: 1.2.643.2.2.37.3.10 | |||
PrivKey: Not specified - 25.02.2022 11:49:13 (UTC) | |||
Total: SYS: 0,060 sec USR: 0,120 sec UTC: 48,390 sec | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
{{note|Если используется комбинированная модель JaCarta-2 PKI/ГОСТ, можно будет выбрать способ создания контейнера. | |||
Создание неизвлекаемого контейнера: | |||
[[Файл:Jacarta_newcont.png|Выбор носителя для создания контейнера]] | |||
В этом случае будет использована встроенная криптография носителя. | |||
Создание обычного контейнера: | |||
[[Файл:Jacarta_newcont2.png|Выбор носителя для создания контейнера]] | |||
В этом случае см. [[JaCarta/PKI]]}} | |||
Будет необходимо предъявить PIN-код пользователя: | |||
[[Файл:CryptoPro5_jacarta_pin.png|Запрос PIN-кода пользователя для аутентификации на носителе]] | |||
{{Attention|Если используется комбинированная модель JaCarta-2 PKI/ГОСТ: при выборе неизвлекаемого контейнера запрашивается PIN JaCarta ГОСТ, | |||
во втором случае JaCarta PKI}} | |||
Проверить наличие контейнеров можно с помощью команды: | |||
<source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251 | |||
CSP (Type:80) v5.0.10001 KC2 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX. | |||
AcquireContext: OK. HCRYPTPROV: 22886451 | |||
\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012 | |||
OK. | |||
Total: SYS: 0,010 sec US | |||
</source> | |||
Просмотр подробной информации о контейнере: | |||
<source lang="text" highlight="1">$ csptestf -keyset -container '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -info</source> | |||
Удалить контейнер можно с помощью команды: | |||
<source lang="text" highlight="1">$ csptest -keyset -deletekeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' | |||
</source> | |||
==Управление сертификатами== | |||
===Создание запроса на получение сертификата=== | |||
Создание запроса на получение сертификата средствами КриптоПро (будет необходимо предъявить PIN-код пользователя): | |||
<source lang="text" highlight="1">$ cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr</source> | |||
Например, создать запрос на физическое лицо, используя открытый ключ, сгенерированный в контейнере jacarta_2012 криптопровайдером «Crypto-Pro GOST R 34.10-2012 KC1 CSP» (тип — 80) и сохранить его в файл jacarta2012.req, назначение ключа — аутентификация и защита электронной почты: | |||
<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] 00 00\jacarta_2012' \ | |||
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta2012.req</source> | |||
Тот же запрос, используя OID (будет необходимо предъявить PIN-код пользователя): | |||
<source lang="text" highlight="1-5">$ cryptcp -creatrqst \ | |||
-dn "2.5.4.3=Иванов Иван Иванович,2.5.4.4=Иванов,2.5.4.42=Иван Иванович,1.2.840.113549.1.9.1=ivanov@mail.mail,2.5.4.6=RU,2.5.4.8=39 Калининградская обл.,2.5.4.7=Калининград,2.5.4.9=Пр-т Победы 14 кв.3,1.2.643.3.131.1.1=102301111222,1.2.643.100.3=11223344556" \ | |||
-provtype 80 -nokeygen \ | |||
-cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' \ | |||
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta2012.req | |||
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Запрос успешно создан и сохранен в файле. | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
===Получение сертификата в УЦ и его установка=== | |||
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре. | |||
Запись сертификата клиента в контейнер: | |||
<source lang="text" highlight="1">$ cryptcp -instcert -provtype 80 -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -ku -askpin certnew.cer</source> | |||
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище uMy: | |||
<source lang="text" highlight="1">certmgr -inst -file certnew.cer -store uMy -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -inst_to_cont | |||
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018. | |||
program for managing certificates, CRLs and stores | |||
WARNING: Legacy parameter: "-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 : CN=Иванов Иван Иванович, SN=Иванов, G=Иван Иванович, E=ivanov@mail.mail, C=RU, S=39 Калининградская обл., L=Калининград, STREET=Пр-т Победы 14 кв.3, INN=102301111222, SNILS=11223344556 | |||
Serial : 0x120032E69FDDCE99C696B58F0B00000032E69F | |||
SHA1 Hash : 84c33d2d04e9bf89a58c3b312f0f818d07bca0ff | |||
SubjKeyID : 55e495cc2491d57c05153a41439039f32da17e14 | |||
Signature Algorithm : ГОСТ Р 34.11/34.10-2001 | |||
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits) | |||
Not valid before : 27/02/2019 13:41:47 UTC | |||
Not valid after : 27/05/2019 13:51:47 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 | |||
============================================================================= | |||
[ErrorCode: 0x00000000]</source> | |||
Установка сертификата удостоверяющего центра: | |||
<source lang="text" highlight="1">$ certmgr -inst -file uc.p7b -store uRoot | |||
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018. | |||
program for managing certificates, CRLs and stores | |||
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]</source> | |||
=== Просмотр сертификатов === | |||
Для просмотра установленных сертификатов можно воспользоваться командой: | |||
<source lang="text" highlight="1">$ certmgr -list</source> | |||
==Создание и проверка подписи== | |||
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла: | |||
<source lang="text" highlight="1">$ cryptcp -sign -dn E=ivanov@mail.mail -der my_file.odt | |||
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Будет использован следующий сертификат: | |||
Субъект:11223344556, 102301111222, Пр-т Победы 14 кв.3, Калининград, 39 Калининградская обл., RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович | |||
Действителен с 27.02.2019 13:41:47 по 27.05.2019 13:51:47 | |||
Цепочки сертификатов проверены. | |||
Папка './': | |||
my_file.odt... Подпись данных... | |||
Подписанное сообщение успешно создано. | |||
[ErrorCode: 0x00000000]</source> | |||
На выходе появится файл {{path|my_file.odt.sig}}, содержащий как сам подписываемый файл, так и электронную подпись. | |||
Для проверки прикреплённой подписи выполните команду: | |||
<source lang="text" highlight="1">$ cryptcp -verify my_file.odt.sig | |||
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Найдено сертификатов: 2 | |||
Цепочки сертификатов проверены. | |||
Папка './': | |||
my_file.odt.sig... Проверка подписи... | |||
Автор подписи: 11223344556, 102301111222, Пр-т Победы 14 кв.3, Калининград, 39 Калининградская обл., RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович | |||
Подпись проверена. | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи: | |||
<source lang="text" highlight="1">$ cryptcp -verify my_file.odt.sig new_file.odt</source> | |||
Для создания откреплённой (detached) подписи необходимо заменить ключ -sign на -signf: | |||
<source lang="text" highlight="1">$ cryptcp -signf -dn E=ivanov@mail.mail -der my_file.odt </source> | |||
Проверка откреплённой подписи: | |||
<source lang="text" highlight="1">$ cryptcp -vsignf my_file.odt </source> | |||
[[Категория:Криптография]] | [[Категория:Криптография]] |
Текущая версия от 18:37, 14 июля 2022
- Токен: JaCarta-2 ГОСТ
библиотека libjcPKCS11-2.so.2.4.0 обеспечивает взаимодействие с криптопровайдером токена по стандарту PKCS#11; криптопровайдер токена осуществляет функции подписи секретным ключом передаваемых ему данных; секретный ключ при этом не покидает пределов токена;
Значения PIN-кодов по умолчанию
PIN-код пользователя по умолчанию (PIN): 1234567890
PIN-код администратора (SO-PIN): не предусмотрен
Утилита pkcs11-tool
Должны быть установлены пакеты:
# apt-get install opensc
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с Jacarta ГОСТ 2.0 и с ее помощью «управлять» токенами JaCarta.
Пакеты для работы с JaCarta-2 ГОСТ
Установить утилиту для работы с аппаратными токенами Jacarta ГОСТ и библиотеку libjcPKCS11:
# apt-get install jacarta-tools jcPKCS11-2
--module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Проверка работы JaCarta-2 ГОСТ
Проверяем работу токена, он должен быть виден в списке:
$ pkcs11-tool -L --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Available slots:
Slot 0 (0x1ffff): Aladdin R.D. JaCarta [SCR Interface] 00 00
token label : JaCarta ГОСТ
token manufacturer : Aladdin R.D.
token model : JaCarta GOST 2.0
token flags : login required, rng, token initialized, PIN initialized, other flags=0x800
hardware version : 1.0
firmware version : 2.53
serial num : 4E3900016432304C
pin min/max : 6/32
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):
$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Using slot 0 with a present token (0x1ffff)
Logging in to "JaCarta-2 GOST".
Please enter User PIN:
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
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: 5c6a95785381c6e97f188b5c1bda5b452984c57846b6439455847b6852078138
0cf4b6e0bae04ce05234e18c608613a839945056875fd3f38fb32ae3130bc705
label: key
ID: 0123
Usage: verify
Private Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
label: key
ID: 0123
Usage: sign
Public Key Object; RSA 0 bits
label:
ID: 56504b4f5f4944
Usage: verify, wrap
Инициализация токена
Смена PIN-кода
Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый):
$ pkcs11-tool --change-pin --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
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-кода, только сбрасывается счётчик попыток ввода. Т.е., если пароль пользователя неизвестен, то даже с помощью пароля администратора, нельзя получить доступ к ключу. В данном случае поможет инициализация.
Удаление объекта
Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно.
$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
Типы объектов:
- privkey – закрытый ключ;
- pubkey – открытый ключ;
- cert – сертификат.
Создание ключевой пары
Генерация пары ключей:
$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --login --pin 1234567890 --keypairgen --key-type GOSTR3410:A --id 0101 --label "my key"
Using slot 0 with a present token (0x1ffff)
Key pair generated:
Private Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
label: my key
ID: 0101
Usage: sign
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: 5c6a95785381c6e97f188b5c1bda5b452984c57846b6439455847b6852078138
0cf4b6e0bae04ce05234e18c608613a839945056875fd3f38fb32ae3130bc705
label: my key
ID: 0101
Usage: verify
Сертификаты
Создание запроса на сертификат
Формирование запроса на сертификат:
$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr5.der \
--pin=1234567890 \
--dn "INN=395556660000" \
--dn "SNILS=11223344556" \
--dn "emailAddress=ivanov@mail.mail" \
--dn "CN=Иванов Иван Иванович" \
--dn "SN=Иванов" \
--dn "2.5.4.42=Иван Иванович" \
--dn "C=RU" \
--dn "L=Калининград" \
--dn "ST=39 Калининградская обл." \
--dn "street=Пр-т Победы 14 кв.3" \
--ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \
--ext "extendedKeyUsage=clientAuth,emailProtection" \
--ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST"
Trying to load /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0
jcPKCS11-2 library initialized.
Applet GOST2 found in slot 131071
Open session: OK
Login: OK
Key 1:
Label: test
ID: 0123
Key 2:
Label: my key
ID: 0101
Key 3:
Label:
ID: 56504b4f5f4944
Please, select public key: 2
Create CSR: OK
Write CSR to file: OK
Можно использовать OID для формирования запроса на сертификат:
$ jc_certreq --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -o csr.der \
--pin=1234567890 \
--dn "1.2.643.3.131.1.1=391506390000" \
--dn "1.2.643.100.3=11223344556" \
--dn "1.2.840.113549.1.9.1=ivanov@mail.mail" \
--dn "2.5.4.3=Иванов Иван Иванович" \
--dn "2.5.4.4=Иванов" \
--dn "2.5.4.42=Иван Иванович" \
--dn "2.5.4.6=RU" \
--dn "2.5.4.7=Калининград" \
--dn "2.5.4.8=39 Калининградская обл." \
--dn "2.5.4.9=Пр-т Победы 14 кв.3" \
--ext "keyUsage=critical,digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment" \
--ext "extendedKeyUsage=1.3.6.1.5.5.7.3.2,1.3.6.1.5.5.7.3.4" \
--ext "1.2.643.100.111=ASN1:UTF8String:JaCarta-2 GOST"
Получение сертификата
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
Запись сертификата
Запись сертификата на токен:
$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 --pin 1234567890 --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.2.4.0
ID сертификата можно посмотреть, выведя список объектов на токене:
$ pkcs11-tool --module /usr/lib64/pkcs11/libjcPKCS11-2.so.2.4.0 -O
КриптоПро
Электронный идентификатор JaCarta ГОСТ поддерживается в СКЗИ «КриптоПро CSP» в качестве ключевого носителя. Для этого необходимо установить модуль поддержки (команда выполняется из папки с распакованным архивом КриптоПро см. КриптоПро#Установка):
# apt-get install cprocsp-rdr-jacarta*
Управление считывателями
Просмотр доступных считывателей:
$ 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 Aladdin R.D. JaCarta [SCR Interface] 00 00
Aladdin R.D. JaCarta [SCR Interface] 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]
Инициализация считывателя Aladdin R.D. JaCarta [SCR Interface] 00 00, где в параметре -add указано имя, которое было получено при просмотре доступных считывателей, в параметре -name указано удобное для обращения к считывателю имя, например, JaCarta (под правами root):
# cpconfig -hardware reader -add 'Aladdin R.D. JaCarta [SCR Interface] 00 00' -name 'JaCarta'
Adding new reader:
Nick name: Aladdin R.D. JaCarta [SCR Interface] 00 00
Name device: JaCarta
Succeeded, code:0x0
Управление контейнерами
Создание контейнера на токене/смарт-карте:
$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012'
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 17975555
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "jacarta_2012"
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 - 25.02.2022 11:48:48 (UTC)
OID: 1.2.643.2.2.37.3.10
PrivKey: Not specified - 25.02.2022 11:49:13 (UTC)
Total: SYS: 0,060 sec USR: 0,120 sec UTC: 48,390 sec
[ErrorCode: 0x00000000]
Создание неизвлекаемого контейнера:
В этом случае будет использована встроенная криптография носителя.
Создание обычного контейнера:
В этом случае см. JaCarta/PKI
Будет необходимо предъявить PIN-код пользователя:
Проверить наличие контейнеров можно с помощью команды:
$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
CSP (Type:80) v5.0.10001 KC2 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 22886451
\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012
OK.
Total: SYS: 0,010 sec US
Просмотр подробной информации о контейнере:
$ csptestf -keyset -container '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -info
Удалить контейнер можно с помощью команды:
$ csptest -keyset -deletekeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012'
Управление сертификатами
Создание запроса на получение сертификата
Создание запроса на получение сертификата средствами КриптоПро (будет необходимо предъявить PIN-код пользователя):
$ cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr
Например, создать запрос на физическое лицо, используя открытый ключ, сгенерированный в контейнере jacarta_2012 криптопровайдером «Crypto-Pro GOST R 34.10-2012 KC1 CSP» (тип — 80) и сохранить его в файл jacarta2012.req, назначение ключа — аутентификация и защита электронной почты:
$ 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] 00 00\jacarta_2012' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta2012.req
Тот же запрос, используя OID (будет необходимо предъявить PIN-код пользователя):
$ cryptcp -creatrqst \
-dn "2.5.4.3=Иванов Иван Иванович,2.5.4.4=Иванов,2.5.4.42=Иван Иванович,1.2.840.113549.1.9.1=ivanov@mail.mail,2.5.4.6=RU,2.5.4.8=39 Калининградская обл.,2.5.4.7=Калининград,2.5.4.9=Пр-т Победы 14 кв.3,1.2.643.3.131.1.1=102301111222,1.2.643.100.3=11223344556" \
-provtype 80 -nokeygen \
-cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" jacarta2012.req
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Запрос успешно создан и сохранен в файле.
[ErrorCode: 0x00000000]
Получение сертификата в УЦ и его установка
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
Запись сертификата клиента в контейнер:
$ cryptcp -instcert -provtype 80 -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -ku -askpin certnew.cer
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище uMy:
certmgr -inst -file certnew.cer -store uMy -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 00 00\jacarta_2012' -inst_to_cont
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018.
program for managing certificates, CRLs and stores
WARNING: Legacy parameter: "-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 : CN=Иванов Иван Иванович, SN=Иванов, G=Иван Иванович, E=ivanov@mail.mail, C=RU, S=39 Калининградская обл., L=Калининград, STREET=Пр-т Победы 14 кв.3, INN=102301111222, SNILS=11223344556
Serial : 0x120032E69FDDCE99C696B58F0B00000032E69F
SHA1 Hash : 84c33d2d04e9bf89a58c3b312f0f818d07bca0ff
SubjKeyID : 55e495cc2491d57c05153a41439039f32da17e14
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before : 27/02/2019 13:41:47 UTC
Not valid after : 27/05/2019 13:51:47 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
=============================================================================
[ErrorCode: 0x00000000]
Установка сертификата удостоверяющего центра:
$ certmgr -inst -file uc.p7b -store uRoot
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018.
program for managing certificates, CRLs and stores
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]
Просмотр сертификатов
Для просмотра установленных сертификатов можно воспользоваться командой:
$ certmgr -list
Создание и проверка подписи
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла:
$ cryptcp -sign -dn E=ivanov@mail.mail -der my_file.odt
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Будет использован следующий сертификат:
Субъект:11223344556, 102301111222, Пр-т Победы 14 кв.3, Калининград, 39 Калининградская обл., RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович
Действителен с 27.02.2019 13:41:47 по 27.05.2019 13:51:47
Цепочки сертификатов проверены.
Папка './':
my_file.odt... Подпись данных...
Подписанное сообщение успешно создано.
[ErrorCode: 0x00000000]
На выходе появится файл my_file.odt.sig, содержащий как сам подписываемый файл, так и электронную подпись. Для проверки прикреплённой подписи выполните команду:
$ cryptcp -verify my_file.odt.sig
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Найдено сертификатов: 2
Цепочки сертификатов проверены.
Папка './':
my_file.odt.sig... Проверка подписи...
Автор подписи: 11223344556, 102301111222, Пр-т Победы 14 кв.3, Калининград, 39 Калининградская обл., RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович
Подпись проверена.
[ErrorCode: 0x00000000]
Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи:
$ cryptcp -verify my_file.odt.sig new_file.odt
Для создания откреплённой (detached) подписи необходимо заменить ключ -sign на -signf:
$ cryptcp -signf -dn E=ivanov@mail.mail -der my_file.odt
Проверка откреплённой подписи:
$ cryptcp -vsignf my_file.odt