Rutoken: различия между версиями
(Новая страница: «{{Stub}} = Rutoken S = https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-S == Пакеты == pcsc-lite-rutokens = Rutoken Web/ЭЦП = https://github.com/O...») |
IgorN (обсуждение | вклад) (→Установка «Рутокен плагин»: Уточнения по расширению Адаптер Рутокен Плагин.) |
||
(не показано 46 промежуточных версий 10 участников) | |||
Строка 1: | Строка 1: | ||
{{Stub}} | {{Stub}} | ||
Рутокен ЭЦП 2.0 / 3.0 — токен с аппаратной реализацией российского стандарта электронной подписи, шифрования и хеширования. Обеспечивает безопасное хранение ключей электронной подписи во встроенной защищенной памяти без возможности их экспорта. | |||
Рутокен S — не имеет аппаратной реализации алгоритмов подписи. Устройство предназначено для безопасного хранения ключей шифрования и паролей, защиты персональных данных, и защиты от несанкционированного доступа. Основной ключевой носитель для российских СКЗИ (КриптоПро, ViPNet). | |||
Рутокен Lite — не имеет аппаратной реализации алгоритмов подписи. | |||
= Настройка аутентификации = | |||
С помощью следующих инструкций можно настроить аутентификацию в системе с помощью сертификата и ключа на Рутокен ЭЦП: | |||
* [[Аутентификация по ключу]] | |||
* [[alterator-auth-token]] | |||
Также с его помощью может быть реализована [[двухфакторная аутентификация]]. | |||
= Значения PIN-кодов на Рутокен по умолчанию = | |||
У Рутокен: | |||
''PIN-коды Рутокен S/Lite/ЭЦП 2.0/ЭЦП 3.0, установленные по умолчанию — Пользователь: 12345678; Администратор: 87654321'' | |||
У Рутокен Web: | |||
PIN на скретч-карте. | |||
=КриптоПро= | |||
Подробнее о КриптоПро: [[КриптоПро]] | |||
Для поддержки Рутокен в качестве ключевого носителя в СКЗИ «КриптоПро CSP» необходимо установить модуль поддержки (из архива КриптоПро): | |||
<source lang="text" highlight="1"># apt-get install cprocsp-rdr-rutoken* </source> | |||
==Управление считывателями== | |||
Проверка видимости токена: | |||
<source lang="text" highlight="1">$ list_pcsc | |||
Aktiv Co. Rutoken S 00 00</source> | |||
{{Note|Cлужба {{cmd|pcscd}} должна быть запущена. Запустить службу {{cmd|pcscd}} и добавить её в автозапуск при загрузке системы: | |||
<source lang="text" highlight="1,2"># systemctl start pcscd | |||
# systemctl enable pcscd</source> | |||
Если при токен не виден может потребоваться удалить пакет pcsc-lite-openct: | |||
<source lang="text" highlight="1"># apt-get remove pcsc-lite-openct</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: 26310531 | |||
GetProvParam(...PP_ENUMREADERS...) until it returns false | |||
Len Byte NickName/Name | |||
_____________________________ | |||
0x012a 0x03 Aktiv Co. Rutoken S 00 00 | |||
MyRutoken | |||
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,040 sec USR: 0,040 sec UTC: 0,160 sec | |||
[ErrorCode: 0x00000000]</source> | |||
Инициализация считывателя {{path|Aktiv Co. Rutoken S 00 00}} (требуется, если считыватель есть в списке видимых считывателей и отсутствует в списке настроенных), в параметре -add указывается имя, которое было получено при просмотре видимых считывателей, в параметре -name — удобное для обращения к считывателю имя, например, {{path|Rutoken}} (под правами root): | |||
<source lang="text" highlight="1"># cpconfig -hardware reader -add "Aktiv Co. Rutoken S 00 00" -name "MyRutoken" | |||
Adding new reader: | |||
Nick name: Aktiv Co. Rutoken S 00 00 | |||
Name device: MyRutoken | |||
Succeeded, code:0x0 | |||
</source> | |||
{{Note|Если получаете ошибку: | |||
<source lang="Bash">-bash: cpconfig: команда не найдена</source> | |||
Выполните: | |||
<source lang="Bash">export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"</source> | |||
Для пользователя root будет действовать до перезагрузки}} | |||
==Создание контейнера== | |||
Создание контейнера на токене/смарт-карте: | |||
<source lang="text" highlight="1">$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' | |||
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX. | |||
AcquireContext: OK. HCRYPTPROV: 13027379 | |||
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP | |||
Container name: "Rutoken | |||
" | |||
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 - 28.05.2020 11:35:54 (UTC) | |||
OID: 1.2.643.2.2.37.3.10 | |||
PrivKey: Not specified - 28.05.2020 11:37:29 (UTC) | |||
Total: SYS: 0,180 sec USR: 0,050 sec UTC: 107,930 sec | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
При установленном пакете {{pkg|cprocsp-rdr-gui-gtk}} будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши: | |||
[[Изображение:Cryptopro-newkeyset-ru.png|Генерация случайной последовательности]] | |||
{{note|Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры.}} | |||
После этого необходимо предъявить PIN-код пользователя. | |||
После указания PIN-кода снова будет предложено перемещать указатель мыши. | |||
{{note|Если используется модель Рутокен ЭЦП, можно будет выбрать способ создания контейнера. | |||
Создание неизвлекаемого контейнера: | |||
[[Файл:Rutoken_newcont.png|Создание неизвлекаемого контейнера]] | |||
В этом случае будет использована встроенная криптография носителя. | |||
Создание контейнера КриптоПро: | |||
[[Файл:Rutoken_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: 22009731 | |||
\\.\Aktiv Co. Rutoken S 00 00\Rutoken | |||
OK. | |||
Total: SYS: 0,030 sec USR: 0,050 sec UTC: 2,400 sec | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
Просмотр подробной информации о контейнере: | |||
<source lang="text" highlight="1">$ csptestf -keyset -container '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' -info </source> | |||
Удалить контейнер можно с помощью команды: | |||
<source lang="text" highlight="1">$ csptestf -keyset -deletekeyset -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' </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 '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' \ | |||
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" rutoken.req | |||
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Запрос успешно создан и сохранен в файле. | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре. | |||
===Добавление (запись) сертификатов=== | |||
Добавление сертификата, без привязки к ключам (только проверка ЭЦП): | |||
<source lang="text" highlight="1">$ certmgr -inst -file cert.cer</source> | |||
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище uMy: | |||
<source lang="text" highlight="1">$ certmgr -inst -file cert.cer -store uMy -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken'</source> | |||
Запись сертификата клиента в контейнер: | |||
<source lang="text" highlight="1">$ cryptcp -instcert -provtype 80 -ku -askpin rutoken.cer | |||
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Пожалуйста, выберите нужный контейнер (введите его номер и нажмите [Enter]). | |||
#1: Rutoken | |||
#2: 506c7567696e3036303232303139313831333030 | |||
#3: test | |||
Номер:1 | |||
Введите пароль для контейнера Rutoken: | |||
Сертификат был успешно установлен. | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
Добавление сертификата УЦ из файла certne_ucw.cer в хранилище машины (с правами root): | |||
<source lang="text" highlight="1"># /opt/cprocsp/bin/amd64/certmgr -inst -file certne_ucw.cer -store mRoot</source> | |||
Добавление корневых сертификатов из файла cert.p7b (под root): | |||
<source lang="text" highlight="1"># /opt/cprocsp/bin/amd64/certmgr -inst -all -file cert.p7b -store mRoot</source> | |||
Необходимо последовательно добавить все сертификаты. | |||
===Просмотр сертификатов=== | |||
Просмотр сертификатов: | |||
<source lang="text" highlight="1">$ certmgr -list</source> | |||
Просмотр сертификатов в локальном хранилище uMy: | |||
<source lang="text" highlight="1">$ certmgr -list -store uMy</source> | |||
Просмотр сертификатов в контейнере: | |||
<source lang="text" highlight="1">$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken' | |||
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018. | |||
program for managing certificates, CRLs and stores | |||
============================================================================= | |||
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, CN=Иванов Иван Иванович, SN=Иванов, G=Иван Иванович, C=RU, S=39 Калининградская обл., L=Калининград, STREET=Пр-т Победы 14 кв.3 | |||
Serial : 0x120032F1A2A438324D0C0EFA2900000032F1A2 | |||
SHA1 Hash : 85b37ce3e2fce0f86f7847000eafca0a9c5df274 | |||
SubjKeyID : c16fc96ae4670ac21b219434caae3a9f68b54ca2 | |||
Signature Algorithm : ГОСТ Р 34.11/34.10-2001 | |||
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits) | |||
Not valid before : 05/03/2019 10:56:32 UTC | |||
Not valid after : 05/06/2019 11:06:32 UTC | |||
PrivateKey Link : Certificate from container. No link to key | |||
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 | |||
1.3.6.1.4.1.311.10.3.12 | |||
============================================================================= | |||
[ErrorCode: 0x00000000] | |||
</source> | |||
Просмотр корневых сертификатов: | |||
<source lang="text" highlight="1">$ certmgr -list -store uRoot</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> | |||
= Рутокен S = | |||
{{attention|Rutoken S — не является активным ключевым носителем — в нем нет аппаратной поддержки алгоритмов, а для использования RSA в opensc < 0.12 были реализованы '''выгрузка''' '''приватного''' (!!!) ключа из Rutoken S и работа с этим ключом через openssl.}} | |||
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-S | https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-S | ||
== Пакеты == | == Пакеты == | ||
pcsc-lite-rutokens | pcsc-lite-rutokens | ||
opensc | |||
== Утилита pkcs11-tool== | |||
{{Note|[http://forum.rutoken.ru/topic/2799/ С форума Рутокен]: Если Вы хотите работать через opensc-pkcs11.so, то Вы должны обязательно предварительно отформатировать токен через pkcs15-init, а затем создавать и работать с ключами только через opensc-pkcs11.so. | |||
Если Вы хотите работать через наш PKCS#11, то лучше всего форматировать через | |||
[https://dev.rutoken.ru/pages/viewpage.action?pageId7995615/ Утилиту администрирования Рутокен], а затем создавать и работать с ключами только через наш PKCS#11. Это самый поддерживаемый путь. (не для Рутокен S??) | |||
Вы можете отформатировать токен через pkcs15-init и работать с нашим PKCS#11. Но в этом случае через opensc-pkcs11.so ничего не будет доступно.}} | |||
{{Note|Rutoken S не поддерживает работу с библиотекой rtPKCS11ECP (librtpkcs11ecp.so), т.е. операции генерации и импорта ключей на Рутокен S выполнить не получится. | |||
При работе с Рутокен S необходимо указывать путь до библиотеки opensc-pkcs11: | |||
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/opensc-pkcs11.so</source>}} | |||
Список поддерживаемых механизмов: | |||
<source lang="text" highlight="1">$ pkcs11-tool -v --module /usr/lib64/pkcs11/opensc-pkcs11.so --list-mechanisms | |||
Using slot 0 with a present token (0x0) | |||
Supported mechanisms: | |||
SHA-1, digest | |||
SHA256, digest | |||
SHA384, digest | |||
SHA512, digest | |||
MD5, digest | |||
RIPEMD160, digest | |||
GOSTR3411, digest</source> | |||
===Проверка работы=== | |||
Проверяем работу токена, он должен быть виден в списке: | |||
<source lang="text" highlight="1">$ pkcs11-tool -L --module /usr/lib64/pkcs11/opensc-pkcs11.so | |||
Available slots: | |||
Slot 0 (0x0): Aktiv Co. Rutoken S 00 00 | |||
token label : User PIN (Rutoken S) | |||
token manufacturer : Aktiv Co. | |||
token model : PKCS#15 | |||
token flags : login required, rng, token initialized, PIN initialized | |||
hardware version : 0.0 | |||
firmware version : 0.0 | |||
serial num : 398C4F0B | |||
pin min/max : 8/16 | |||
</source> | |||
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена): | |||
<source lang="text" highlight="1">$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/opensc-pkcs11.so | |||
Using slot 0 with a present token (0x0) | |||
Logging in to "User PIN (Rutoken S)". | |||
Please enter User PIN: | |||
</source> | |||
===Инициализация токена=== | |||
{{Attention|При инициализации все данные с токена будут удалены!}} | |||
Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin): | |||
<source lang="text" highlight="1">$ pkcs11-tool --init-token --label RutokenS --module /usr/lib64/pkcs11/opensc-pkcs11.so | |||
Using slot 0 with a present token (0x0) | |||
Please enter the new SO PIN: | |||
Please enter the new SO PIN (again): | |||
Token successfully initialized | |||
</source> | |||
===Смена PIN-кода=== | |||
Для смены PIN-кода необходимо выполнить команду (потребуется ввести текущий PIN-код, а затем дважды ввести новый): | |||
<source lang="text" highlight="1">$ pkcs11-tool --change-pin --module /usr/lib64/pkcs11/opensc-pkcs11.so | |||
Using slot 0 with a present token (0x0) | |||
Logging in to "User PIN (Rutoken S)". | |||
Please enter the current PIN: | |||
Please enter the new PIN: | |||
Please enter the new PIN again: | |||
PIN successfully changed | |||
</source> | |||
===Разблокировка PIN-кода=== | |||
Для того чтобы разблокировать PIN-код необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код): | |||
<source lang="text" highlight="1">$ pkcs11-tool --init-pin -l --module /usr/lib64/pkcs11/opensc-pkcs11.so | |||
Using slot 0 with a present token (0x0) | |||
Logging in to "User PIN (Rutoken S)". | |||
Please enter SO PIN: | |||
Please enter the new PIN: | |||
Please enter the new PIN again: | |||
User PIN successfully initialized | |||
</source> | |||
= Рутокен ЭЦП 2.0 и 3.0 = | |||
== Центр регистрации Рутокен == | |||
Для генерации ключей, формирования запроса на сертификат и записи сертификата на Рутокен ЭЦП можно воспользоваться ПО «Рутокен плагин», | |||
(работает через библиотеку PKCS#11 и совместим с плагином Госуслуг) и ПО «Центр регистрации Рутокен» [https://ra.rutoken.ru ra.rutoken.ru]. | |||
Веб-сервис управления хранилищем сертификатов и ключей «Центр регистрации Рутокен» позволяет: | |||
* генерировать ключи; | |||
* создавать запросы на сертификаты; | |||
* импортировать сертификаты и связывать их с ключами; | |||
* подписывать документы электронной подписью; | |||
* менять PIN-код на устройстве. | |||
=== Установка «Рутокен плагин» === | |||
Для работы необходима служба {{cmd|pcscd}}, которая является частью пакета {{pkg|pcsc-lite}}. Установить пакет, запустить службу {{cmd|pcscd}} и добавить её в автозапуск: | |||
<source lang="text" highlight="1-3"> | |||
$ su - | |||
# apt-get install pcsc-lite | |||
# systemctl enable --now pcscd | |||
</source> | |||
Установить библиотеку PKCS#11: | |||
<source lang="text" highlight="1"> | |||
# apt-get install librtpkcs11ecp | |||
</source> | |||
'''[http://www.rutoken.ru/products/all/rutoken-plugin/ Рутокен Плагин]''' представляет собой решение для электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов. | |||
Плагин необходим для связи USB-устройств c браузером, он позволяет опознавать и работать с ними. Для того чтобы установить плагин, необходимо загрузить соответствующий установочный файл и запустить его | |||
Чтобы установить «Рутокен плагин» необходимо: | |||
#Загрузить «Рутокен плагин» со страницы [https://www.rutoken.ru/support/download/rutoken-plugin/ по ссылке] (выбрать пакет формата «rpm»): | |||
#:[[Изображение:Rutoken-plugin-download.png|Загрузка «Рутокен плагин»|600px]] | |||
#Установить «Рутокен плагин». Для этого в контекстном меню скаченного файла выбрать пункт «Открыть в Установка RPM». В открывшемся окне нажать кнопку «Установить»: | |||
#:[[Изображение:Rutoken-plugin-install.png|Установка пакетов RPM]] | |||
#:Ввести пароль администратора системы и нажать кнопку «ОК»: | |||
#:[[Изображение:Rutoken-plugin-install1.png|Ввод пароля администратора системы]] | |||
#:В открывшемся окне нажать кнопку «Установить»: | |||
#:[[Изображение:Rutoken-plugin-install2.png|Установка пакетов RPM]]<br><br> | |||
#:Или установить «Рутокен плагин», выполнив из папки с загруженным пакетом команду (под правами root): | |||
#:<source lang="text" highlight="1"># apt-get install libnpRutokenPlugin*</source> | |||
#Установить расширение "Адаптер Рутокен Плагин": | |||
##Если используется браузер Firefox: | |||
##:Перейти в магазин расширений и установить [https://addons.mozilla.org/ru/firefox/addon/adapter-rutoken-plugin/ Адаптер Рутокен Плагин]. | |||
##Если используется Яндекс Браузер или Chromium-gost: | |||
##:Установить [https://chrome.google.com/webstore/detail/адаптер-рутокен-плагин/ohedcglhbbfdgaogjhcclacoccbagkjg расширение со страницы на https://chromewebstore.google.com]. | |||
##:Актуальную ссылку на расширение можно найти на https://ra.rutoken.ru/devices. | |||
#Перезапустить браузер. | |||
#Убедиться, что плагин установлен и включен. Для Firefox это можно сделать на странице {{path|about:addons}}: | |||
#:[[Изображение:Rutoken-plugin-on.png|Рутокен плагин|600px]] | |||
Проверить работу плагина при подключенной Рутокен ЭЦП можно на https://ra.rutoken.ru/ и https://demobank.rutoken.ru/. | |||
=== Генерация пары ключей и формирование запроса на сертификат === | |||
Для генерации пары ключей и формированию запроса на сертификат с помощью ПО «Центр регистрации Рутокен» следует: | |||
#Зайти на сайт «Центр регистрации Рутокен» https://ra.rutoken.ru: | |||
#:[[Изображение:Ra-rutoken-devices.png|Центр регистрации Рутокен]] | |||
#Подключить Рутокен ЭЦП к компьютеру, выбрать токен, ввести PIN-код пользователя: | |||
#:[[Изображение:Ra-rutoken-pin.png|Запрос PIN-кода]] | |||
#Нажать кнопку «Создать ключ»: | |||
#:[[Изображение:Ra-rutoken.png|Интерфейс «Центра регистрации Рутокен»]] | |||
#Ввести идентификатор и маркер ключа (опционально), выбрать тип ключа и алгоритм шифрования, затем нажать кнопку «Сгенерировать ключи»: | |||
#:[[Изображение:Rutoken-key-add.png|Создание ключей]] | |||
#:Появится сообщение, о том, что ключи созданы: | |||
#:[[Изображение:Rutoken-key.png|Ключи созданы]] | |||
#Нажать кнопку «Создать заявку на сертификат». | |||
#На странице создания запроса заполнить поля запроса, выбрать назначение сертификата, нажать кнопку «Создать запрос» (показан пример заполнения полей для физ.лица): | |||
#:[[Изображение:Rutoken-cert-new.png|Создание запроса на сертификат]] | |||
#:В раскрывающемся списке можно выбрать шаблон запроса. Шаблоны содержат разное количество полей в блоке информации о пользователе и разные расширения сертификата. | |||
#Откроется окно содержащее текст запроса. Можно сохранить его на диске, нажав кнопку «Сохранить на диске», или скопировать в буфер обмена, нажав кнопку «Скопировать в буфер обмена»: | |||
#:[[Изображение:Rutoken-cert-request.png|Запрос создан и подписан]] | |||
#Отправить запрос в удостоверяющий центр. | |||
#После получения сертификата, на странице «Центр регистрации Рутокен» https://ra.rutoken.ru нажать кнопку «Добавить к ключам сертификат» или выбрать пару ключей и нажать кнопку «Добавить сертификат» | |||
#:[[Изображение:Rutoken-cert-add.png|Добавление сертификата]] | |||
#В открывшемся окне загрузить файл с сертификатом, нажав кнопку «Выбрать», или вставить сертификат из буфера обмена, нажав кнопку «Вставить из буфера обмена», и нажать кнопку «Связать»: | |||
#:[[Изображение:Rutoken-cert-add2.png|Добавление сертификата пользователя]] | |||
#:[[Изображение:Rutoken-cert-add22.png|Добавление сертификата пользователя]] | |||
#Сертификат отобразится в списке: | |||
#:[[Изображение:Rutoken-cert-add4.png|Контейнер с сертификатом]] | |||
{{Note|Данные сертификата должны быть в формате PEM или Base64. Если вы получили сертификат в другом формате, его можно конвертировать в нужный формат, выполнив команду: | |||
$ openssl x509 -inform der -in cert.cer -out cert.pem | |||
}} | |||
== Утилита pkcs11-tool== | |||
{{Note|Cлужба {{cmd|pcscd}} должна быть запущена. Запустить службу {{cmd|pcscd}} и добавить её в автозапуск: | |||
<source lang="text" highlight="1-3"> | |||
$ su - | |||
# systemctl enable --now pcscd | |||
</source>}} | |||
Должны быть установлены пакеты: | |||
<source lang="text" highlight="1"># apt-get install opensc pcsc-lite pcsc-lite-rutokens</source> | |||
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с Рутокен ЭЦП 2.0|3.0 и с ее помощью «управлять» Рутокенами. | |||
=== Библиотека для работы с Рутокен ЭЦП 2.0/3.0=== | |||
Для работы должна быть установлена библиотека librtpkcs11ecp: | |||
<source lang="text" highlight="1"># apt-get install librtpkcs11ecp</source> | |||
{{Note|При работе с Rutoken ЭЦП 2.0/3.0 необходимо указывать путь до библиотеки librtpkcs11ecp: | |||
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/librtpkcs11ecp.so</source>}} | |||
=== Проверка работы Рутокен ЭЦП в системе === | |||
Проверяем работу токена, он должен быть виден в списке: | |||
<source lang="text" highlight="1">$ pkcs11-tool -L --module /usr/lib64/pkcs11/librtpkcs11ecp.so | |||
Available slots: | |||
Slot 0 (0x0): Aktiv Rutoken ECP 00 00 | |||
token label : Rutoken ECP <no label> | |||
token manufacturer : Aktiv Co. | |||
token model : Rutoken ECP | |||
token flags : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed | |||
hardware version : 20.5 | |||
firmware version : 23.2 | |||
serial num : 373b83cf | |||
pin min/max : 6/32 | |||
Slot 1 (0x1): | |||
(empty) | |||
Slot 2 (0x2): | |||
(empty) | |||
</source> | |||
Список поддерживаемых механизмов: | |||
<source lang="text" highlight="1">$ pkcs11-tool -v --module /usr/lib64/pkcs11/librtpkcs11ecp.so --list-mechanisms | |||
Using slot 0 with a present token (0x0) | |||
Supported mechanisms: | |||
RSA-PKCS-KEY-PAIR-GEN, keySize={512,2048}, hw, generate_key_pair | |||
RSA-PKCS, keySize={512,2048}, hw, encrypt, decrypt, sign, verify | |||
RSA-PKCS-OAEP, keySize={512,2048}, hw, encrypt, decrypt | |||
MD5, digest | |||
SHA-1, digest | |||
GOSTR3410-KEY-PAIR-GEN, hw, generate_key_pair | |||
GOSTR3410, hw, sign, verify | |||
mechtype-0x1204, hw, derive | |||
GOSTR3411, hw, digest | |||
GOSTR3410-WITH-GOSTR3411, hw, digest, sign | |||
mechtype-0x1224, hw, wrap, unwrap | |||
mechtype-0x1221, hw, encrypt, decrypt | |||
mechtype-0x1222, hw, encrypt, decrypt | |||
mechtype-0x1220, hw, generate | |||
mechtype-0x1223, hw, sign, verify | |||
mechtype-0x1211, sign, verify</source> | |||
=== Проверка наличия сертификатов и ключевых пар === | |||
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена): | |||
<source lang="text" highlight="1">$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/librtpkcs11ecp.so | |||
Using slot 0 with a present token (0x0) | |||
Logging in to "Rutoken ECP <no label>". | |||
WARNING: user PIN to be changed | |||
Please enter User PIN: | |||
Public Key Object; GOSTR3410 | |||
PARAMS OID: 06072a850302022301 | |||
VALUE: 84f16c48511700660fa03ce9d32612ebdf5a69b87372cf3b07f344e4819409f0 | |||
aeacbd4e922869bed61ef08e20d15fe956ac81c27e197c8dfcc4b5be2763b47d | |||
label: | |||
ID: 506c7567696e3132303232303139313630363239 | |||
Usage: verify | |||
Private Key Object; GOSTR3410 | |||
PARAMS OID: 06072a850302022301 | |||
label: Иванова Ольга Петровна | |||
ID: 506c7567696e3132303232303139313630363239 | |||
Usage: sign, derive | |||
Certificate Object; type = X.509 cert | |||
label: Rutoken Plugin | |||
subject: DN: C=RU, ST=\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0, L=\xD1\x80-\xD0\xBD \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBE\xD0\xB7\xD0\xB5\xD1\x80\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9, \xD0\xB3. \xD0\x9B\xD1\x83\xD0\xB3\xD0\xB0, CN=\xD0\x98\xD0\xB2\xD0\xB0\xD0\xBD\xD0\xBE\xD0\xB2\xD0\xB0 \xD0\x9E\xD0\xBB\xD1\x8C\xD0\xB3\xD0\xB0 \xD0\x9F\xD0\xB5\xD1\x82\xD1\x80\xD0\xBE\xD0\xB2\xD0\xBD\xD0\xB0/1.2.643.3.131.1.1=5001007322229/street=\xD1\x83\xD0\xBB. \xD0\x93\xD0\xB0\xD0\xB3\xD0\xB0\xD1\x80\xD0\xB8\xD0\xBD\xD0\xB0, \xD0\xB4. 5/emailAddress=ivanova@mail.ru | |||
ID: 506c7567696e3132303232303139313630363239 | |||
</source> | |||
В результате в окне терминала отобразится информация обо всех сертификатах и ключевых парах, хранящихся на Рутокене. | |||
Чтобы открыть сертификат или ключевую пару скопируйте ID необходимого объекта и введите команду: | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so -r -y cert --id 506c7567696e3132303232303139313630363239 | openssl x509 -inform der -text</source> | |||
В результате в окне Терминала отобразится полная информация об указанном объекте. | |||
Чтобы скопировать сертификат в файл введите команду: | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so -r -y cert --id 506c7567696e3132303232303139313630363239 > ./имя_файла</source> | |||
===Изменение PIN-кода=== | |||
Для изменения PIN-кода введите команду: | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --login --pin 12345678 --change-pin --new-pin 2780712 | |||
Using slot 0 with a present token (0x0) | |||
PIN successfully changed | |||
</source> | |||
где | |||
pin — текущий PIN-код устройства; | |||
new-pin — новый PIN-код устройства. | |||
===Разблокировка PIN-кода=== | |||
Для того чтобы разблокировать PIN-код необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код): | |||
<source lang="text" highlight="1">$ pkcs11-tool --init-pin -l --module /usr/lib64/pkcs11/librtpkcs11ecp.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 | |||
</source> | |||
===Инициализация токена=== | |||
{{Attention|При инициализации все данные с токена будут удалены!}} | |||
Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin): | |||
<source lang="text" highlight="1">$ pkcs11-tool --init-token --label RuTokenECP --module /usr/lib64/pkcs11/librtpkcs11ecp.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> | |||
===Удаление объекта=== | |||
Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно. | |||
<source lang="text" highlight="1">$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/librtpkcs11ecp.so</source> | |||
Типы объектов: | |||
*privkey – закрытый ключ; | |||
*pubkey – открытый ключ; | |||
*cert – сертификат. | |||
===Создание ключевой пары=== | |||
{{Note| Для генерации ключевой пары ГОСТ и RSA на Рутокене также можно использовать [[Rutoken#Генерация_пары_ключей_и_формирование_запроса_на_сертификат|веб-сервис «Центр регистрации Рутокен»]] (https://ra.rutoken.ru/)}} | |||
Создание ключевой пары по алгоритму ГОСТ-2001 (PIN-код пользователя указывается в опции --pin, или запрашивается, если опцию не задать): | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.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 | |||
</source> | |||
Создание ключевой пары по алгоритму ГОСТ-2012 (256 бит, Paramset A): | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:A --id 0001 --label "gost3410-2012" | |||
Using slot 0 with a present token (0x0) | |||
Key pair generated: | |||
Private Key Object; GOSTR3410-2012-256 | |||
PARAMS OID: 06092a8503070102010101 | |||
label: gost3410-2012 | |||
ID: 0001 | |||
Usage: sign | |||
Access: sensitive, always sensitive, never extractable, local | |||
Public Key Object; GOSTR3410-2012-256 | |||
PARAMS OID: 06092a8503070102010101 | |||
VALUE: ed69495c36782333e5a3f2c6cb98fb29f73cb1c1a3d1801c3dc450e0cb148c83 | |||
0ebd7ffc5e2b4984022de050606403e27ceee825733f7058faed2d213e4ae15a | |||
label: gost3410-2012 | |||
ID: 0001 | |||
Usage: verify | |||
Access: local | |||
</source> | |||
Создание ключевой пары RSA 2048 (запрашивается PIN-код пользователя): | |||
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 --login --id 2222 --label myrsakey | |||
Using slot 0 with a present token (0x0) | |||
Logging in to "Rutoken ECP <no label>". | |||
Please enter User PIN: | |||
Key pair generated: | |||
Private Key Object; RSA | |||
label: myrsakey | |||
ID: 2222 | |||
Usage: decrypt, sign, unwrap | |||
Public Key Object; RSA 2048 bits | |||
label: myrsakey | |||
ID: 2222 | |||
Usage: encrypt, verify, wrap | |||
</source> | |||
{{Note|Рекомендуемая длина ключа RSA — не ниже 2048 бит.}} | |||
{{Note|Если у вас уже имеется выписанная на токен ключевая пара RSA с привязанным к ней сертификатом, то вы можете использовать их для аутентификации.}} | |||
== Ссылки == | |||
* http://developer.rutoken.ru/pages/viewpage.action?pageId=3440675 | |||
= Rutoken Web/ЭЦП = | = Rutoken Web/ЭЦП = | ||
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP | https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP | ||
== | == ssh == | ||
ssh-add -s opensc-pkcs11.so | |||
[[Категория:Криптография]] | |||
{{Category navigation|title=Криптография|category=Криптография|sortkey={{SUBPAGENAME}}}} | |||
Текущая версия от 02:22, 27 октября 2024
Рутокен ЭЦП 2.0 / 3.0 — токен с аппаратной реализацией российского стандарта электронной подписи, шифрования и хеширования. Обеспечивает безопасное хранение ключей электронной подписи во встроенной защищенной памяти без возможности их экспорта.
Рутокен S — не имеет аппаратной реализации алгоритмов подписи. Устройство предназначено для безопасного хранения ключей шифрования и паролей, защиты персональных данных, и защиты от несанкционированного доступа. Основной ключевой носитель для российских СКЗИ (КриптоПро, ViPNet).
Рутокен Lite — не имеет аппаратной реализации алгоритмов подписи.
Настройка аутентификации
С помощью следующих инструкций можно настроить аутентификацию в системе с помощью сертификата и ключа на Рутокен ЭЦП:
Также с его помощью может быть реализована двухфакторная аутентификация.
Значения PIN-кодов на Рутокен по умолчанию
У Рутокен: PIN-коды Рутокен S/Lite/ЭЦП 2.0/ЭЦП 3.0, установленные по умолчанию — Пользователь: 12345678; Администратор: 87654321
У Рутокен Web: PIN на скретч-карте.
КриптоПро
Подробнее о КриптоПро: КриптоПро Для поддержки Рутокен в качестве ключевого носителя в СКЗИ «КриптоПро CSP» необходимо установить модуль поддержки (из архива КриптоПро):
# apt-get install cprocsp-rdr-rutoken*
Управление считывателями
Проверка видимости токена:
$ list_pcsc
Aktiv Co. Rutoken S 00 00
# systemctl start pcscd
# systemctl enable pcscd
Если при токен не виден может потребоваться удалить пакет pcsc-lite-openct:
# apt-get remove pcsc-lite-openct
Просмотр доступных считывателей:
$ 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: 26310531
GetProvParam(...PP_ENUMREADERS...) until it returns false
Len Byte NickName/Name
_____________________________
0x012a 0x03 Aktiv Co. Rutoken S 00 00
MyRutoken
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,040 sec USR: 0,040 sec UTC: 0,160 sec
[ErrorCode: 0x00000000]
Инициализация считывателя Aktiv Co. Rutoken S 00 00 (требуется, если считыватель есть в списке видимых считывателей и отсутствует в списке настроенных), в параметре -add указывается имя, которое было получено при просмотре видимых считывателей, в параметре -name — удобное для обращения к считывателю имя, например, Rutoken (под правами root):
# cpconfig -hardware reader -add "Aktiv Co. Rutoken S 00 00" -name "MyRutoken"
Adding new reader:
Nick name: Aktiv Co. Rutoken S 00 00
Name device: MyRutoken
Succeeded, code:0x0
-bash: cpconfig: команда не найдена
Выполните:
export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"
Создание контейнера
Создание контейнера на токене/смарт-карте:
$ csptest -keyset -provtype 80 -newkeyset -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken'
CSP (Type:80) v5.0.10001 KC1 Release Ver:5.0.11319 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 13027379
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2012 KC1 CSP
Container name: "Rutoken
"
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 - 28.05.2020 11:35:54 (UTC)
OID: 1.2.643.2.2.37.3.10
PrivKey: Not specified - 28.05.2020 11:37:29 (UTC)
Total: SYS: 0,180 sec USR: 0,050 sec UTC: 107,930 sec
[ErrorCode: 0x00000000]
При установленном пакете cprocsp-rdr-gui-gtk будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:
После этого необходимо предъявить PIN-код пользователя.
После указания PIN-кода снова будет предложено перемещать указатель мыши.
Создание неизвлекаемого контейнера:
В этом случае будет использована встроенная криптография носителя.
Создание контейнера КриптоПро:
В этом случае будет использована криптография КриптоПро
Проверить наличие контейнеров можно с помощью команды:
$ 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: 22009731
\\.\Aktiv Co. Rutoken S 00 00\Rutoken
OK.
Total: SYS: 0,030 sec USR: 0,050 sec UTC: 2,400 sec
[ErrorCode: 0x00000000]
Просмотр подробной информации о контейнере:
$ csptestf -keyset -container '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' -info
Удалить контейнер можно с помощью команды:
$ csptestf -keyset -deletekeyset -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken'
Управление сертификатами
Создание запроса на сертификат
Создание запроса на получение сертификата средствами КриптоПро:
$ 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 '\\.\Aktiv Co. Rutoken S 00 00\Rutoken' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" rutoken.req
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Запрос успешно создан и сохранен в файле.
[ErrorCode: 0x00000000]
Запрос на сертификат необходимо подписать в аккредитованном удостоверяющем центре.
Добавление (запись) сертификатов
Добавление сертификата, без привязки к ключам (только проверка ЭЦП):
$ certmgr -inst -file cert.cer
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище uMy:
$ certmgr -inst -file cert.cer -store uMy -cont '\\.\Aktiv Co. Rutoken S 00 00\Rutoken'
Запись сертификата клиента в контейнер:
$ cryptcp -instcert -provtype 80 -ku -askpin rutoken.cer
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Пожалуйста, выберите нужный контейнер (введите его номер и нажмите [Enter]).
#1: Rutoken
#2: 506c7567696e3036303232303139313831333030
#3: test
Номер:1
Введите пароль для контейнера Rutoken:
Сертификат был успешно установлен.
[ErrorCode: 0x00000000]
Добавление сертификата УЦ из файла certne_ucw.cer в хранилище машины (с правами root):
# /opt/cprocsp/bin/amd64/certmgr -inst -file certne_ucw.cer -store mRoot
Добавление корневых сертификатов из файла cert.p7b (под root):
# /opt/cprocsp/bin/amd64/certmgr -inst -all -file cert.p7b -store mRoot
Необходимо последовательно добавить все сертификаты.
Просмотр сертификатов
Просмотр сертификатов:
$ certmgr -list
Просмотр сертификатов в локальном хранилище uMy:
$ certmgr -list -store uMy
Просмотр сертификатов в контейнере:
$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken'
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018.
program for managing certificates, CRLs and stores
=============================================================================
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, CN=Иванов Иван Иванович, SN=Иванов, G=Иван Иванович, C=RU, S=39 Калининградская обл., L=Калининград, STREET=Пр-т Победы 14 кв.3
Serial : 0x120032F1A2A438324D0C0EFA2900000032F1A2
SHA1 Hash : 85b37ce3e2fce0f86f7847000eafca0a9c5df274
SubjKeyID : c16fc96ae4670ac21b219434caae3a9f68b54ca2
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2012 (512 bits)
Not valid before : 05/03/2019 10:56:32 UTC
Not valid after : 05/06/2019 11:06:32 UTC
PrivateKey Link : Certificate from container. No link to key
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
1.3.6.1.4.1.311.10.3.12
=============================================================================
[ErrorCode: 0x00000000]
Просмотр корневых сертификатов:
$ certmgr -list -store uRoot
Создание и проверка подписи
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла:
$ 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
Рутокен S
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-S
Пакеты
pcsc-lite-rutokens opensc
Утилита pkcs11-tool
Если Вы хотите работать через наш PKCS#11, то лучше всего форматировать через Утилиту администрирования Рутокен, а затем создавать и работать с ключами только через наш PKCS#11. Это самый поддерживаемый путь. (не для Рутокен S??)
Вы можете отформатировать токен через pkcs15-init и работать с нашим PKCS#11. Но в этом случае через opensc-pkcs11.so ничего не будет доступно.
При работе с Рутокен S необходимо указывать путь до библиотеки opensc-pkcs11:
--module /usr/lib64/pkcs11/opensc-pkcs11.so
Список поддерживаемых механизмов:
$ pkcs11-tool -v --module /usr/lib64/pkcs11/opensc-pkcs11.so --list-mechanisms
Using slot 0 with a present token (0x0)
Supported mechanisms:
SHA-1, digest
SHA256, digest
SHA384, digest
SHA512, digest
MD5, digest
RIPEMD160, digest
GOSTR3411, digest
Проверка работы
Проверяем работу токена, он должен быть виден в списке:
$ pkcs11-tool -L --module /usr/lib64/pkcs11/opensc-pkcs11.so
Available slots:
Slot 0 (0x0): Aktiv Co. Rutoken S 00 00
token label : User PIN (Rutoken S)
token manufacturer : Aktiv Co.
token model : PKCS#15
token flags : login required, rng, token initialized, PIN initialized
hardware version : 0.0
firmware version : 0.0
serial num : 398C4F0B
pin min/max : 8/16
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):
$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/opensc-pkcs11.so
Using slot 0 with a present token (0x0)
Logging in to "User PIN (Rutoken S)".
Please enter User PIN:
Инициализация токена
Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin):
$ pkcs11-tool --init-token --label RutokenS --module /usr/lib64/pkcs11/opensc-pkcs11.so
Using slot 0 with a present token (0x0)
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/opensc-pkcs11.so
Using slot 0 with a present token (0x0)
Logging in to "User PIN (Rutoken S)".
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/opensc-pkcs11.so
Using slot 0 with a present token (0x0)
Logging in to "User PIN (Rutoken S)".
Please enter SO PIN:
Please enter the new PIN:
Please enter the new PIN again:
User PIN successfully initialized
Рутокен ЭЦП 2.0 и 3.0
Центр регистрации Рутокен
Для генерации ключей, формирования запроса на сертификат и записи сертификата на Рутокен ЭЦП можно воспользоваться ПО «Рутокен плагин», (работает через библиотеку PKCS#11 и совместим с плагином Госуслуг) и ПО «Центр регистрации Рутокен» ra.rutoken.ru.
Веб-сервис управления хранилищем сертификатов и ключей «Центр регистрации Рутокен» позволяет:
- генерировать ключи;
- создавать запросы на сертификаты;
- импортировать сертификаты и связывать их с ключами;
- подписывать документы электронной подписью;
- менять PIN-код на устройстве.
Установка «Рутокен плагин»
Для работы необходима служба pcscd, которая является частью пакета pcsc-lite. Установить пакет, запустить службу pcscd и добавить её в автозапуск:
$ su -
# apt-get install pcsc-lite
# systemctl enable --now pcscd
Установить библиотеку PKCS#11:
# apt-get install librtpkcs11ecp
Рутокен Плагин представляет собой решение для электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов. Плагин необходим для связи USB-устройств c браузером, он позволяет опознавать и работать с ними. Для того чтобы установить плагин, необходимо загрузить соответствующий установочный файл и запустить его
Чтобы установить «Рутокен плагин» необходимо:
- Загрузить «Рутокен плагин» со страницы по ссылке (выбрать пакет формата «rpm»):
- Установить «Рутокен плагин». Для этого в контекстном меню скаченного файла выбрать пункт «Открыть в Установка RPM». В открывшемся окне нажать кнопку «Установить»:
- Установить расширение "Адаптер Рутокен Плагин":
- Если используется браузер Firefox:
- Перейти в магазин расширений и установить Адаптер Рутокен Плагин.
- Если используется Яндекс Браузер или Chromium-gost:
- Установить расширение со страницы на https://chromewebstore.google.com.
- Актуальную ссылку на расширение можно найти на https://ra.rutoken.ru/devices.
- Если используется браузер Firefox:
- Перезапустить браузер.
- Убедиться, что плагин установлен и включен. Для Firefox это можно сделать на странице about:addons:
Проверить работу плагина при подключенной Рутокен ЭЦП можно на https://ra.rutoken.ru/ и https://demobank.rutoken.ru/.
Генерация пары ключей и формирование запроса на сертификат
Для генерации пары ключей и формированию запроса на сертификат с помощью ПО «Центр регистрации Рутокен» следует:
- Зайти на сайт «Центр регистрации Рутокен» https://ra.rutoken.ru:
- Подключить Рутокен ЭЦП к компьютеру, выбрать токен, ввести PIN-код пользователя:
- Нажать кнопку «Создать ключ»:
- Ввести идентификатор и маркер ключа (опционально), выбрать тип ключа и алгоритм шифрования, затем нажать кнопку «Сгенерировать ключи»:
- Нажать кнопку «Создать заявку на сертификат».
- На странице создания запроса заполнить поля запроса, выбрать назначение сертификата, нажать кнопку «Создать запрос» (показан пример заполнения полей для физ.лица):
- Откроется окно содержащее текст запроса. Можно сохранить его на диске, нажав кнопку «Сохранить на диске», или скопировать в буфер обмена, нажав кнопку «Скопировать в буфер обмена»:
- Отправить запрос в удостоверяющий центр.
- После получения сертификата, на странице «Центр регистрации Рутокен» https://ra.rutoken.ru нажать кнопку «Добавить к ключам сертификат» или выбрать пару ключей и нажать кнопку «Добавить сертификат»
- В открывшемся окне загрузить файл с сертификатом, нажав кнопку «Выбрать», или вставить сертификат из буфера обмена, нажав кнопку «Вставить из буфера обмена», и нажать кнопку «Связать»:
- Сертификат отобразится в списке:
$ openssl x509 -inform der -in cert.cer -out cert.pem
Утилита pkcs11-tool
$ su -
# systemctl enable --now pcscd
Должны быть установлены пакеты:
# apt-get install opensc pcsc-lite pcsc-lite-rutokens
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с Рутокен ЭЦП 2.0|3.0 и с ее помощью «управлять» Рутокенами.
Библиотека для работы с Рутокен ЭЦП 2.0/3.0
Для работы должна быть установлена библиотека librtpkcs11ecp:
# apt-get install librtpkcs11ecp
--module /usr/lib64/pkcs11/librtpkcs11ecp.so
Проверка работы Рутокен ЭЦП в системе
Проверяем работу токена, он должен быть виден в списке:
$ pkcs11-tool -L --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Available slots:
Slot 0 (0x0): Aktiv Rutoken ECP 00 00
token label : Rutoken ECP <no label>
token manufacturer : Aktiv Co.
token model : Rutoken ECP
token flags : login required, rng, SO PIN to be changed, token initialized, PIN initialized, user PIN to be changed
hardware version : 20.5
firmware version : 23.2
serial num : 373b83cf
pin min/max : 6/32
Slot 1 (0x1):
(empty)
Slot 2 (0x2):
(empty)
Список поддерживаемых механизмов:
$ pkcs11-tool -v --module /usr/lib64/pkcs11/librtpkcs11ecp.so --list-mechanisms
Using slot 0 with a present token (0x0)
Supported mechanisms:
RSA-PKCS-KEY-PAIR-GEN, keySize={512,2048}, hw, generate_key_pair
RSA-PKCS, keySize={512,2048}, hw, encrypt, decrypt, sign, verify
RSA-PKCS-OAEP, keySize={512,2048}, hw, encrypt, decrypt
MD5, digest
SHA-1, digest
GOSTR3410-KEY-PAIR-GEN, hw, generate_key_pair
GOSTR3410, hw, sign, verify
mechtype-0x1204, hw, derive
GOSTR3411, hw, digest
GOSTR3410-WITH-GOSTR3411, hw, digest, sign
mechtype-0x1224, hw, wrap, unwrap
mechtype-0x1221, hw, encrypt, decrypt
mechtype-0x1222, hw, encrypt, decrypt
mechtype-0x1220, hw, generate
mechtype-0x1223, hw, sign, verify
mechtype-0x1211, sign, verify
Проверка наличия сертификатов и ключевых пар
Просмотреть имеющуюся на токене информацию можно при помощи команды (требуется пароль от токена):
$ pkcs11-tool -Ol --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Using slot 0 with a present token (0x0)
Logging in to "Rutoken ECP <no label>".
WARNING: user PIN to be changed
Please enter User PIN:
Public Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
VALUE: 84f16c48511700660fa03ce9d32612ebdf5a69b87372cf3b07f344e4819409f0
aeacbd4e922869bed61ef08e20d15fe956ac81c27e197c8dfcc4b5be2763b47d
label:
ID: 506c7567696e3132303232303139313630363239
Usage: verify
Private Key Object; GOSTR3410
PARAMS OID: 06072a850302022301
label: Иванова Ольга Петровна
ID: 506c7567696e3132303232303139313630363239
Usage: sign, derive
Certificate Object; type = X.509 cert
label: Rutoken Plugin
subject: DN: C=RU, ST=\xD0\x9C\xD0\xBE\xD1\x81\xD0\xBA\xD0\xB2\xD0\xB0, L=\xD1\x80-\xD0\xBD \xD0\x9F\xD1\x80\xD0\xB8\xD0\xBE\xD0\xB7\xD0\xB5\xD1\x80\xD1\x81\xD0\xBA\xD0\xB8\xD0\xB9, \xD0\xB3. \xD0\x9B\xD1\x83\xD0\xB3\xD0\xB0, CN=\xD0\x98\xD0\xB2\xD0\xB0\xD0\xBD\xD0\xBE\xD0\xB2\xD0\xB0 \xD0\x9E\xD0\xBB\xD1\x8C\xD0\xB3\xD0\xB0 \xD0\x9F\xD0\xB5\xD1\x82\xD1\x80\xD0\xBE\xD0\xB2\xD0\xBD\xD0\xB0/1.2.643.3.131.1.1=5001007322229/street=\xD1\x83\xD0\xBB. \xD0\x93\xD0\xB0\xD0\xB3\xD0\xB0\xD1\x80\xD0\xB8\xD0\xBD\xD0\xB0, \xD0\xB4. 5/emailAddress=ivanova@mail.ru
ID: 506c7567696e3132303232303139313630363239
В результате в окне терминала отобразится информация обо всех сертификатах и ключевых парах, хранящихся на Рутокене.
Чтобы открыть сертификат или ключевую пару скопируйте ID необходимого объекта и введите команду:
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so -r -y cert --id 506c7567696e3132303232303139313630363239 | openssl x509 -inform der -text
В результате в окне Терминала отобразится полная информация об указанном объекте.
Чтобы скопировать сертификат в файл введите команду:
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so -r -y cert --id 506c7567696e3132303232303139313630363239 > ./имя_файла
Изменение PIN-кода
Для изменения PIN-кода введите команду:
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --login --pin 12345678 --change-pin --new-pin 2780712
Using slot 0 with a present token (0x0)
PIN successfully changed
где pin — текущий PIN-код устройства; new-pin — новый PIN-код устройства.
Разблокировка PIN-кода
Для того чтобы разблокировать PIN-код необходимо выполнить команду (потребуется ввести so-pin карты, а затем дважды ввести новый PIN-код):
$ pkcs11-tool --init-pin -l --module /usr/lib64/pkcs11/librtpkcs11ecp.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
Инициализация токена
Для инициализации токена следует выполнить команду (необходимо ввести so-pin карты 2 раза или передать его в качестве параметра --so-pin):
$ pkcs11-tool --init-token --label RuTokenECP --module /usr/lib64/pkcs11/librtpkcs11ecp.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
Удаление объекта
Для удаления объекта необходимо указать его тип и идентификатор (id) или название (label). Открытый и закрытый ключ удаляются отдельно.
$ pkcs11-tool -b -y privkey --login --id 1024 --module /usr/lib64/pkcs11/librtpkcs11ecp.so
Типы объектов:
- privkey – закрытый ключ;
- pubkey – открытый ключ;
- cert – сертификат.
Создание ключевой пары
Создание ключевой пары по алгоритму ГОСТ-2001 (PIN-код пользователя указывается в опции --pin, или запрашивается, если опцию не задать):
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.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
Создание ключевой пары по алгоритму ГОСТ-2012 (256 бит, Paramset A):
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --login --pin 12345678 --keypairgen --key-type GOSTR3410-2012-256:A --id 0001 --label "gost3410-2012"
Using slot 0 with a present token (0x0)
Key pair generated:
Private Key Object; GOSTR3410-2012-256
PARAMS OID: 06092a8503070102010101
label: gost3410-2012
ID: 0001
Usage: sign
Access: sensitive, always sensitive, never extractable, local
Public Key Object; GOSTR3410-2012-256
PARAMS OID: 06092a8503070102010101
VALUE: ed69495c36782333e5a3f2c6cb98fb29f73cb1c1a3d1801c3dc450e0cb148c83
0ebd7ffc5e2b4984022de050606403e27ceee825733f7058faed2d213e4ae15a
label: gost3410-2012
ID: 0001
Usage: verify
Access: local
Создание ключевой пары RSA 2048 (запрашивается PIN-код пользователя):
$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 --login --id 2222 --label myrsakey
Using slot 0 with a present token (0x0)
Logging in to "Rutoken ECP <no label>".
Please enter User PIN:
Key pair generated:
Private Key Object; RSA
label: myrsakey
ID: 2222
Usage: decrypt, sign, unwrap
Public Key Object; RSA 2048 bits
label: myrsakey
ID: 2222
Usage: encrypt, verify, wrap
Ссылки
Rutoken Web/ЭЦП
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP
ssh
ssh-add -s opensc-pkcs11.so