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

Материал из ALT Linux Wiki
(не показано 20 промежуточных версий этого же участника)
Строка 2: Строка 2:
Рутокен ЭЦП 2.0 — токен с аппаратной реализацией российского стандарта электронной подписи, шифрования и хеширования. Обеспечивает безопасное хранение ключей электронной подписи во встроенной защищенной памяти без возможности их экспорта.
Рутокен ЭЦП 2.0 — токен с аппаратной реализацией российского стандарта электронной подписи, шифрования и хеширования. Обеспечивает безопасное хранение ключей электронной подписи во встроенной защищенной памяти без возможности их экспорта.


Rutoken S — основной ключевой носитель для российских СКЗИ (КриптоПро, ViPNet).
Рутокен S — не имеет аппаратной реализации алгоритмов подписи. Устройство предназначено для безопасного хранения ключей шифрования и паролей, защиты персональных данных, и защиты от несанкционированного доступа. Основной ключевой носитель для российских СКЗИ (КриптоПро, ViPNet).
 
Рутокен Lite — не имеет аппаратной реализации алгоритмов подписи.


= Настройка аутентификации =
= Настройка аутентификации =
Строка 11: Строка 13:
Также с его помощью может быть реализована [[двухфакторная аутентификация]].
Также с его помощью может быть реализована [[двухфакторная аутентификация]].


= Электронная подпись =
Для Рутокен ЭЦП 2.0 электронную подпись можно проверить несколькими способами:
*
*
= Значения PIN-кодов на Рутокен по умолчанию =
= Значения PIN-кодов на Рутокен по умолчанию =
У Рутокен:
У Рутокен:
''PIN-коды Рутокен, установленные по умолчанию — Пользователь: 12345678; Администратор: 87654321''
''PIN-коды Рутокен S/Lite/ЭЦП 2.0, установленные по умолчанию — Пользователь: 12345678; Администратор: 87654321''


У Рутокен Web:
У Рутокен Web:
Строка 24: Строка 21:




= Rutoken S =
=КриптоПро=
Подробнее о КриптоПро: [[КриптоПро]]
Для поддержки Рутокен в качестве ключевого носителя в СКЗИ «КриптоПро 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"># 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.}}
{{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
opensc


= Rutoken Web/ЭЦП =
== Утилита pkcs11-tool==
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP
{{Note|[http://forum.rutoken.ru/topic/2799/ С форума Рутокен]: Если Вы хотите работать через opensc-pkcs11.so, то Вы должны обязательно предварительно отформатировать токен через pkcs15-init, а затем создавать и работать с ключами только через opensc-pkcs11.so.
== ssh ==
 
ssh-add -s 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 =
= Рутокен ЭЦП 2.0 =


=== Пакеты для работы с Рутокен ЭЦП 2.0===
== Центр регистрации Рутокен ==
Для работы должна быть установлена библиотека сlibrtpkcs11ecp:
 
<source lang="text" highlight="1"># apt-get install сlibrtpkcs11ecp</source>
Для  генерации ключей, формирования запроса на сертификат и записи сертификата на Рутокен ЭЦП можно воспользоваться ПО «Рутокен плагин»,
{{Note|При работе с Rutoken ЭЦП 2.0 необходимо указывать путь до библиотеки сlibrtpkcs11ecp:
(работает через библиотеку PKCS#11 и совместим с плагином Госуслуг) и ПО «Центр регистрации Рутокен» [https://ra.rutoken.ru ra.rutoken.ru].
 
Веб-сервис управления хранилищем сертификатов и ключей «Центр регистрации Рутокен» позволяет:
* генерировать ключи;
* создавать запросы на сертификаты;
* импортировать сертификаты и связывать их с ключами;
* подписывать документы электронной подписью;
* менять PIN-код на устройстве.
 
=== Установка «Рутокен плагин» ===
'''[http://www.rutoken.ru/products/all/rutoken-plugin/ Рутокен Плагин]''' представляет собой решение для электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов.
Плагин необходим для связи USB-устройств c браузером, он позволяет опознавать и работать с ними. Для того чтобы установить плагин, необходимо загрузить соответствующий установочный файл и запустить его
 
{{Attention|Плагин работает только с браузерами, поддерживающими NPAPI, например, Mozilla Firefox GOST ({{pkg|firefox-gost}}) или Mozilla Firefox ESR ({{pkg|firefox-esr}}).}}
 
Чтобы установить «Рутокен плагин» необходимо:
#Загрузить «Рутокен плагин» со страницы [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>
#Перезапустить браузер.
#Убедиться, что плагин установлен и включен. Сделать это можно на странице {{path|about:addons}} (или {{path|about:plugins}} в более ранних версиях Mozilla Firefox):
#:[[Изображение:Rutoken-plugin-on.png|Рутокен плагин|600px]]
Проверить работу плагина можно на площадке: http://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==
Должны быть установлены пакеты:
<source lang="text" highlight="1"># apt-get install opensc pcsc-lite pcsc-lite-rutokens</source>
В состав opensc входит универсальная утилита pkcs11-tool, которой можно «подложить», например, библиотеку PKCS#11 для работы с Рутокен ЭЦП 2.0 и с ее помощью «управлять» Рутокенами.
=== Библиотека для работы с Рутокен ЭЦП 2.0===
Для работы должна быть установлена библиотека librtpkcs11ecp:
<source lang="text" highlight="1"># apt-get install librtpkcs11ecp</source>
{{Note|При работе с Rutoken ЭЦП 2.0 необходимо указывать путь до библиотеки librtpkcs11ecp:
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/librtpkcs11ecp.so</source>}}
<source lang="text" highlight="1">--module /usr/lib64/pkcs11/librtpkcs11ecp.so</source>}}


Строка 66: Строка 444:
   (empty)
   (empty)
</source>
</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>


=== Проверка наличия сертификатов и ключевых пар ===
=== Проверка наличия сертификатов и ключевых пар ===
Строка 112: Строка 511:
new-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>


Для  генерации ключей, формирования запроса на сертификат и записи сертификата на Рутокен ЭЦП можно воспользоваться ПО «Рутокен плагин»,
===Инициализация токена===
(работает через библиотеку PKCS#11 и совместим с плагином Госуслуг) и ПО «Центр регистрации Рутокен» [https://ra.rutoken.ru ra.rutoken.ru].
{{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>
* импортировать сертификаты и связывать их с ключами;
* подписывать документы электронной подписью;
* менять PIN-код на устройстве.


=== Установка «Рутокен плагин» ===
Типы объектов:
'''[http://www.rutoken.ru/products/all/rutoken-plugin/ Рутокен Плагин]''' представляет собой решение для электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов.
*privkey – закрытый ключ;
Плагин необходим для связи USB-устройств c браузером, он позволяет опознавать и работать с ними. Для того чтобы установить плагин, необходимо загрузить соответствующий установочный файл и запустить его
*pubkey – открытый ключ;
*cert – сертификат.


{{Attention|Плагин работает только с браузерами, поддерживающими NPAPI, например, Mozilla Firefox GOST ({{pkg|firefox-gost}}) или Mozilla Firefox ESR ({{pkg|firefox-esr}}).}}
===Создание ключевой пары===


Чтобы установить «Рутокен плагин» необходимо:
{{Note| Для генерации ключевой пары ГОСТ-2012 на Рутокене используйте [[Rutoken#Генерация_пары_ключей_и_формирование_запроса_на_сертификат|веб-сервис «Центр регистрации Рутокен»]] (https://ra.rutoken.ru/)}}
#Загрузить «Рутокен плагин» можно со страницы [http://www.rutoken.ru/products/all/rutoken-plugin/ по ссылке] (выбрать пакет формата «rpm»):
#:[[Изображение:Rutoken-plugin-download.png|Загрузка «Рутокен плагин»|600px]]
#Установить «Рутокен плагин», выполнив из папки с загруженным пакетом команду (под правами root):
#:<source lang="text" highlight="1"># apt-get install libnpRutokenPlugin*</source>
#Перезапустить браузер.
#Убедиться, что плагин установлен и включен. Сделать это можно на странице {{path|about:addons}} (или {{path|about:plugins}} в более ранних версиях Mozilla Firefox):
#:[[Изображение:Rutoken-plugin-on.png|Рутокен плагин|600px]]
Проверить работу плагина можно на площадке: http://demobank.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>


Для генерации пары ключей и формированию запроса на сертификат с помощью ПО «Центр регистрации Рутокен» следует:
Создание ключевой пары RSA 2048 (запрашивается PIN-код пользователя):
#Зайти на сайт «Центр регистрации Рутокен» https://ra.rutoken.ru:
<source lang="text" highlight="1">$ pkcs11-tool --module /usr/lib64/pkcs11/librtpkcs11ecp.so --keypairgen --key-type rsa:2048 --login --id 2222 --label myrsakey
#:[[Изображение:Ra-rutoken-devices.png|Центр регистрации Рутокен]]
Using slot 0 with a present token (0x0)
#Подключить Рутокен ЭЦП к компьютеру, выбрать токен, ввести PIN-код пользователя:
Logging in to "Rutoken ECP <no label>".
#:[[Изображение:Ra-rutoken-pin.png|Запрос PIN-кода]]
Please enter User PIN:  
#Нажать кнопку «Создать ключ»:
Key pair generated:
#:[[Изображение:Ra-rutoken.png|Интерфейс «Центра регистрации Рутокен»]]
Private Key Object; RSA
#Ввести идентификатор и маркер ключа (опционально), выбрать тип ключа и алгоритм шифрования, затем нажать кнопку «Сгенерировать ключи»:
  label:     myrsakey
#:[[Изображение:Rutoken-key-add.png|Создание ключей]]
  ID:         2222
#:Появится сообщение, о том, что ключи созданы:
  Usage:     decrypt, sign, unwrap
#:[[Изображение:Rutoken-key.png|Ключи созданы]]
Public Key Object; RSA 2048 bits
#Нажать кнопку «Создать заявку на сертификат».
  label:     myrsakey
#На странице создания запроса заполнить поля запроса, выбрать назначение сертификата, нажать кнопку «Создать запрос» (показан пример заполнения полей для физ.лица):
  ID:         2222
#:[[Изображение:Rutoken-cert-new.png|Создание запроса на сертификат]]
  Usage:     encrypt, verify, wrap
#:В раскрывающемся списке можно выбрать шаблон запроса. Шаблоны содержат разное количество полей в блоке информации о пользователе и разные расширения сертификата.
</source>
#Откроется окно содержащее текст запроса. Можно сохранить его на диске, нажав кнопку «Сохранить на диске», или скопировать в буфер обмена, нажав кнопку «Скопировать в буфер обмена»:
{{Note|Рекомендуемая длина ключа RSA — не ниже 2048 бит.}}
#:[[Изображение:Rutoken-cert-request.png|Запрос создан и подписан]]
{{Note|Если у вас уже имеется выписанная на токен ключевая пара RSA с привязанным к ней сертификатом, то вы можете использовать их для аутентификации.}}
#Отправить запрос в удостоверяющий центр.
#После получения сертификата, на странице «Центр регистрации Рутокен» 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
}}


== Ссылки ==
== Ссылки ==
* http://developer.rutoken.ru/pages/viewpage.action?pageId=3440675
* http://developer.rutoken.ru/pages/viewpage.action?pageId=3440675


= Rutoken Web/ЭЦП =
https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP
== ssh ==
ssh-add -s opensc-pkcs11.so
[[Категория:Криптография]]
[[Категория:Криптография]]
{{Category navigation|title=Криптография|category=Криптография|sortkey={{SUBPAGENAME}}}}
{{Category navigation|title=Криптография|category=Криптография|sortkey={{SUBPAGENAME}}}}

Версия от 13:54, 15 марта 2019

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

Рутокен ЭЦП 2.0 — токен с аппаратной реализацией российского стандарта электронной подписи, шифрования и хеширования. Обеспечивает безопасное хранение ключей электронной подписи во встроенной защищенной памяти без возможности их экспорта.

Рутокен S — не имеет аппаратной реализации алгоритмов подписи. Устройство предназначено для безопасного хранения ключей шифрования и паролей, защиты персональных данных, и защиты от несанкционированного доступа. Основной ключевой носитель для российских СКЗИ (КриптоПро, ViPNet).

Рутокен Lite — не имеет аппаратной реализации алгоритмов подписи.

Настройка аутентификации

С помощью следующих инструкций можно настроить аутентификацию в системе с помощью сертификата и ключа на Рутокен ЭЦП:

Также с его помощью может быть реализована двухфакторная аутентификация.

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

У Рутокен: PIN-коды Рутокен S/Lite/ЭЦП 2.0, установленные по умолчанию — Пользователь: 12345678; Администратор: 87654321

У Рутокен Web: PIN на скретч-карте.


КриптоПро

Подробнее о КриптоПро: КриптоПро Для поддержки Рутокен в качестве ключевого носителя в СКЗИ «КриптоПро CSP» необходимо установить модуль поддержки (из архива КриптоПро):

# apt-get install cprocsp-rdr-rutoken*

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

Проверка видимости токена:

$ list_pcsc
Aktiv Co. Rutoken S 00 00
Примечание: Cлужба pcscd должна быть запущена. Запустить службу pcscd и добавить её в автозапуск при загрузке системы:
# systemctl start pcscd
# systemctl enable pcscd

Если при токен не виден может потребоваться удалить пакет pcsc-lite-openct:

# 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"
Для пользователя root будет действовать до перезагрузки


Создание контейнера

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

$ 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

Внимание! Rutoken S — не является токеном — нет аппаратной поддержки алгоритмов, а для использования RSA в opensc < 0.12 были реализованы выгрузка приватного (!!!) ключа из Rutoken S и работа с этим ключом через openssl.


https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-S

Пакеты

pcsc-lite-rutokens opensc

Утилита pkcs11-tool

Примечание: С форума Рутокен: Если Вы хотите работать через opensc-pkcs11.so, то Вы должны обязательно предварительно отформатировать токен через pkcs15-init, а затем создавать и работать с ключами только через opensc-pkcs11.so.

Если Вы хотите работать через наш PKCS#11, то лучше всего форматировать через Утилиту администрирования Рутокен, а затем создавать и работать с ключами только через наш PKCS#11. Это самый поддерживаемый путь. (не для Рутокен S??)

Вы можете отформатировать токен через pkcs15-init и работать с нашим PKCS#11. Но в этом случае через opensc-pkcs11.so ничего не будет доступно.


Примечание: Rutoken S не поддерживает работу с библиотекой rtPKCS11ECP (librtpkcs11ecp.so), т.е. операции генерации и импорта ключей на Рутокен S выполнить не получится.

При работе с Рутокен 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

Центр регистрации Рутокен

Для генерации ключей, формирования запроса на сертификат и записи сертификата на Рутокен ЭЦП можно воспользоваться ПО «Рутокен плагин», (работает через библиотеку PKCS#11 и совместим с плагином Госуслуг) и ПО «Центр регистрации Рутокен» ra.rutoken.ru.

Веб-сервис управления хранилищем сертификатов и ключей «Центр регистрации Рутокен» позволяет:

  • генерировать ключи;
  • создавать запросы на сертификаты;
  • импортировать сертификаты и связывать их с ключами;
  • подписывать документы электронной подписью;
  • менять PIN-код на устройстве.

Установка «Рутокен плагин»

Рутокен Плагин представляет собой решение для электронной подписи, шифрования и двухфакторной аутентификации для Web- и SaaS-сервисов. Плагин необходим для связи USB-устройств c браузером, он позволяет опознавать и работать с ними. Для того чтобы установить плагин, необходимо загрузить соответствующий установочный файл и запустить его

Внимание! Плагин работает только с браузерами, поддерживающими NPAPI, например, Mozilla Firefox GOST (firefox-gost) или Mozilla Firefox ESR (firefox-esr).


Чтобы установить «Рутокен плагин» необходимо:

  1. Загрузить «Рутокен плагин» со страницы по ссылке (выбрать пакет формата «rpm»):
    Загрузка «Рутокен плагин»
  2. Установить «Рутокен плагин». Для этого в контекстном меню скаченного файла выбрать пункт «Открыть в Установка RPM». В открывшемся окне нажать кнопку «Установить»:
    Установка пакетов RPM
    Ввести пароль администратора системы и нажать кнопку «ОК»:
    Ввод пароля администратора системы
    В открывшемся окне нажать кнопку «Установить»:
    Установка пакетов RPM

    Или установить «Рутокен плагин», выполнив из папки с загруженным пакетом команду (под правами root):
    # apt-get install libnpRutokenPlugin*
    
  3. Перезапустить браузер.
  4. Убедиться, что плагин установлен и включен. Сделать это можно на странице about:addons (или about:plugins в более ранних версиях Mozilla Firefox):
    Рутокен плагин

Проверить работу плагина можно на площадке: http://demobank.rutoken.ru/

Генерация пары ключей и формирование запроса на сертификат

Для генерации пары ключей и формированию запроса на сертификат с помощью ПО «Центр регистрации Рутокен» следует:

  1. Зайти на сайт «Центр регистрации Рутокен» https://ra.rutoken.ru:
    Центр регистрации Рутокен
  2. Подключить Рутокен ЭЦП к компьютеру, выбрать токен, ввести PIN-код пользователя:
    Запрос PIN-кода
  3. Нажать кнопку «Создать ключ»:
    Интерфейс «Центра регистрации Рутокен»
  4. Ввести идентификатор и маркер ключа (опционально), выбрать тип ключа и алгоритм шифрования, затем нажать кнопку «Сгенерировать ключи»:
    Создание ключей
    Появится сообщение, о том, что ключи созданы:
    Ключи созданы
  5. Нажать кнопку «Создать заявку на сертификат».
  6. На странице создания запроса заполнить поля запроса, выбрать назначение сертификата, нажать кнопку «Создать запрос» (показан пример заполнения полей для физ.лица):
    Создание запроса на сертификат
    В раскрывающемся списке можно выбрать шаблон запроса. Шаблоны содержат разное количество полей в блоке информации о пользователе и разные расширения сертификата.
  7. Откроется окно содержащее текст запроса. Можно сохранить его на диске, нажав кнопку «Сохранить на диске», или скопировать в буфер обмена, нажав кнопку «Скопировать в буфер обмена»:
    Запрос создан и подписан
  8. Отправить запрос в удостоверяющий центр.
  9. После получения сертификата, на странице «Центр регистрации Рутокен» https://ra.rutoken.ru нажать кнопку «Добавить к ключам сертификат» или выбрать пару ключей и нажать кнопку «Добавить сертификат»
    Добавление сертификата
  10. В открывшемся окне загрузить файл с сертификатом, нажав кнопку «Выбрать», или вставить сертификат из буфера обмена, нажав кнопку «Вставить из буфера обмена», и нажать кнопку «Связать»:
    Добавление сертификата пользователя
    Добавление сертификата пользователя
  11. Сертификат отобразится в списке:
    Контейнер с сертификатом
Примечание: Данные сертификата должны быть в формате PEM или Base64. Если вы получили сертификат в другом формате, его можно конвертировать в нужный формат, выполнив команду:
$ openssl x509 -inform der -in cert.cer -out cert.pem


Утилита pkcs11-tool

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

# apt-get install opensc pcsc-lite pcsc-lite-rutokens

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

Библиотека для работы с Рутокен ЭЦП 2.0

Для работы должна быть установлена библиотека librtpkcs11ecp:

# apt-get install librtpkcs11ecp
Примечание: При работе с Rutoken ЭЦП 2.0 необходимо указывать путь до библиотеки 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 – сертификат.

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

Примечание: Для генерации ключевой пары ГОСТ-2012 на Рутокене используйте веб-сервис «Центр регистрации Рутокен» (https://ra.rutoken.ru/)


Создание ключевой пары по алгоритму ГОСТ-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

Создание ключевой пары 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
Примечание: Рекомендуемая длина ключа RSA — не ниже 2048 бит.
Примечание: Если у вас уже имеется выписанная на токен ключевая пара RSA с привязанным к ней сертификатом, то вы можете использовать их для аутентификации.


Ссылки

Rutoken Web/ЭЦП

https://github.com/OpenSC/OpenSC/wiki/Aktiv-Co.-Rutoken-ECP

ssh

ssh-add -s opensc-pkcs11.so