КриптоПро: различия между версиями

Материал из ALT Linux Wiki
 
(не показана 121 промежуточная версия 21 участника)
Строка 1: Строка 1:
{{Stub}}
{{Stub}}


= О КриптоПро =
== О КриптоПро ==
КриптоПро — линейка криптографических утилит (вспомогательных программ), так называемых "криптопровайдеров". Они используются во многих программах российских разработчиков для генерации [[ЭЦП]], работы с сертификатами, организации структуры PKI и т.д. (см.[http://www.cryptopro.ru/ сайт]).
<!-- Если читатель полагает, что, установив КриптоПро, он может без проблем входить на сайты электронных торговых площадок и подписывать [[ЭЦП]] документы, это не совсем так:
<blockquote style="color: #666;">''«Работать с данными площадками на платформах, отличных от windows, вы, к сожалению, не сможете. Разрабатываемый Ростелекомом плагин для госуслуг не поддерживает работу с нашим криптопровайдером на linux\MacOS. Если же посмотреть в перечень ПО для работы с закрытой частью сайта закупки.гов.ру, то там требуется установка некоего компонента подписи (разраб. Ланит) и использование IE.»''[https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=69158#post69158]</blockquote> -->


КриптоПро — линейка криптографических утилит (вспомогательных программ) — так называемых криптопровайдеров. Они используются во многих программах российских разработчиков для генерации [[ЭЦП]], работы с сертификатами, организации структуры PKI и т.д.
== Совместимость ==
 
Сайт: http://www.cryptopro.ru/
 
<!-- Если читатель думает, что, установив КриптоПро, он может без проблем входить на сайты электронных торговых площадок и подписывать [[ЭЦП]] документы, то это не совсем так:
<blockquote style="color: #666;">''«Работать на платформах, отличных от windows, с данными площадками Вы к сожалению не сможете. Разрабатываемый Ростелекомом плагин для госуслуг не поддерживает работу с нашим криптопровайдером на linux\MacOS. Если же посмотреть в перечень ПО для работы с закрытой частью сайта закупки.гов.ру, то там требуется установка некоего компонента подписи (разраб. Ланит) и использование IE.»''[https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=69158#post69158]</blockquote> -->
 
= Совместимость =


По информации разработчика, с ALT Linux совместимы следующие продукты КриптоПро:
По информации разработчика, с ALT Linux совместимы следующие продукты КриптоПро:
Строка 25: Строка 21:
{{note|В репозитории доступен пакет {{pkg|firefox-gost}}, аналогичный КриптоПро Fox, с патчем от КриптоПро.}}
{{note|В репозитории доступен пакет {{pkg|firefox-gost}}, аналогичный КриптоПро Fox, с патчем от КриптоПро.}}


= Установка =
== Установка КриптоПро CSP ==
 
=== Загрузка ===
== Загрузка ==
Архив с программным обеспечением (КриптоПро CSP 4.0 R4 — сертифицированная версия, КриптоПро CSP 5.0 — несертифицированная) можно [http://www.cryptopro.ru/downloads загрузить] после [http://www.cryptopro.ru/products/csp/overview предварительной регистрации]:
 
*<code>linux-ia32.tgz  (19,3 МБ, для i586)   &mdash; для 32-разрядных систем (x86, rpm)</code>;
Архив с программным обеспечением (КриптоПро CSP 4.0) можно [http://www.cryptopro.ru/downloads загрузить] после [http://www.cryptopro.ru/products/csp/overview предварительной регистрации]:
*<code>linux-amd64.tgz (20,1 МБ, для x86_64) &mdash; для 64-разрядных систем (x64, rpm)</code>.
* linux-ia32.zip (18 МБ, для i586)
* linux-amd64.zip (18 МБ, для x86_64)


[[Изображение:Cryptopro_load.png|Загрузка КриптоПро]]
{{Attention|По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия '''на три месяца'''}}
{{Attention|По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия '''на три месяца'''}}


== Установка пакетов ==
=== Установка ===
 
1. Установите пакет {{pkg|cryptopro-preinstall}}:
1. Распакуйте архив и перейдите в распакованную папку
:<source lang="text" highlight="1"># apt-get install cryptopro-preinstall</source>
 
:Этот пакет установит все требуемое для КриптоПро (включая инфраструктуру поддержки карт Рутокен S и Рутокен ЭЦП).
2. Установите пакет {{pkg|cryptopro-preinstall}}:
{{note|Пакет {{pkg|cryptopro-preinstall}} вытягивает зависимости {{pkg|libpangox-compat}}, {{pkg|opensc}}, {{pkg|pcsc-lite}}, {{pkg|pcsc-lite-rutokens}}, {{pkg|pcsc-lite-ccid}}, {{pkg|newt52}}.}}
<source lang="text" highlight="1"># apt-get install cryptopro-preinstall</source>


Этот пакет установит все требуемое для КриптоПро (включая инфраструктуру поддержки карт Рутокен S и Рутокен ЭЦП).
2. Распакуйте архив, скачанный с официального сайта КриптоПро:
 
:<source lang="text" highlight="1">$ tar -xf linux-amd64.tgz</source>
{{note|Пакет {{pkg|cryptopro-preinstall}} вытягивает зависимости {{pkg|libpangox-compat}}, {{pkg|opensc}}, {{pkg|pcsc-lite}}, {{pkg|pcsc-lite-rutokens}}, {{pkg|pcsc-lite-ccid}}.}}


''Таблица 1. Описание необходимых пакетов КриптоПро.''
''Таблица 1. Описание необходимых пакетов КриптоПро.''
Строка 60: Строка 53:
|-
|-
|{{pkg|lsb-cprocsp-kc1}}||Провайдер криптографической службы KC1
|{{pkg|lsb-cprocsp-kc1}}||Провайдер криптографической службы KC1
|-
|{{pkg|lsb-cprocsp-kc2}}||Провайдер криптографической службы KC2 (требует наличия аппаратного датчика случайных чисел или гаммы)
|-
|-
|-
|{{pkg|lsb-cprocsp-rdr}}||Поддержка ридеров и RNG
|{{pkg|lsb-cprocsp-rdr}}||Поддержка ридеров и RNG
|-
|-
|colspan="2"|'''Дополнительные пакеты:'''
|colspan="2"|'''Дополнительные пакеты:'''
|-
|{{pkg|cprocsp-cptools-gtk}}||[https://www.cryptopro.ru/blog/2019/05/21/instrumenty-cryptopro-krossplatformennyi-graficheskii-interfeis Инструменты КриптоПро - кроссплатформенный графический интерфейс]
|-
|-
|{{pkg|cprocsp-rdr-gui-gtk}}||Графический интерфейс для диалоговых операций
|{{pkg|cprocsp-rdr-gui-gtk}}||Графический интерфейс для диалоговых операций
|-
|-
|{{pkg|cprocsp-rdr-rutoken}}||Поддержка карт Рутокен
|{{pkg|cprocsp-rdr-rutoken}}||Поддержка карт Рутокен
|-
|{{pkg|cprocsp-rdr-jacarta}}||Поддержка карт JaCarta
|-
|-
|{{pkg|cprocsp-rdr-pcsc}}||Компоненты PC/SC для ридеров КриптоПро CSP
|{{pkg|cprocsp-rdr-pcsc}}||Компоненты PC/SC для ридеров КриптоПро CSP
Строка 77: Строка 77:


3. Установите пакеты КриптоПро:
3. Установите пакеты КриптоПро:
 
* под правами пользователя root перейдите в папку с распакованным архивом:
Под правами пользователя root установите базовые пакеты:
*:<source lang="text" highlight="1"># cd /home/user/linux-amd64/</source>
 
* установите базовые пакеты:
<source lang="text" highlight="1"># apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1* lsb-cprocsp-rdr*</source>
*:<source lang="text" highlight="1"># apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1-64* lsb-cprocsp-rdr-64* </source>
 
{{note|Для 32-битной версии вместо последнего пакета — {{pkg|lsb-cprocsp-rdr-4*}}}}
для поддержки токенов (Рутокен S и Рутокен ЭЦП):
* установите пакеты для поддержки токенов (Рутокен S и Рутокен ЭЦП):
 
*:<source lang="text" highlight="1"># apt-get install cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* pcsc-lite-rutokens pcsc-lite-ccid</source>
<source lang="text" highlight="1"># apt-get install cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* pcsc-lite-rutokens pcsc-lite-ccid</source>
{{note|Если возникнут проблемы с отображением контейнеров на Рутокен S  — удалите {{pkg|pcsc-lite-openct}}}}
* установите пакет для поддержки токенов (JaCarta):
*:<source lang="text" highlight="1"># apt-get install cprocsp-rdr-jacarta*</source>
{{note|Для установки {{pkg|cprocsp-rdr-jacarta}} может понадобиться предварительно удалить {{pkg|openct}}.}}
* установите пакет для поддержки носителей с неизвлекаемыми ключами:
*:<source lang="text" highlight="1"># apt-get install cprocsp-rdr-cryptoki*</source>
{{Note|Для корректной работы носителей с неизвлекаемыми ключами через интерфейс PKCS#11 был добавлен {{pkg|cprocsp-rdr-cryptoki}} ( с версии CSP 5.0 R2 12000). Подробнее в [https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/359/2/kriptopro-ssp-50-r2-i-pkcs11 базе знаний КриптоПро CSP].}}
* Для установки сертификатов Главного удостоверяющего центра:
*:<source lang="text" highlight="1"># apt-get install lsb-cprocsp-ca-certs*</source>
* Если есть потребность в установке графических Инструментов КриптоПро:
*:<source lang="text" highlight="1"># apt-get install cprocsp-cptools*</source>
Также можно выполнить установку КриптоПро, запустив {{cmd|./install_gui.sh}} в распакованном каталоге и выбрав необходимые модули:
<source lang="text" highlight="1"># /home/user/install_gui.sh</source>
[[Файл:Install_gui2.png|Установка пакетов КриптоПро]]


'''Примечания:'''
'''Примечания:'''
* Можно установить пакет {{pkg|newt52}} и запустить {{cmd|./install_gui.sh}} в распакованном каталоге
* Для КриптоПро CSP 3.6 R2 потребуется установить пакет {{pkg|cprocsp-compat-altlinux-1.0.0-1.noarch.rpm}}
* Для КриптоПро CSP 3.6 R2 потребуется установить пакет {{pkg|cprocsp-compat-altlinux-1.0.0-1.noarch.rpm}}
* Для установки {{pkg|cprocsp-rdr-gui}} может понадобиться [https://bugzilla.altlinux.org/show_bug.cgi?id=27115 libXm.so.3] ({{pkg|libopenmotif3}}) и для вывода кириллицы {{pkg|fonts-bitmap-cyr_rfx-iso8859-5}}.
* Для установки {{pkg|cprocsp-rdr-gui}} может понадобиться [https://bugzilla.altlinux.org/show_bug.cgi?id=27115 libXm.so.3] ({{pkg|libopenmotif3}}) и для вывода кириллицы {{pkg|fonts-bitmap-cyr_rfx-iso8859-5}}.
* Для установки {{pkg|cprocsp-rdr-gui-gtk}} потребуется предварительно установить {{pkg|libpangox-compat}}.
* Для установки {{pkg|cprocsp-rdr-gui-gtk}} потребуется предварительно установить {{pkg|libpangox-compat}}.
* В версии 4.0.0-alt5 пакета {{pkg|cryptopro-preinstall}} добавлены подпакеты:
* В версии 4.0.0-alt5 пакета {{pkg|cryptopro-preinstall}} добавлены подпакеты:
** {{pkg|cryptopro-preinstall-base}} для установки с {{pkg|cprocsp-compat-altlinux}}, "предоставляющим" {{pkg|lsb}} (в случае нежелательности "лишних" зависимостей вроде {{pkg|libqt3}}), и
** {{pkg|cryptopro-preinstall-base}} для установки с {{pkg|cprocsp-compat-altlinux}}, «предоставляющим» {{pkg|lsb}} (в случае нежелательности «лишних» зависимостей вроде {{pkg|libqt3}}), и
** {{pkg|cryptopro-preinstall-full}} для автоустановки зависимостей {{pkg|cprocsp-rdr-gui}}.
** {{pkg|cryptopro-preinstall-full}} для автоустановки зависимостей {{pkg|cprocsp-rdr-gui}}.


{{Attention|Пакеты КриптоПро становятся нерабочие при их обновлении. Рекомендуется удалить все пакеты и установить пакеты снова.}}
=== Обновление ===
 
{{Attention|Пакеты КриптоПро после обновления утрачивают работоспособность, так что рекомендуется удалить все пакеты и установить их заново.}}
== Прописывание путей к исполняемым файлам ==
Для обновления КриптоПро необходимо:
#Запомнить текущую конфигурацию:
#*набор установленных пакетов:
#*:<source lang="text" highlight="1">$ rpm -qa | grep cprocsp</source>
#*настройки провайдера (для простоты можно сохранить {{path|/etc/opt/cprocsp/config[64].ini}}).
#Удалить штатными средствами ОС все пакеты КриптоПро:
#:<source lang="text" highlight="1"># apt-get remove lsb-cprocsp-base</source>
#Установить аналогичные новые пакеты КриптоПро.
#При необходимости внести изменения в настройки (можно просмотреть diff старого и нового {{path|/etc/opt/cprocsp/config[64].ini}}).
#Ключи и сертификаты сохраняются автоматически.
=== Прописывание путей к исполняемым файлам ===
Утилиты КриптоПро расположены в директориях {{path|/opt/cprocsp/sbin/<название_архитектуры>}} и {{path|/opt/cprocsp/bin/<название_архитектуры>}}.


Чтобы каждый раз не вводить полный путь к утилитам КриптоПро:
Чтобы каждый раз не вводить полный путь к утилитам КриптоПро:
* установите пакет {{pkg|cryptopro-preinstall}} и начните новый сеанс в консоли
* после установки пакета {{pkg|cryptopro-preinstall}} начните новый сеанс пользователя в консоли;
{{note|Не работает для суперпользователя.}}
или
или
* выполните:
* выполните от имени пользователя, который будет запускать команды (будет действовать до закрытия терминала):
<source lang="Bash">export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"</source>
<source lang="Bash">export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"</source>


{{Attention|Если установлен пакет {{pkg|mono}} или {{pkg|mono4-devel}}, может быть конфликт по имени утилиты certmgr}}
{{Attention|Если установлен пакет {{pkg|mono}} или {{pkg|mono4-devel}}, может быть конфликт по имени утилиты certmgr}}


== Проверка лицензии ==
=== Проверка лицензии ===


Проверить срок истечения лицензии можно командой (обратите внимание на строки '''Expires:'''):
Проверить срок истечения лицензии можно командой (обратите внимание на строки '''Expires:'''):
Строка 126: Строка 150:
{{Note|Серийный номер следует вводить с соблюдением регистра символов.}}
{{Note|Серийный номер следует вводить с соблюдением регистра символов.}}


= Настройка КриптоПро =
=== Проверка версии ===
{{todo|Добавить информацию о token-manager значительно упрощающим описанные процедуры}}
 
Проверить версию КриптоПро можно командой:
 
<source lang="text" highlight="1">$ csptest -keyset -verifycontext | sed -n 's/.* Ver:*\([0-9.]\+\).*/\1/p'
4.0.9963
</source>
 
=== Удаление КриптоПро ===
<source lang="text" highlight="1"># apt-get remove lsb-cprocsp-base</source>
{{Note|Если появляется <source lang="text">support_mutex_open("registry_lock") failed:: Permission denied</source>выполните после удаления <source lang="text" highlight="1"># rm -f /var/opt/cprocsp/tmp/.registry_lock</source>}}
 
== Настройка оборудования ==


== Управление ридерами ==
Настройка устройств хранения (носителей) и считывания (считывателей) ключевой информации и датчиков случайных чисел.
{{note|Если не работает под обычным пользователем, то [https://access.redhat.com/blogs/766093/posts/1976313 проверить правила polkit].}}
{{note|Если не работает под обычным пользователем, то [https://access.redhat.com/blogs/766093/posts/1976313 проверить правила polkit].}}
Ридеры (readers) — устройства размещения контейнеров (аппаратные токены, каталог для размещения файлов).  
Считыватели (readers) — устройства, предназначенные для чтения ключей. К считывателям относится считыватели дискет (FAT12), считыватели флеш-накопителей (FLASH), считыватели смарт-карт и токенов, считыватель образа дискеты на жестком диске (HDIMAGE) и др.  


Просмотр доступных ридеров:
Ключевые носители (media) являются местом хранения электронной подписи. В качестве носителя ключевой информации могут использоваться: защищенный флэш-накопитель (токен) ([[Rutoken|Рутокен]], [[JaCarta|JaCarta]], [[ESMART|ESMART]] и др.), смарт-карта, флэш-накопитель, дискета.


Ключевые контейнеры — это способ хранения закрытых ключей, реализованный в КриптоПро. Их физическое представление зависит от типа ключевого носителя (на флеш-накопителе, дискете, жестком диске это каталог в котором хранится набор файлов с ключевой информацией; в случае со смарт-картами — файлы в защищенной памяти смарт-карты).
Встроенный в «КриптоПро CSP» датчик случайных чисел (далее ДСЧ) используется для генерации ключей.
Для смарт-карт: ключи дополнительно защищаются кодом доступа к защищенной памяти смарт-карты (PIN). При всех операциях с защищенной памятью (чтение, запись, удаление...) требуется вводить PIN.
Для других носителей: для повышения безопасности на контейнер можно установить пароль. В этом случае всё содержимое контейнера хранится не в открытом виде, а в зашифрованном на этом пароле. Пароль задается при создании контейнера, в дальнейшем для чтения ключей из контейнера необходимо будет вводить пароль.
{{Note|Подробнее про работе с разными ключевыми носителями: [[Rutoken|Рутокен]], [[JaCarta|JaCarta]], [[ESMART|ESMART]]}}
=== Управление считывателями ===
Современные аппаратные и программно-аппаратные хранилища ключей, такие как Рутокен ЭЦП или eSmart ГОСТ, поддерживаются через интерфейс PCSC. За реализацию этого интерфейса отвечает служба {{cmd|pcscd}}, которую необходимо запустить перед началом работы с соответствующими устройствами:
<source lang="text" highlight="1"># systemctl start pcscd</source>
Можно включить службу {{cmd|pcscd}} в автозапуск при загрузке системы:
<source lang="text" highlight="1"># systemctl enable pcscd</source>
-----
Просмотр доступных (настроенных) считывателей:
<source lang="text" highlight="1">$ cpconfig -hardware reader -view
Nick name: Aladdin R.D. JaCarta [SCR Interface] 00 00
Connect name:
Reader name:
Nick name: FLASH
Connect name:
Reader name:
Nick name: HDIMAGE
Connect name:
Reader name:
</source>
Либо:
<source lang="text" highlight="1">$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
<source lang="text" highlight="1">$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
Строка 153: Строка 222:
[ErrorCode: 0x00000000]</source>
[ErrorCode: 0x00000000]</source>


Ридер HDIMAGE размещается на {{path|/var/opt/cprocsp/keys/<имя пользователя>/}}
Инициализация считывателя HDIMAGE, если его нет в списке доступных считывателей (под правами root):
 
Инициализация ридера HDIMAGE (под правами root):


<source lang="text" highlight="1"># cpconfig -hardware reader -add HDIMAGE store
<source lang="text" highlight="1"># cpconfig -hardware reader -add HDIMAGE store
Строка 162: Строка 229:
Succeeded, code:0x0</source>
Succeeded, code:0x0</source>


Также можно изменить имя ридера, например зададим ридеру {{path|Aktiv Co. Rutoken S 00 00}} имя {{path|Rutoken}} (под правами root):
Считыватель HDIMAGE размещается на {{path|/var/opt/cprocsp/keys/<имя пользователя>/}}.
 
Для работы со считывателем PC/SC требуется пакет cprocsp-rdr-pcsc. После подключения считывателя можно просмотреть список видимых считывателей (не зависимо от того, настроены ли они в КриптоПро как считыватели, зависит только от того, какие установлены драйверы для считывателей):
<source lang="text" highlight="1">$ list_pcsc
Aladdin R.D. JaCarta [SCR Interface] 00 00
Aktiv Co. Rutoken S 00 00</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 'Rutoken'
<source lang="text" highlight="1"># cpconfig -hardware reader -add 'Aktiv Co. Rutoken S 00 00' -name 'Rutoken'
Adding new reader:
Adding new reader:
Строка 170: Строка 245:
</source>
</source>


Современные аппаратные и программно-аппаратные хранилища ключей, такие как Рутокен ЭЦП или eSmart ГОСТ, поддерживаются через интерфейс PCSC. За реализацию этого интерфейса отвечает служба {{cmd|pcscd}}, которую необходимо запустить перед началом работы с соответствующими устройствами:
=== Управление носителями ===
Просмотр доступных носителей:
<source lang="text" highlight="1">$ cpconfig -hardware media -view | iconv -f cp1251</source>
 
=== Управление ДСЧ ===
Просмотр списка настроенных ДСЧ:
<source lang="text" highlight="1">$ cpconfig -hardware rndm -view
 
Nick name: CPSD
Connect name:
Rndm name:
Rndm level: 3
 
Nick name: BIO_GUI
Connect name:
Rndm name:
Rndm level: 4
 
Nick name: BIO_TUI
Connect name:
Rndm name:
Rndm level: 5
</source>
 
=== Настройка криптопровайдера ===
 
Просмотреть доступные типы криптопровайдеров можно командой {{cmd|cpconfig -defprov -view_type}}:
<source lang="text" highlight="1">$ cpconfig -defprov -view_type
Provider type Provider Type Name
_____________ _____________________________________
      75 GOST R 34.10-2001 Signature with Diffie-Hellman Key Exchange
      80 GOST R 34.10-2012 (256) Signature with Diffie-Hellman Key Exchange
      81 GOST R 34.10-2012 (512) Signature with Diffie-Hellman Key Exchange
      16 ECDSA Full and AES
      24 RSA Full and AES
</source>
Просмотр свойств криптопровайдера нужного типа:
<source lang="text" highlight="1">$ cpconfig -defprov -view -provtype 80
Listing Available Providers:
Provider type Provider Name
_____________ _____________________________________
      80 Crypto-Pro GOST R 34.10-2012 KC1 CSP
      80 Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider


<source lang="text" highlight="1"># service pcscd start
Provider types and provider names have been listed.
Starting pcscd service:                        [ DONE ]</source>
</source>


== Управление контейнерами ==
=== Управление контейнерами ===


==== Создание контейнера ====
==== Создание контейнера ====
{{note|Для того, чтобы сертификат из контейнера можно было использовать через модуль pkcs11 (из пакета {{pkg|lsb-cprocsp-pkcs11}}) в браузере {{pkg|firefox-gost}}, необходимо создать его с -provtype 75 (поддержка ГОСТ-2001. Просмотреть доступные типы провайдеров можно командой {{cmd|cpconfig -defprov -view_type}})}}
{{note|Для того, чтобы сертификат из контейнера можно было использовать через модуль pkcs11 (из пакета {{pkg|lsb-cprocsp-pkcs11}}) в браузере {{pkg|firefox-gost}}, необходимо создать его с -provtype 75 (поддержка ГОСТ-2001).}}
 
{{Attention|C 1 января 2019 г. по указанию ФСБ РФ и Минкомсвязи всем аккредитованным УЦ запрещен выпуск сертификатов ЭП по ГОСТ 2001.
Ключи и запрос на сертификат необходимо формировать ГОСТ 2012.}}


Создадим контейнер с именем «''test''» в локальном ридере ''HDIMAGE''.
Создадим контейнер с именем «''test''» в локальном считывателе ''HDIMAGE''.


<source lang="text" highlight="1">$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\HDIMAGE\test'</source>
<source lang="text" highlight="1">$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\HDIMAGE\test'</source>


При установленном пакете {{pkg|cprocsp-rdr-gui-gtk}} будет показано графическое окно, где предложат двигать курсором мыши:
При установленном пакете {{pkg|cprocsp-rdr-gui-gtk}} будет показано графическое окно, где будет предложено перемещать указатель мыши или нажимать клавиши:
 
[[Изображение:Cryptopro-newkeyset-ru.png|Генерация случайной последовательности]]
 
{{note|Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры.}}
 
После этого будет предложено указать пароль на контейнер (можно указать пустой, тогда пароль запрашиваться не будет):
 
[[Изображение:Cryptopro-newkeyset-passwordset.png|Установка пароля на контейнер]]
 
{{Attention|При создании контейнера на токене:
<source lang="text" highlight="1">$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 01 00\test'</source>


[[Изображение:Cryptopro-newkeyset.png]]
Пароль не создается, а предъявляется (PIN-код пользователя):
[[Изображение:Cryptopro-newkeyset-pin.png|Запрос пин-кода для аутентификации на носителе]]}}


{{note|Если такой пакет не установлен, будет предложено ввести любые символы с клавиатуры}}
После указания пароля снова будет предложено перемещать указатель мыши.


После показа окна будет предложено указать пароль на контейнер (можно указать пустой, тогда пароль запрашиваться не будет) и снова предложат двигать курсором мыши.
Вывод команды:


<source lang="text">CSP (Type:75) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
<source lang="text">CSP (Type:75) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6679219
AcquireContext: OK. HCRYPTPROV: 6679219
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: "card"
Container name: "test"
Signature key is not available.
Signature key is not available.
Attempting to create a signature key...
Attempting to create a signature key...
Строка 212: Строка 344:
[ErrorCode: 0x00000000]
[ErrorCode: 0x00000000]
</source>
</source>
В КриптоПро 5 появилась возможность интерактивно выбирать ридер и тип создаваемого контейнера. Теперь можно создавать неизвлекаемые контейнеры. <br>
 
Для этого необходимо выполнить команду, где {{path|test5inside}} - имя контейнера :
Локальный контейнер создан.
<source lang="text" highlight="1">$ csptest -keyset -provtype 75 -newkeyset -cont test5inside</source>
 
Откроется окно выбора ридера и способа создания контейнера:<br>
В КриптоПро 5 появилась возможность интерактивно выбирать носитель и тип создаваемого контейнера. Теперь можно создавать неизвлекаемые контейнеры. <br>
Для этого необходимо выполнить команду, где {{path|testinside_2012}} имя контейнера:
<source lang="text" highlight="1">$ csptest -keyset -provtype 80 -newkeyset -cont testinside_2012</source>
 
Откроется окно выбора носителя и способа создания контейнера. Для некоторых носителей нет возможности выбрать способ создания контейнера (Рутокен S, JaCarta PKI):
 
[[Файл:CryptoPro5_keyset.png|Создание контейнера]]<br>
 
Для некоторых носителей можно выбрать способ создания контейнера (Рутокен ЭЦП, JaCarta-2 PKI/ГОСТ).<br>
Создание неизвлекаемого контейнера:<br>
Создание неизвлекаемого контейнера:<br>
[[Файл:CryptoPro5 keyset win 1.jpg|Создание неизвлекаемого контейнера]]<br>
[[Файл:CryptoPro5 keyset win 1.jpg|Создание неизвлекаемого контейнера]]<br>
Строка 223: Строка 363:
==== Просмотр доступных контейнеров ====
==== Просмотр доступных контейнеров ====


<source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc | iconv -f cp1251
{{Attention|При подключении токена в порт USB3, контейнеры видны не будут.}}
 
{{Note|Вы можете загрузить все сертификаты с подключенных токенов командой: <source lang="text">csptestf -absorb -certs -autoprov</source>}}
 
Проверить наличие контейнеров можно с помощью команды:
 
<source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6679203
AcquireContext: OK. HCRYPTPROV: 6679203
Строка 230: Строка 376:
Total: SYS: 0,000 sec USR: 0,070 sec UTC: 0,130 sec
Total: SYS: 0,000 sec USR: 0,070 sec UTC: 0,130 sec
[ErrorCode: 0x00000000]</source>
[ErrorCode: 0x00000000]</source>
Локальный контейнер создан.


{{Attention|Имена контейнеров могут содержать названия в кодировке cp1251 (например, на токенах), что делает работу с ними по этим именам проблематичной. Можно показать список контейнеров с их уникальными именами командой: <source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc -uniq
{{Attention|Имена контейнеров могут содержать названия в кодировке cp1251 (например, на токенах), что делает работу с ними по этим именам проблематичной. Можно показать список контейнеров с их уникальными именами командой: <source lang="text" highlight="1">$ csptest -keyset -enum_cont -fqcn -verifyc -uniq
Строка 241: Строка 385:
Total: SYS: 0,020 sec USR: 0,190 sec UTC: 1,510 sec
Total: SYS: 0,020 sec USR: 0,190 sec UTC: 1,510 sec
[ErrorCode: 0x00000000]</source> Уникальные имена указаны после символа «&#124;».}}
[ErrorCode: 0x00000000]</source> Уникальные имена указаны после символа «&#124;».}}
Просмотр подробной информации о контейнере:
<source lang="text" highlight="1">csptestf -keyset -container '\\.\HDIMAGE\test' -info</source>


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


<source lang="text" highlight="1">$ csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'
<source lang="text" highlight="1">$ csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'
Строка 252: Строка 401:
== Управление сертификатами ==
== Управление сертификатами ==


=== Создание запроса ===
cryptcp — приложение командной строки для создания запросов на сертификаты, шифрования и расшифрования файлов, создания и проверки электронной подписи файлов с использованием сертификатов открытых ключей, хэширования файлов. Результатом работы приложения в большинстве случаев является файл с CMS-сообщением (PKCS#7) в кодировке DER или BASE64.
 
=== Создание запроса на получение сертификата ===
Создание запроса на получение сертификата средствами КриптоПро:
<source lang="text" highlight="1">cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr</source>


Для создания запроса потребуется:
Для создания запроса на получение сертификата потребуется:
# DN (cn=Test User5,e=cas@altlinux.org)
# DN — данные, которые будут храниться в поле Subject сертификата (cn=Test User5,e=cas@altlinux.org).
# имя контейнера (в локальном хранилище hdimage: {{path|\\.\HDIMAGE\test}})
# Имя контейнера вместе со считывателем (например, в локальном хранилище hdimage: {{path|\\.\HDIMAGE\test}}).
# имя файла запроса ({{path|test5.csr}})
# Имя файла, в котором следует сохранить запрос ({{path|test5.csr}}).


{{Attention|Для использования проверки подлинности клиента в браузере потребуется также указать, что запрос создается по ГОСТ 2001 и добавляется тип применения подлинности клиента: {{cmd|-provtype 75 -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2"}}.}}
{{Attention|Для использования проверки подлинности клиента в браузере потребуется также указать, что запрос создается по ГОСТ 2001 и добавляется тип применения подлинности клиента: {{cmd|-provtype 75 -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2"}}.}}
С помощью опции -certusage можно указать OID назначение сертификата.
Назначение сертификата представляется в сертификате объектным идентификатором, присвоенным этой политике, — OID. Если в сертификате указано несколько политик, то это означает, что сертификат соответствует всем этим политикам списка.


''Таблица 2. Типы применения.''
''Таблица 2. Типы применения.''
Строка 281: Строка 437:
|}
|}


''Таблица 3. Поле Subject сертификата''
{|class="standard"
!OID
!Алиас
!Назначение
!Примечание
|-
|{{term|2.5.4.3}}||CN||Общее имя||Наименование ЮЛ (если ИНН начинается с "00") или ФИО владельца. Длина не более 64 символов
|-
|{{term|2.5.4.4}}||SN||Фамилия
|-
|{{term|2.5.4.42}}||GN/G||Имя Отчество||Общая длина текста в полях SN и G должна быть не более 64 символов (с учетом одного пробела между текстом из Фамилии и текстом из Имени)
|-
|{{term|1.2.840.113549.1.9.1}}||emailAddress/E||Адрес электронной почты||ivanov@mail.mail
|-
|{{term|1.2.643.100.3}}||SNILS||СНИЛС||Должно быть записано 11 цифр (допускается 11 нулей для иностранных граждан).
|-
|{{term|1.2.643.3.131.1.1}}||INN||ИНН||12 цифр, для ЮЛ первые две цифры 00
|-
|{{term|2.5.4.6}}||C||Страна||Двухсимвольный код страны (RU)
|-
|{{term|2.5.4.8}}||S||Регион||Наименование субъекта РФ ЮЛ: по адресу местонахождения,
ФЛ: по адресу регистрации (39 Калининградская обл.)
|-
|{{term|2.5.4.7}}||L||Населенный пункт||Наименование населенного
пункта (Калининград)
|-
|{{term|2.5.4.9}}||street||Название улицы, номер дома||Пр-т Победы 14 кв.3
|-
|
|-
|{{term|2.5.4.10}}||O||Организация||Полное или сокращенное
наименование организации (только для ЮЛ)
|-
|{{term|2.5.4.11}}||OU||Подразделение||В случае выпуска СКПЭП на должностное лицо – соответствующее подразделение организации (только для ЮЛ)
|-
|{{term|2.5.4.12}}||T||Должность||В случае выпуска СКПЭП на должностное лицо – его должность (только для ЮЛ)
|-
|{{term|1.2.643.100.1}}||OGRN||ОГРН||ОГРН организации (только для ЮЛ)
|}
Создать запрос на субъект "cn=Test User5,e=cas@altlinux.org", используя открытый ключ, сгенерированный в контейнере test текущего пользователя криптопровайдером «GOST R 34.10-2001» (тип — 75) и сохранить его в файл test5.req, назначение ключа — аутентификация и защита электронной почты:
<source lang="text" highlight="1">$ cryptcp -creatrqst -dn "cn=Test User5,e=cas@altlinux.org" -provtype 75 -nokeygen -cont '\\.\HDIMAGE\test' -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test5.req
<source lang="text" highlight="1">$ cryptcp -creatrqst -dn "cn=Test User5,e=cas@altlinux.org" -provtype 75 -nokeygen -cont '\\.\HDIMAGE\test' -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test5.req
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Command prompt Utility for file signature and encryption.
Утилита командной строки для подписи и шифрования файлов.
Request is saved in file.
Запрос успешно создан и сохранен в файле.
[ReturnCode: 0]
[ErrorCode: 0x00000000]
</source>
 
Созданный запрос будет сохранен в файле test5.req. Эти данные нужны для получения сертификата в удостоверяющем центре.
 
Создать запрос на физическое лицо, используя открытый ключ, сгенерированный в контейнере test_2012 (тип — 80) текущего пользователя криптопровайдером «Crypto-Pro GOST R 34.10-2012 KC1 CSP» (тип — 80) и сохранить его в файл test2012.req, назначение ключа — аутентификация и защита электронной почты:
 
<source lang="text" highlight="1-14">$ cryptcp -creatrqst \
-dn "CN=Иванов Иван Иванович,SN=Иванов,G=Иван Иванович,E=ivanov@mail.mail,C=RU,L=Калининград,ST=39 Калининградская обл.,street=Пр-т Победы 14 кв.3,SNILS=102301111222,INN=11223344556" \
-provtype 80 -nokeygen  \
-cont '\\.\HDIMAGE\test_2012'  \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test2012.req
</source>
</source>
Тот же запрос, используя OID:
<source lang="text" highlight="1-14">$ cryptcp -creatrqst \
-dn "2.5.4.3=Иванов Иван Иванович,2.5.4.4=Иванов,2.5.4.42=Иван Иванович,1.2.840.113549.1.9.1=ivanov@mail.mail,2.5.4.6=RU,2.5.4.8=39 Калининградская обл.,2.5.4.7=Калининград,2.5.4.9=Пр-т Победы 14 кв.3,1.2.643.3.131.1.1=102301111222,1.2.643.100.3=11223344556" \
-provtype 80 -nokeygen -cont '\\.\HDIMAGE\test_2012' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test2012.req</source>
{{note|Подробную [http://cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf инструкцию] по работе с утилитой cryptcp можно скачать со страницы http://cryptopro.ru/products/other/cryptcp}}
=== Установка сертификата ===
Добавление сертификата, без привязки к ключам (только проверка ЭЦП):


{{note|Подробную [http://cryptopro.ru/sites/default/files/products/cryptcp/cryptcp_5.0.x.pdf инструкцию] по работе с утилитой cryptcp можно скачать со странички http://cryptopro.ru/products/other/cryptcp}}
<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 '\\.\HDIMAGE\test' </source>


Показать содержимое запроса:
Запись сертификата клиента в контейнер:
<source lang="text" highlight="1">$ cat test5.req
<source lang="text" highlight="1">$ cryptcp -instcert -provtype 80 -cont '\\.\HDIMAGE\test' -ku -askpin cert.cer</source>
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0
Основные опции:
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=</source>


* Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
-provtype — указать тип криптопровайдера (по умолчанию 75);
* Нажмите «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64».
* Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла {{path|test5.csr}} и нажмите кнопку «Выдать».
* Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя {{path|certnew.p7b}})


Просмотреть полученный сертификат:
-provname — указать имя криптопровайдера;


<source lang="text" highlight="1">$ certmgr -list -file certnew.p7b
-cont — задать имя ключевого контейнера (по умолчанию выбор из списка);
Certmgr 1.0 (c) "CryptoPro",  2007-2010.
program for managing certificates, CRLs and stores


=============================================================================
-ku — использовать контейнер пользователя (CURRENT_USER);
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash          : 0x046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID          : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after    : 05/08/2019  13:54:03 UTC
PrivateKey Link    : No                 
2-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : CN=Test User5, E=cas@altlinux.org
Serial              : 0x120012447FA7E652B76808CD7900000012447F
SHA1 Hash          : 0xcb8e7ca68bea0ffbbd84c326d565de68cd8a15f5
SubjKeyID          : 6f7507353601d6d943f1406aae60c21ab65190e0
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 28/06/2016  10:22:36 UTC
Not valid after    : 28/09/2016  10:32:36 UTC
PrivateKey Link    : No                 
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================


[ErrorCode: 0x00000000]
-km — использовать контейнер компьютера (LOCAL_MACHINE);
</source>


Установите сертификат удостоверяющего центра:
-dm — установка в хранилище компьютера (LOCAL_MACHINE);


<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uRoot</source>
-du — установка в хранилище пользователя (CURRENT_USER);


(нажмите 1)
-askpin  — запросить пароль ключевого контейнера из с консоли;


Установите сертификат клиента (введите пароль на контейнер \\.\HDIMAGE\test при запросе):
<имя файла>  — имя файла, содержащего сертификат.


<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test' -inst_to_cont</source>
Добавление сертификата УЦ из файла certne_ucw.cer в хранилище машины (для текущего пользователя):
<source lang="text" highlight="1">$ certmgr -inst -file certne_ucw.cer -store uRoot</source>


(нажмите 2)
Добавление корневых сертификатов из файла cert.p7b (для текущего пользователя):
<source lang="text" highlight="1">$ certmgr -inst -all -file cert.p7b -store uRoot</source>
Необходимо последовательно добавить все сертификаты.


{{Note|Корневые сертификаты для всех пользователей ставятся в хранилище машины - т.е. с параметром {{cmd|-store mRoot}}. Например: {{cmd|certmgr -store mRoot -inst -file /tmp/cert.cer}}
{{Note|Корневые сертификаты для всех пользователей ставятся в хранилище машины т.е. с параметром {{cmd|-store mRoot}}. Например: {{cmd|# certmgr -inst -store mRoot -file /tmp/cert.cer}}}}
CRL ставятся точно также только с параметром -crl. CRL ставить не обязательно, но нужно убедиться что в {{path|/etc/opt/cprocsp/config64.ini}} в секции apppath указан правильный путь для libcurl.so. По умолчанию там путь до библиотеки от КриптоПро и если curl от КриптоПро не установлен - загрузка CRL работать не будет. Установка параметра на 64-битных системах: <source lang="text" highlight="1"># cpconfig -ini \\config\\apppath -add string libcurl.so /opt/cprocsp/lib/amd64/libcpcurl.so</source>}}


=== Просмотр сертификатов ===
=== Просмотр сертификатов ===


Для просмотра установленных сертификатов можно воспользоваться командой:
<source lang="text" highlight="1">$ certmgr -list  
<source lang="text" highlight="1">$ certmgr -list  
Certmgr 1.0 (c) "CryptoPro",  2007-2010.
Certmgr 1.1 (c) "Crypto-Pro",  2007-2018.
program for managing certificates, CRLs and stores
program for managing certificates, CRLs and stores


Строка 372: Строка 559:
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 28/06/2016 10:22:36 UTC
Not valid before    : 18/12/2018 13:41:38 UTC
Not valid after    : 28/09/2016 10:32:36 UTC
Not valid after    : 18/03/2019 13:51:38 UTC
PrivateKey Link    : Yes                 
PrivateKey Link    : Yes                 
Container          : HDIMAGE\\test.000\2EF8
Container          : HDIMAGE\\test.000\2EF8
Provider Name      : Crypto-Pro GOST R 34.10-2001 KC1 CSP
Provider Name      : Crypto-Pro GOST R 34.10-2001 KC1 CSP
Provider Info      : ProvType: 75, KeySpec: 1, Flags: 0x0
Provider Info      : ProvType: 75, KeySpec: 1, Flags: 0x0
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
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.5.5.7.3.2
Строка 384: Строка 574:
[ErrorCode: 0x00000000]</source>
[ErrorCode: 0x00000000]</source>


=== Удаление ===
Просмотр сертификатов в локальном хранилище uMy:
<source lang="text" highlight="1">$ certmgr -list -store uMy</source>


Удалить сертификат под номером 1:
{{Note|Если в списке сертификатов выводится '''PrivateKey Link: Yes. Container: HDIMAGE\\test.000\2EF8''', то сертификат ассоциирован (связан) с приватным ключом, а если выводится '''PrivateKey Link: No''' — связи нет, и использовать такой контейнер для подписи не удастся:  
<source lang="text" highlight="1">$ certmgr -delete 1</source>


Удалить все сертификаты:
[[Изображение:Certmgr_list.png|Ассоциация сертификата с контейнером]]}}
<source lang="text" highlight="1-2">$ certmgr -delete -all
$ certmgr -delete -store uroot</source>


=== Импорт персонального сертификата ===
Просмотр сертификатов в контейнере:
<source lang="text" highlight="1">$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken'</source>


Вы можете импортировать собственный сертификат в локальный считыватель '''HDIMAGE'''.
Просмотр корневых сертификатов:
<source lang="text" highlight="1">$ certmgr -list -store uRoot</source>


Если у вас нет сертификата, самое время его создать:
=== Получение сертификата в УЦ и его установка ===


* Создание через [[cert-sh-functions]] (требует установки пакета {{pkg|cert-sh-functions}})
Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия:
* [[Создание сертификатов PKCS12]] (достаточно только пакета {{pkg|openssl}})


Допустим, мы пошли по первому пути и создали сертификат web-server ('''делать это строго под правами root'''):
# Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
<source lang="text" highlight="1-2"># . cert-sh-functions
# Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»:
# ssl_generate 'web-server'</source>
#:[[Изображение:Certrqxt1.png|Ссылка «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»]]
# Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла {{path|test5.req}} и нажмите кнопку «Выдать»:
#:[[Изображение:Certrqxt.png|Выдача запроса на сертификат]]
# Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя {{path|certnew.p7b}}):
#:[[Изображение:Certrqxt2.png|Ссылка «Загрузить цепочку сертификатов»]]


Сертификат по умолчанию будет лежать в {{path|/var/lib/ssl/certs/web-server.cert}}, а ключ ­— в {{path|/var/lib/ssl/private/web-server.key}}
{{Note|Просмотреть содержимое файла {{path|test5.req}} можно, выполнив команду:
<source lang="text" highlight="1">$ cat test5.req
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=</source>}}


Для импорта потребуется файл сертификата и закрытый ключ в [http://ru.wikipedia.org/wiki/PKCS12 контейнере PKCS#12].
Просмотреть полученный сертификат можно, выполнив команду:


Создадим для нашего ключа и сертификата необходимый контейнер:
<source lang="text" highlight="1">$ certmgr -list -file certnew.p7b
<source lang="text" highlight="1">openssl pkcs12 -export -in /var/lib/ssl/certs/web-server.cert -inkey /var/lib/ssl/private/web-server.pem -out web-server.p12</source>
Certmgr 1.1 (c) "CryptoPro",  2007-2018.
program for managing certificates, CRLs and stores


{{Note|При создании контейнера будет дважды запрошен пароль для экспорта. По соображениям безопасности вводимые символы не показываются. После ввода каждого пароля нажимайте Enter.}}
=============================================================================
1-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash          : 0x046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID          : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after    : 05/08/2019  13:54:03 UTC
PrivateKey Link    : No                 
2-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject            : CN=Test User5, E=cas@altlinux.org
Serial              : 0x120012447FA7E652B76808CD7900000012447F
SHA1 Hash          : 0xcb8e7ca68bea0ffbbd84c326d565de68cd8a15f5
SubjKeyID          : 6f7507353601d6d943f1406aae60c21ab65190e0
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 18/12/2018  13:41:38 UTC
Not valid after    : 18/03/2019  13:51:38 UTC
PrivateKey Link    : No
CA cert URL        : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================


Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде):
[ErrorCode: 0x00000000]
<source lang="text" highlight="1"># openssl pkcs12 -in web-server.p12 -nodes | grep BEGIN
</source>
Enter Import Password:
MAC verified OK
-----BEGIN CERTIFICATE-----
-----BEGIN PRIVATE KEY-----</source>
И сертификат и ключ попали в контейнер.


После генерации сертификата проверим наличие считывателя:
Цепочка сертификатов содержит два сертификата:
<source lang="text" highlight="1"># cpconfig -hardware reader -view | grep ^Nick
*Сертификат удостоверяющего центра.
Nick name: FLASH
*Сертификат клиента.
Nick name: HDIMAGE</source>


Для импорта сертификата в КриптоПро используйте программу {{cmd|certmgr}}. В нашем случае:
Для установки сертификата удостоверяющего центра:
<source lang="text" highlight="1">$ certmgr -inst -file web-server.p12 -cont HDIMAGE</source>
* выполните команду:
*:<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uRoot</source>
* в ответ на запрос команды нажмите 1.


Если Вам необходимо импортировать сертификат с токена:
Для записи сертификата клиента в контейнер:
<source lang="text" highlight="1">certmgr -inst -cont '\\.\Aktiv Co. Rutoken S 00 00\le-fb25d25d-23e9-4723-ae4c-fe0c95f2fcc1'</source>
* выполните команду:
Если контейнер защищен паролем используйте ключ -pin <пароль>
*:<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test'</source>
* в ответ на запрос команды нажмите 2.
*введите пароль на контейнер \\.\HDIMAGE\test при запросе:
*:[[Изображение:Keyset_pass.png|Запрос пароля на контейнер]]


== Использование cptools ==
{{Note|Корневые сертификаты для всех пользователей ставятся в хранилище машины — т.е. с параметром {{cmd|-store mRoot}}. Например: {{cmd|# certmgr -inst -store mRoot -file /tmp/cert.cer}}
В версии КриптоПРО 5 появилась графическая утилита для работы с сертификатами - cptools.<br>
CRL ставятся точно также только с параметром -crl. CRL ставить не обязательно, но нужно убедиться что в {{path|/etc/opt/cprocsp/config64.ini}} в секции apppath указан правильный путь для libcurl.so. По умолчанию там путь до библиотеки от КриптоПро и если curl от КриптоПро не установлен — загрузка CRL работать не будет. Установка параметра на 64-битных системах: <source lang="text" highlight="1"># cpconfig -ini \\config\\apppath -add string libcurl.so /opt/cprocsp/lib/amd64/libcpcurl.so</source>}}
Для использования cptools необходимо установить пакет {{path|cprocsp-cptools-gtk}} из скаченного архива:
<source lang="text" highlight="1"># apt-get install cprocsp-cptools-gtk*</source>
После этого её можно запустить из консоли:
<source lang="text" highlight="1">$ cptools</source>
С её помощью можно установить сертификат из токена в хранилище uMy:<br>
[[Файл:CryptoPro5-cptools-import-cert.jpg]]


= Проверка цепочки сертификатов =
=== Проверка цепочки сертификатов ===


{{Attention|В кэше сертификатов для выпущенного сертификата должны присутствовать корневые сертификаты удостоверяющих центров. В противном случае он будет недоступен в плагине для браузера!}}
{{Attention|В кэше сертификатов для выпущенного сертификата должны присутствовать корневые сертификаты удостоверяющих центров. В противном случае он будет недоступен в плагине для браузера!}}


''Таблица 3. Сертификаты популярных удостоверяющих центров.''
''Таблица 4. Сертификаты популярных удостоверяющих центров.''
{|class="standard"
{|class="standard"
!Удостоверяющий Центр
!Удостоверяющий Центр
Строка 463: Строка 685:


Для проверки можно скопировать персональный сертификат в файл:
Для проверки можно скопировать персональный сертификат в файл:
<source lang="text" highlight="1">cryptcp -copycert -dn "CN=Иванов Иван Иванович" -df  tt.cer
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Будет использован следующий сертификат:
Субъект:11223344556, 102301111222, Пр-т Победы 14 кв.3, 39 Калининградская обл., Калининград, RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович
Действителен с 21.02.2019 13:16:38 по 21.05.2019 13:26:38
Цепочки сертификатов проверены.
Копирование сертификатов завершено.
[ErrorCode: 0x00000000]
</source>
Из вывода следует, что все сертификаты есть в цепочке сертификатов.
Если же команда возвращает «Цепочка сертификатов не проверена для следующего сертификата:» или другую ошибку:


<source lang="text" highlight="1">$ cryptcp -copycert -dn E=user@test.ru -df personal.cer
<source lang="text" highlight="1">$ cryptcp -copycert -dn E=user@test.ru -df personal.cer
Строка 481: Строка 719:
(нажмите C и Enter, чтобы выйти).
(нажмите C и Enter, чтобы выйти).


Запуск с отладкой цепочки:
Можно запустить вышеуказанную команду с отладкой цепочки:
<source lang="text" highlight="1">$ CP_PRINT_CHAIN_DETAIL=1 cryptcp -copycert -dn E=user@test.ru -df personal.cer
<source lang="text" highlight="1">$ CP_PRINT_CHAIN_DETAIL=1 cryptcp -copycert -dn E=user@test.ru -df personal.cer
...
...
Строка 514: Строка 752:
Всё в порядке и сертификат виден в плагине Cades.
Всё в порядке и сертификат виден в плагине Cades.


= Электронная подпись =
=== Удаление сертификата ===
{{todo|Добавить информацию о rosa-crypto-tool и gost-crypto-gui значительно упрощающих описанные процедуры}}
 
Удалить сертификат c "CN=Иванов Иван Иванович" из хранилища КриптоПро:
<source lang="text" highlight="1">$ certmgr -delete -dn "CN=Иванов Иван Иванович"</source>
 
Удалить сертификат c "CN=Иванов Иван Иванович" из контейнера:
<source lang="text" highlight="1">$ certmgr -delete -dn "CN=Иванов Иван Иванович" -container '\\.\Aladdin R.D. JaCarta [SCR Interface] 01 00\test'</source>
 
Удалить все сертификаты из хранилища КриптоПро:
<source lang="text" highlight="1-2">$ certmgr -delete -all
$ certmgr -delete -store uRoot</source>
 
Удалить все сертификаты установленные в хранилище машины:
<source lang="text" highlight="1"># certmgr -delete -store mRoot</source>
 
=== Экспорт контейнера и сертификата на другую машину ===
Если при создании контейнера он был помечен как экспортируемый (ключ -exportable), то его можно экспортировать на USB-диск:
<source lang="text" highlight="1">$ csptest -keycopy -contsrc '\\.\HDIMAGE\test_export' -contdest '\\.\FLASH\test_new'
CryptAcquireContext succeeded.HCRYPTPROV: 36965843
CryptAcquireContext succeeded.HCRYPTPROV: 37297363
Total: SYS: 0,100 sec USR: 0,200 sec UTC: 13,420 sec
[ErrorCode: 0x00000000]</source>
При этом потребуется ввести пароль от контейнера '\\.\HDIMAGE\test_export' и задать пароль на новый контейнер '\\.\FLASH\test_new'.
 
{{Note|Будьте внимательны при операциях импорта/экспорта контейнера с использованием токена:
<source lang="text" highlight="1">$ csptest -keycopy -contsrc '\\.\HDIMAGE\test_export' -contdest '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\test_export'</source>
необходимо будет предъявлять pin токена.}}
 
Просмотр списка контейнеров:
<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: 41622371
\\.\FLASH\test_new
\\.\HDIMAGE\test_export
\\.\HDIMAGE\test
OK.
Total: SYS: 0,030 sec USR: 0,060 sec UTC: 0,160 sec
[ErrorCode: 0x00000000]</source>
 
Экспортировать сертификат из локального хранилища в файл:
<source lang="text" highlight="1">$ certmgr -export -dn 'CN=Ли Александр Сергеевич' -dest test.cer</source>
Скопировать сертификат на USB-диск:
<source lang="text" highlight="1">$ cp test.cer /run/media/user/NAMEUSB/</source>
 
Экспорт контейнера с USB-диска на жесткий диск:
<source lang="text" highlight="1">$ csptest -keycopy -contsrc '\\.\FLASH\test_new' -contdest '\\.\HDIMAGE\test_export'
CryptAcquireContext succeeded.HCRYPTPROV: 35778003
CryptAcquireContext succeeded.HCRYPTPROV: 36125907
Total: SYS: 0,050 sec USR: 0,240 sec UTC: 19,390 sec
[ErrorCode: 0x00000000]</source>
 
{{Note|Экспорт сертификата на жесткий диск необходимо выполнять под пользователем, который будет использовать данный контейнер для подписи.}}
 
Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище My:
<source lang="text" highlight="1">$ certmgr -inst -file /run/media/user/NAMEUSB/test.cer -cont '\\.\HDIMAGE\test_export'</source>
 
=== Экспорт сертификатов на другую машину ===
 
Закрытые ключи к сертификатам находятся в {{path|/var/opt/cprocsp/keys}}.
 
Для экспорта сертификатов необходимо:
 
# Перенести ключи из {{path|/var/opt/cprocsp/keys}} на нужную машину в тот же каталог.
# Экспортировать сертификаты (их, количество можно определить, выполнив: certmgr -list, в примере сертификатов 3):
#:<source lang="text" highlight="1">$ for i in `seq 1 3`; do echo $i | certmgr -export -dest $i.cer; done</source>
# Перенести файлы сертификатов (1.cer, 2.cer, 3.cer) на нужную машину.
# На машине, куда переносятся сертификаты, просмотреть какие контейнеры есть (должны появится контейнеры с первой машины):
#:<source lang="text" highlight="1">$ csptest -keyset -enum_cont -verifycontext -fqcn</source>
# Связать сертификат и закрытый ключ:
#:<source lang="text" highlight="1">$ certmgr -inst -file 1.cer -cont '\\.\HDIMAGE\container.name'</source>
#:Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
#:<source lang="text">Cannot install certificate
Public keys in certificate and container are not identical</source>
# Если закрытого ключа нет, то просто поставить сертификат:
#:<source lang="text" highlight="1">$ certmgr -inst -file 1.cer</source>
 
=== Импорт персонального сертификата ===
 
Вы можете импортировать собственный сертификат в локальный считыватель '''HDIMAGE'''.
 
Если у вас нет сертификата, самое время его создать:
 
* Создание через [[cert-sh-functions]] (требует установки пакета {{pkg|cert-sh-functions}})
* [[Создание сертификатов PKCS12]] (достаточно только пакета {{pkg|openssl}})
 
Допустим, мы пошли по первому пути и создали сертификат web-server ('''делать это строго под правами root'''):
<source lang="text" highlight="1-2"># . cert-sh-functions
# ssl_generate 'web-server'</source>
 
Сертификат по умолчанию будет лежать в {{path|/var/lib/ssl/certs/web-server.cert}}, а ключ ­— в {{path|/var/lib/ssl/private/web-server.key}}
 
Для импорта потребуется файл сертификата и закрытый ключ в [http://ru.wikipedia.org/wiki/PKCS12 контейнере PKCS#12].
 
Создадим для нашего ключа и сертификата необходимый контейнер:
<source lang="text" highlight="1">openssl pkcs12 -export -in /var/lib/ssl/certs/web-server.cert -inkey /var/lib/ssl/private/web-server.pem -out web-server.p12</source>
 
{{Note|При создании контейнера будет дважды запрошен пароль для экспорта. По соображениям безопасности вводимые символы не показываются. После ввода каждого пароля нажимайте Enter.}}
 
Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде):
<source lang="text" highlight="1"># openssl pkcs12 -in web-server.p12 -nodes | grep BEGIN
Enter Import Password:
MAC verified OK
-----BEGIN CERTIFICATE-----
-----BEGIN PRIVATE KEY-----</source>
И сертификат и ключ попали в контейнер.
 
После генерации сертификата проверим наличие считывателя:
<source lang="text" highlight="1"># cpconfig -hardware reader -view | grep ^Nick
Nick name: FLASH
Nick name: HDIMAGE</source>
 
Для импорта сертификата в КриптоПро используйте программу {{cmd|certmgr}}. В нашем случае:
<source lang="text" highlight="1">$ certmgr -inst -file web-server.p12 -cont HDIMAGE</source>
 
Если Вам необходимо импортировать сертификат с токена:
<source lang="text" highlight="1">certmgr -inst -cont '\\.\Aktiv Co. Rutoken S 00 00\le-fb25d25d-23e9-4723-ae4c-fe0c95f2fcc1'</source>
Если контейнер защищен паролем используйте ключ -pin <пароль>
 
=== Инструменты КриптоПро — кроссплатформенный графический интерфейс (cptools) ===
В версии КриптоПРО 5 [https://www.cryptopro.ru/blog/2019/05/21/instrumenty-cryptopro-krossplatformennyi-graficheskii-interfeis появилась] графическая утилита для работы с сертификатами — cptools.<br>
Для использования cptools необходимо установить пакет {{path|cprocsp-cptools-gtk}} из скачанного архива:
<source lang="text" highlight="1"># apt-get install cprocsp-cptools-gtk*</source>
После этого её можно запустить из консоли:
<source lang="text" highlight="1">$ cptools</source>
[[Изображение:CryptoPro5-cptools.png|Графическая утилита для работы с сертификатами]]
 
С её помощью можно установить сертификат из токена в хранилище uMy:<br>
[[Изображение:CryptoPro5-cptools-import-cert.png]]
 
=== Работа с сертификатами в token-manager ===
token-manager предоставляет графический интерфейс управления ключевыми носителями и сертификатами. С помощью этой программы можно:
* просматривать подключенные ключевые носители (токены);
* изменять PIN-код ключевого носителя;
* устанавливать, просматривать и удалять сертификаты;
* просматривать и устанавливать лицензию КриптоПро.
 
==== Установка и запуск ====
Установка пакета {{pkg|token-manager}}:
<source lang="text" highlight="1"># apt-get install token-manager</source>
 
Запустить token-manager можно:
*из командной строки:
*:<source lang="text" highlight="1">$ python /usr/bin/token-manager.py</source>
* в рабочей среде Mate: {{nav|Меню Система|Администрирование|Ключевые носители и сертификаты}};
* в рабочей среде KDE5: {{nav|Меню запуска приложений|Настройки|Ключевые носители и сертификаты}}.
 
[[Файл:Token-manager.png|token-manager]]
 
==== Проверка лицензии ====
 
Проверить срок истечения лицензии КриптоПРО можно выбрав в меню token-manager пункт {{nav|Операции|Просмотр лицензии КриптоПро CSP}}:
 
[[Файл:Token-manager-license-view.png|Просмотр лицензии КриптоПро CSP]]
 
Для установки другой лицензии КриптоПРО выберите в меню token-manager пункт {{nav|Операции|Ввод лицензии КриптоПро CSP}}:
 
[[Файл:Token-manager-license-set.png|Ввод лицензии КриптоПро CSP]]
 
==== Просмотр сертификатов ====
 
Просмотреть список сертификатов в хранилище или на ключевом носителе, можно выбрав соответствующий носитель:
 
[[Файл:Token-manager-listcert.png|Просмотр сертификатов в хранилище]]
 
Для просмотра сертификата, необходимо выбрать сертификат и нажать кнопку «Просмотр»:
 
[[Файл:Token-manager-viewcert.png|Просмотр сертификата]]
 
Для просмотра корневых сертификатов, необходимо выбрать в меню token-manager пункт {{nav|Операции|Просмотр корневых сертификатов}}.
 
==== Установка сертификата ====
 
Чтобы установить сертификат с токена в локальное хранилище, необходимо выбрать контейнер на токене и нажать кнопку «Установить»:
 
[[Файл:Token-manager-install-sert.png|Установка сертификата]]
 
Сертификат будет установлен в локальное хранилище сертификатов и будет связан с закрытым ключом на токене.
 
Чтобы установить сертификат в локальное хранилище из файла, необходимо выбрать «Личное хранилище сертификатов», нажать кнопку «Установить», выбрать файл сертификата и нажать кнопку «Открыть». Появится сообщение об успешном импорте сертификата:
 
[[Файл:Token-manager-install-sert2.png|Установка сертификата]]
 
Сертификат будет установлен в локальное хранилище сертификатов, но не будет связан ни с каким закрытым ключом. Этот сертификат можно использовать для проверки подписи.
 
== Электронная подпись ==
Существуют два вида электронной подписи:
* прикреплённая (attached) — в результирующий файл упакованы данные исходного файла и подпись;
* откреплённая (detached) — подписываемый документ остается неизменным, подпись же сохраняется в отдельном файле. Для проверки отсоединенной подписи нужны оба файла, файл подписи и файл исходного документа.
 
=== Создание и проверка подписи в командной строке ===
 
==== Создание подписи ====


== Подпись ==
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла.


Для электронной подписи файла необходимо указать сертификат и имя подписываемого файла:
Для создания прикрепленной (attached) электронной подписи выполните команду:


{{note|Проще всего для указания сертификата использовать адрес e-mail.}}
{{note|Проще всего для указания сертификата использовать адрес e-mail.}}
<source lang="text" highlight="1">$ cryptcp -sign -dn E=user@test.ru -der zayavlenie.pdf
<source lang="text" highlight="1">$ cryptcp -sign -dn E=user@test.ru -der zayavlenie.pdf
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Command prompt Utility for file signature and encryption.
Утилита командной строки для подписи и шифрования файлов.


The following certificate will be used:
Будет использован следующий сертификат:
RDN: ******, user@test.ru
Субъект:user@test.ru, Иванов Иван
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38


Certificate chains are checked.
Цепочки сертификатов проверены.
Folder './':
Папка './':
zayavlenie.pdf... Signing the data...     
zayavlenie.pdf... Подпись данных...     
      
      
Signed message is created.
Подписанное сообщение успешно создано.
[ReturnCode: 0]</source>
[ErrorCode: 0x00000000]
</source>


где  
где  
Строка 542: Строка 971:
* '''zayavlenie.pdf''' — имя подписываемого файла.
* '''zayavlenie.pdf''' — имя подписываемого файла.


На выходе появляется файл {{path|zayavlenie.pdf.sig}}, содержащий как сам подписываемый файл, так и электронную подпись (прикрепленная/attached). Для создания открепленной (detached) подписи необходимо заменить ключ ''-sign'' на ''-signf''. Тогда рядом с оригинальным файлом будет лежать файл подписи - {{path|zayavlenie.pdf.sgn}}.
На выходе появится файл {{path|zayavlenie.pdf.sig}}, содержащий как сам подписываемый файл, так и электронную подпись.  


== Проверка подписи ==
Для создания открепленной (detached) подписи необходимо заменить ключ ''-sign'' на ''-signf'':


Для проверки прикрепленной подписи выполните:
<source lang="text" highlight="1">$ cryptcp -signf -dn E=user@test.ru -der zayavlenie.pdf</source>
 
Тогда рядом с оригинальным файлом будет лежать файл подписи — {{path|zayavlenie.pdf.sgn}}.
 
==== Проверка подписи ====
 
Для проверки прикреплённой подписи выполните команду:


<source lang="text" highlight="1">$ cryptcp -verify zayavlenie.pdf.sig
<source lang="text" highlight="1">$ cryptcp -verify zayavlenie.pdf.sig
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Command prompt Utility for file signature and encryption.
Утилита командной строки для подписи и шифрования файлов.


The following certificate will be used:
Будет использован следующий сертификат:
RDN: ******, user@test.ru
Субъект:user@test.ru, Иванов Иван
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38


Certificate chains are checked.
Цепочки сертификатов проверены.
Folder './':
Папка './':
zayavlenie.pdf.sig... Signature verifying...     
zayavlenie.pdf.sig... Проверка подписи...     
Signer: ******, user@test.ru
Автор подписи: user@test.ru, Иванов Иван
  Signature's verified.
  Подпись проверена.
[ReturnCode: 0]</source>
[ErrorCode: 0x00000000]</source>


Показано, кто подписывал и что подпись проверена.
Показано, кто подписывал и что подпись проверена.


Ключ "-verify" у утилиты cryptcp предназначен для проверки attached подписи, если она detached, проверять надо так:
Для проверки откреплённой подписи выполните команду:


<source lang="text" highlight="1">$ cryptcp -vsignf -f zayavlenie.pdf.sgn zayavlenie.pdf
<source lang="text" highlight="1">$ cryptcp -vsignf zayavlenie.pdf
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Command prompt Utility for file signature and encryption.
Утилита командной строки для подписи и шифрования файлов.


The following certificate will be used:
Будет использован следующий сертификат:
RDN: ******, user@test.ru
Субъект:user@test.ru, Иванов Иван
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38


Certificate chains are checked.
Цепочки сертификатов проверены.
Folder './':
Папка './':
zayavlenie.pdf... Signature verifying...     
234.pdf... Проверка подписи...     
      
      
Signer: ******, user@test.ru
Автор подписи: user@test.ru, Иванов Иван
  Signature's verified.
  Подпись проверена.
[ErrorCode: 0x00000000]</source>
[ErrorCode: 0x00000000]</source>


Также для проверки электронной подписи можно воспользоваться сервисом на сайте Госуслуг - https://www.gosuslugi.ru/pgu/eds.
Также для проверки электронной подписи можно воспользоваться сервисом на сайте Госуслуг https://www.gosuslugi.ru/pgu/eds.


== Извлечение подписанного файла ==
==== Извлечение подписанного файла ====


Для извлечения файла необходимо указать его имя в конце команды проверки подписи.
Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи:


<source lang="text" highlight="1">$ cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf</source>
<source lang="text" highlight="1">$ cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf</source>


= Web =
=== [[Alt-csp-cryptopro|Создание и проверка ЭЦП в ALT CSP КриптоПро]] ===
 
=== Создание и проверка ЭЦП в gost-crypto-gui ===
gost-crypto-gui — средство для создания электронной подписи и шифрования файлов.
Установить пакет {{pkg|gost-crypto-gui}} из репозитория можно, выполнив команду:
 
<source lang="text" highlight="1"># apt-get install gost-crypto-gui</source>
 
Запустить программу можно:
*из командной строки:
*:<source lang="text" highlight="1">$ python /usr/bin/gost-crypto-gui.py</source>
* в рабочей среде Mate: {{nav|Меню Система|Администрирование|Подпись и шифрование файлов}};
* в рабочей среде KDE: {{nav|Меню запуска приложений|Настройки|Подпись и шифрование файлов}}.
 
С её помощью можно подписывать и проверять подписи файлов:
 
[[Файл:Gost-crypto-gui.png|Программа gost-crypto-gui]]
 
Для создания электронной подписи файла необходимо:
# Нажать кнопку «Подписать файл(ы)».
# Выбрать файл, который необходимо подписать.
# Выбрать сертификат и нажать кнопку «Далее»:
#:[[Файл:Gost-crypto-cert.png|Выбор сертификата]]
#Ввести пароль на контейнер (если он был установлен):
#:[[Файл:Container_test.png|Пароль на контейнер]]
#Появится сообщение о подписанном файле:
#:[[Файл:Gost-crypto-sign.png|Информация о подписанном файле]]
 
Опции ЭП настраиваются в меню «Опции» (параметр «Отсоединенная подпись» не работает???):
 
[[Файл:Gost-crypto-gui-option.png|Опции ЭП]]
 
Для проверки электронной подписи следует:
# Нажать кнопку «Проверить подпись».
# Выбрать подписанный файл.
# Появится информация о сертификате подписи:
#:[[Файл:Gost-crypto-sign view.png|Проверка электронной подписи]]
 
=== Создание и проверка ЭЦП с использованием cptools ===
 
{{Note|cptools доступна версии КриптоПро 5.}}
 
Запустить программу можно из консоли (должен быть установлен {{pkg|cprocsp-cptools-gtk}} из скачанного архива КриптоПро):
 
<source lang="text" highlight="1">$ cptools</source>
 
С помощью cptools можно подписывать и проверять подписи файлов.
 
Для создания электронной подписи файла необходимо:
# В левом меню выбрать пункт «Создание подписи».
# Выбрать файл, который необходимо подписать, нажав кнопку «Выбрать файл для подписи» (или ввести адрес файла в текстовое поле под кнопкой «Выбрать файл для подписи»).
# Изменить имя файла подписи, если оно вас не устраивает:
#:[[Файл:Crypto-sign.png|600px|Создание подписи в КриптоПро CSP]]
# Нажать кнопку «Подписать».
# Ввести пароль на контейнер (если он был установлен).
# Появится сообщение о подписанном файле: «Создание подписи завершилось успехом».
 
Для проверки электронной подписи следует:
# В левом меню выбрать пункт «Проверка подписи».
# Выбрать файл с подписью, нажав кнопку «Выбрать файл с подписью для проверки» (или ввести адрес файла в текстовое поле под этой кнопкой).
# Нажать кнопку «Проверить подпись».
# Появится информация о результате проверки:
#:[[Файл:Crypto-sign_view.png|600px|Проверка подписи в КриптоПро CSP]]
 
== Web ==


Информацию о создании и проверки ЭЦП на веб-сайтах с помощью плагина КриптоПро можно найти в  
Информацию о создании и проверки ЭЦП на веб-сайтах с помощью плагина КриптоПро можно найти в  
Строка 597: Строка 1097:
* <big>[http://cpdn.cryptopro.ru/default.asp?url=content/cades/indexpage.html КриптоПро ЭЦП. Руководство разработчика]</big>
* <big>[http://cpdn.cryptopro.ru/default.asp?url=content/cades/indexpage.html КриптоПро ЭЦП. Руководство разработчика]</big>


= КриптоПро ЭЦП Browser plug-in =
== КриптоПро ЭЦП Browser plug-in ==


{{Attention|Последняя доступная версия плагина КриптоПро ЭЦП Browser plug-in 2.0 <u>требует КриптоПро 4.0</u>. С более ранними версиями КриптоПро плагин не работает и конфликтует.}}
{{Attention|Последняя доступная версия плагина КриптоПро ЭЦП Browser plug-in 2.0 <u>требует КриптоПро 4.0</u>. С более ранними версиями КриптоПро плагин не работает и конфликтует.}}


Плагин проверки ЭЦП для браузера требует установленного КриптоПро CSP. Инструкция на сайте производителя: https://www.cryptopro.ru/products/cades/plugin
КриптоПро ЭЦП Browser plug-in предназначен для создания и проверки электронной подписи (ЭП) на веб-страницах с использованием СКЗИ «КриптоПро CSP».
 
Плагин проверки ЭЦП для браузера требует установленного КриптоПро CSP, пакета {{pkg|cprocsp-rdr-gui-gtk}} из его комплекта и расширения для браузера CryptoPro Extension for CAdES Browser Plug-in (для работы в Firefox версии 52 и выше).
 
Для установки плагина:
#Скачайте архив по ссылке http://www.cryptopro.ru/products/cades/plugin/get_2_0 (будет скачан архив под архитектуру браузера) или на странице https://www.cryptopro.ru/products/cades/plugin/ нажмите ссылку «версия 2.0 для пользователей»:
#:[[Файл:Plugin download.png|Скачать актуальную версию КриптоПро ЭЦП Browser plug-in]]
#Распакуйте архив:
#:<source lang="text" highlight="1">$ tar -xf cades-linux-amd64.tar.gz</source>
#Установите пакеты (под правами root, из папки с установочными файлами):
#:<source lang="text" highlight="1"># apt-get install cprocsp-pki-{cades,plugin}-*.rpm</source>
#Разместите ссылки (под правами root):
#:Для Chromium:
#:<source lang="text" highlight="1-2"># ln -s /usr/share/chromium-browser/extensions /usr/lib64/chromium/extensions</source>
#:Для Firefox (64-битная версия):
#:<source lang="text" highlight="1-2"># ln -s /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 /usr/lib64/browser-plugins/libnpcades.so</source>
#:В актуальных версиях пакетов cprocsp-pki-* эти символические ссылки создаются автоматически в процессе установки.
#Для работы в Firefox версии 52 и выше установите расширение для браузера [https://www.cryptopro.ru/products/cades/plugin Инструкция на сайте производителя]. Для установки расширения в Mozilla Firefox скачайте его по ссылке https://www.cryptopro.ru/sites/default/files/products/cades/extensions/firefox_cryptopro_extension_latest.xpi или нажмите на ссылку «Скачать расширение для браузера» на странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html
#:[[Файл:Mozilla addon.png|Ссылка на расширение для браузера]]
#: Во всплывающем окне нажмите кнопку «Разрешить»:
#: [[Файл:Mozilla_addon_add.png|Разрешить установку расширения для браузера]]
#: Нажмите кнопку «Добавить»:
#: [[Файл:Mozilla_addon_add2.png|Добавить расширение для браузера]]
#: Появится сообщение, что расширение добавлено в Firefox:
#: [[Файл:Mozilla_addon_add3.png|Сообщение об успешном добавлении расширения ]]
#: Убедиться, что плагин установлен можно на странице {{path|about:addons}} (или {{path|about:plugins}} в более ранних версиях Mozilla Firefox). Сделайте его активируемым по умолчанию.
#Для работы в Chromium установите расширение для браузера на странице {{path|chrome://extensions/}}:
#:[[Файл:Plugin_cryptopro_chromium_install.png|Добавить расширение для браузера]]
#На странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html вверху должна появится надпись: «Плагин загружен» и должен показаться сертификат в списке:
#:[[Файл:Plugin cryptopro.png|Проверка работы КриптоПро ЭЦП Browser plug-in]]
#:[[Файл:Plugin_cryptopro_chromium.png|Проверка работы КриптоПро ЭЦП Browser plug-in]]
#:{{Attention|Если список пуст, необходимо проверить правильность цепочки сертификатов}}
#:{{Attention|Если при переходе на страницу https://www.cryptopro.ru/sites/default/files/products/cades/demopage/simple.html получаем ошибку SEC_ERROR_NO_MODULE, необходимо на странице about:config изменить параметр security.tls.version.max;3 на 2 или 1}}
 
== zakupki.gov.ru ==
 
Для входа в личный кабинет на http://zakupki.gov.ru необходимо:
 
1. Браузер с поддержкой ГОСТового TLS: [[Chromium-gost]] или {{pkg|firefox-gost}}.
 
2. Так как сертификат у этого сайта неправильный, потребуется новая версия КриптоПро ('''4.0.9963''' или новее) и выключение строгой проверки имени сервера (под правами root)[https://forum.astralinux.ru/threads/419/#post-3702]:
<source lang="text" highlight="1"># /opt/cprocsp/sbin/amd64/cpconfig -ini '\config\parameters' -add long Rfc6125_NotStrict_ServerName_Check 1</source>
 
Проверка под обычным пользователем:
<source lang="text" highlight="1">$ /opt/cprocsp/bin/amd64/csptestf -tlsc -server zakupki.gov.ru -nosave
HDEContext expired: OK if file is completely downloaded
Reply status: HTTP/1.1 200 OK
1 connections, 589 bytes in 0.200 seconds;
Total: SYS: 0,020 sec USR: 0,150 sec UTC: 0,250 sec
[ErrorCode: 0x00000000]</source>
 
== Вход в ЕСИА ==
 
Для аутентификации через ЕСИА (https://esia.gosuslugi.ru/) потребуется установить версию не позже CSP 4.0R3 и плагин [[ЭП#.D0.94.D0.BE.D1.81.D1.82.D1.83.D0.BF_.D0.BA_.D1.81.D0.B0.D0.B9.D1.82.D1.83_.D0.93.D0.BE.D1.81.D1.83.D1.81.D0.BB.D1.83.D0.B3|IFCPlugin]], а также установить расширение для плагина Госуслуг, в зависимости от версии браузера:
 
* [https://chrome.google.com/webstore/detail/ifcplugin-extension/pbefkdcndngodfeigfdgiodgnmbgcfha Расширение для Google Chrome/Chromium/Chromium GOST]
 
* [https://ds-plugin.gosuslugi.ru/plugin/upload/assets/distrib/addon-1.2.8-fx.xpi Расширение для Mozilla Firefox]
 
Перезапустить браузер.


1. Скачиваем архив по ссылке http://www.cryptopro.ru/products/cades/plugin/get_2_0
Подробнее:
* [[ЕСИА|Вход в ЕСИА]]
* [https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/275 Вход с помощью электронной подписи на портал Госуслуг на Linux (от КриптоПро)]


{{Note|Будет скачан архив под архитектуру браузера.}}
{{Note|Для старых версий плагина (< 3.0.0) необходимо добавить в файл {{path|/etc/ifc.cfg}} после раздела с Jacarta (для 64-битных систем):
<source lang="text">  { name  = "CryptoPro CSP";
    alias = "cryptoprocsp";
    type  = "pkcs11";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },</source>}}


2. Распаковываем архив, устанавливаем пакеты:
{{Note|Для работы с контейнерами КриптоПро (в том числе с ГОСТ-2012) для плагина 3.0.5 необходимо добавить в файл {{path|/etc/ifc.cfg}} (для 64-битных систем):
<source lang="text">
{ name  = "CryptoPro CSP5";
    alias = "cprocsp5";
    type  = "pkcs11";
    alg  = "gost2001";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },
  { name  = "CryptoPro CSP5 2012 256";
    alias = "cprocsp5_2012_256";
    type  = "pkcs11";
    alg  = "gost2012_256";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },
{ name  = "CryptoPro CSP5 2012 512";
    alias = "cprocsp5_2012_512";
    type  = "pkcs11";
    alg  = "gost2012_512";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  }
</source>
И сделать символическую ссылку на библиотеку pkcs11:
<source lang="text" highlight=1># ln -s /opt/cprocsp/lib/amd64/libcppkcs11.so.4.0.4 /usr/lib/mozilla/plugins/lib/libcppkcs11.so</source>}}


<source lang="text" highlight="1"># apt-get install cprocsp-pki-*-cades.rpm cprocsp-pki-*-plugin.rpm</source>
Журнал работы плагина можно найти в файле {{path|/var/log/ifc/engine_logs/engine.log}}.


3. Разместите ссылки (под правами root):
== Особенности работы с токенами ==


Для Chromium:
=== Rutoken S ===
<source lang="text" highlight="1-2"># ln -s /usr/share/chromium-browser/extensions /usr/lib64/chromium/extensions</source>


Для Firefox (64-битная версия):
При входе в [[ЕСИА]] с помощью Rutoken S не находится приватная часть ключа. В журнале ifc появляется строка:
<source lang="text" highlight="1-2"># cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 /usr/lib64/browser-plugins/libnpcades.so</source>
IFC:do_work_sign_cms:ERROR:get_priv_key_by_id error:ifc_sign_cms.c:110


4. В Mozilla Firefox перезапустите браузер и откройте адрес {{path|about:plugins}}. Убедитесь, что плагин установлен. Сделайте его активируемым по умолчанию.
Для этого надо перенести приватный ключ в локальное хранилище и задействовать его:
<source lang="text" highlight="1-2">$ csptest -keycopy -contsrc 'имя_контейнера_например\\.\Aktiv Rutoken ECP 00 00\ххххх' -contdest '\\.\HDIMAGE\private' -pindest пароль
$ certmgr -inst -cont '\\.\HDIMAGE\private'</source>


5. На странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html вверху должна появится надпись:
для AltLinux9.2 КриптоПро5 Rutoken S - если cptools не читает ключ.
Плагин загружен


И должен показаться сертификат в списке.
<source lang="text" highlight="1-2">$ lsusb
Bus 001 Device 005: ID 0a89:0020 Retoken S</source>


{{Attention|Если список пуст, необходимо проверить правильность цепочки сертификатов}}
Добавить группу, если в журнале ошибки по отсутствию групп
<source lang="text" highlight="1-2">$ groupadd scard
$ groupadd pcscd</source>


= КриптоПро JCP =
В <source lang="text" highlight="1-2">$ cd /lib/udev/rules.d</source> добавить в файл <source lang="text" highlight="1-2">$ vi 50-pcscd-asedriveiiie.rules</source> строку
 
<source lang="text" highlight="1-2">ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0020", GROUP="pcscd"</source>
 
И закоментировать в файле <source lang="text" highlight="1-2">$ vi 60-openct.rules</source> строку
 
<source lang="text" highlight="1-2">#ATTR{idVendor}=="0a89", ATTR{idProduct}=="0020", RUN+="/lib/udev/openct_usb /dev/$name"</source>
 
После внесения изменений перезагрузить службу <source lang="text" highlight="1-2">$ service udevd restart</source>
 
== КриптоПро JCP ==


* Для установки КриптоПро JCP нужно установить Oracle Java 1.7.0 (через [[Java/OracleSDK|собственную сборку]] или пакеты для Fedora)
* Для установки КриптоПро JCP нужно установить Oracle Java 1.7.0 (через [[Java/OracleSDK|собственную сборку]] или пакеты для Fedora)
Строка 654: Строка 1258:
* [[ЭЦП]]
* [[ЭЦП]]
* [http://pushorigin.ru/cryptopro/linux-crypto-pro Набор скриптов для подписания и проверки ЭЦП КриптоПро на Linux]
* [http://pushorigin.ru/cryptopro/linux-crypto-pro Набор скриптов для подписания и проверки ЭЦП КриптоПро на Linux]
== Известные ошибки и методы исправления ==
=== Доменный пользователь не видит токен ===
Необходимо создать правило в polkit (/etc/polkit-1/rules.d) которое разрешает действия org.debian.pcsc-lite.access_pcsc и org.debian.pcsc-lite.access_card для доменных пользователей, после чего перезагрузить рабочую станцию:
<source lang="text">polkit.addRule(function(action, subject) {
if (action.id "org.debian.pcsc-lite.access_pcsc" && subject.isInGroup("пользователи домена")) {
return polkit.Result.YES;
};
if (action.id "org.debian.pcsc-lite.access_card" && subject.isInGroup("пользователи домена")) {
return polkit.Result.YES;
};
});
</source>
=== Неправильный зарегистрированный набор ключей ===
Код ошибки: 0x8009001A Может возникнуть в многопользовательской системе у второго и последующих пользователей из-за нарушения прав доступа к файлам в каталоге {{path|/var/opt/cprocsp/tmp}}.
Добавить в ACL отдельную запись для суперпользователя root:
<source lang="text" highlight="1"># setfacl -R -m u:root:rwx /var/opt/cprocsp/tmp</source>
Или же изменить переменную ядра fs.protected_regular на значение 0 (чем будет открыта уязвимость описанная https://www.opennet.ru/opennews/art.shtml?num=50147 однако проблемы многопользовательского режима исчезнут)
<source lang="text" highlight="1"># echo 'fs.protected_regular = 0' >> /etc/sysctl.d/99-sysctl.conf</source>
<source lang="text" highlight="1"># sysctl -p --system</source>


[[Категория:Enterprise Software]]
[[Категория:Enterprise Software]]

Текущая версия от 12:37, 18 сентября 2024

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


О КриптоПро

КриптоПро — линейка криптографических утилит (вспомогательных программ), так называемых "криптопровайдеров". Они используются во многих программах российских разработчиков для генерации ЭЦП, работы с сертификатами, организации структуры PKI и т.д. (см.сайт).

Совместимость

По информации разработчика, с ALT Linux совместимы следующие продукты КриптоПро:

  • КриптоПро CSP
  • КриптоПро JCP
  • КриптоПро HSM
  • КриптоПро TSP
  • КриптоПро OCSP
  • КриптоПро ЭЦП Browser plug-in
  • КриптоПро SSF
  • КриптоПро Stunnel
  • Браузер КриптоПро Fox
Примечание: В репозитории доступен пакет firefox-gost, аналогичный КриптоПро Fox, с патчем от КриптоПро.


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

Загрузка

Архив с программным обеспечением (КриптоПро CSP 4.0 R4 — сертифицированная версия, КриптоПро CSP 5.0 — несертифицированная) можно загрузить после предварительной регистрации:

  • linux-ia32.tgz (19,3 МБ, для i586) — для 32-разрядных систем (x86, rpm);
  • linux-amd64.tgz (20,1 МБ, для x86_64) — для 64-разрядных систем (x64, rpm).

Загрузка КриптоПро

Внимание! По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия на три месяца


Установка

1. Установите пакет cryptopro-preinstall:

# apt-get install cryptopro-preinstall
Этот пакет установит все требуемое для КриптоПро (включая инфраструктуру поддержки карт Рутокен S и Рутокен ЭЦП).
Примечание: Пакет cryptopro-preinstall вытягивает зависимости libpangox-compat, opensc, pcsc-lite, pcsc-lite-rutokens, pcsc-lite-ccid, newt52.


2. Распакуйте архив, скачанный с официального сайта КриптоПро:

$ tar -xf linux-amd64.tgz

Таблица 1. Описание необходимых пакетов КриптоПро.

Пакет Описание
Базовые пакеты:
cprocsp-curl Библиотека libcurl с реализацией шифрования по ГОСТ
lsb-cprocsp-base Основной пакет КриптоПро CSP
lsb-cprocsp-capilite Интерфейс CAPILite и утилиты
lsb-cprocsp-kc1 Провайдер криптографической службы KC1
lsb-cprocsp-kc2 Провайдер криптографической службы KC2 (требует наличия аппаратного датчика случайных чисел или гаммы)
lsb-cprocsp-rdr Поддержка ридеров и RNG
Дополнительные пакеты:
cprocsp-cptools-gtk Инструменты КриптоПро - кроссплатформенный графический интерфейс
cprocsp-rdr-gui-gtk Графический интерфейс для диалоговых операций
cprocsp-rdr-rutoken Поддержка карт Рутокен
cprocsp-rdr-jacarta Поддержка карт JaCarta
cprocsp-rdr-pcsc Компоненты PC/SC для ридеров КриптоПро CSP
lsb-cprocsp-pkcs11 Поддержка PKCS11
ifd-rutokens Конфигурация Рутокеновских карт (или можно взять pcsc-lite-rutokens из репозитория)

3. Установите пакеты КриптоПро:

  • под правами пользователя root перейдите в папку с распакованным архивом:
    # cd /home/user/linux-amd64/
    
  • установите базовые пакеты:
    # apt-get install cprocsp-curl* lsb-cprocsp-base* lsb-cprocsp-capilite* lsb-cprocsp-kc1-64* lsb-cprocsp-rdr-64*
    
Примечание: Для 32-битной версии вместо последнего пакета — lsb-cprocsp-rdr-4*
  • установите пакеты для поддержки токенов (Рутокен S и Рутокен ЭЦП):
    # apt-get install cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* pcsc-lite-rutokens pcsc-lite-ccid
    
Примечание: Если возникнут проблемы с отображением контейнеров на Рутокен S — удалите pcsc-lite-openct
  • установите пакет для поддержки токенов (JaCarta):
    # apt-get install cprocsp-rdr-jacarta*
    
Примечание: Для установки cprocsp-rdr-jacarta может понадобиться предварительно удалить openct.
  • установите пакет для поддержки носителей с неизвлекаемыми ключами:
    # apt-get install cprocsp-rdr-cryptoki*
    
Примечание: Для корректной работы носителей с неизвлекаемыми ключами через интерфейс PKCS#11 был добавлен cprocsp-rdr-cryptoki ( с версии CSP 5.0 R2 12000). Подробнее в базе знаний КриптоПро CSP.
  • Для установки сертификатов Главного удостоверяющего центра:
    # apt-get install lsb-cprocsp-ca-certs*
    
  • Если есть потребность в установке графических Инструментов КриптоПро:
    # apt-get install cprocsp-cptools*
    

Также можно выполнить установку КриптоПро, запустив ./install_gui.sh в распакованном каталоге и выбрав необходимые модули:

# /home/user/install_gui.sh

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

Примечания:

  • Для КриптоПро CSP 3.6 R2 потребуется установить пакет cprocsp-compat-altlinux-1.0.0-1.noarch.rpm
  • Для установки cprocsp-rdr-gui может понадобиться libXm.so.3 (libopenmotif3) и для вывода кириллицы fonts-bitmap-cyr_rfx-iso8859-5.
  • Для установки cprocsp-rdr-gui-gtk потребуется предварительно установить libpangox-compat.
  • В версии 4.0.0-alt5 пакета cryptopro-preinstall добавлены подпакеты:
    • cryptopro-preinstall-base для установки с cprocsp-compat-altlinux, «предоставляющим» lsb (в случае нежелательности «лишних» зависимостей вроде libqt3), и
    • cryptopro-preinstall-full для автоустановки зависимостей cprocsp-rdr-gui.

Обновление

Внимание! Пакеты КриптоПро после обновления утрачивают работоспособность, так что рекомендуется удалить все пакеты и установить их заново.

Для обновления КриптоПро необходимо:

  1. Запомнить текущую конфигурацию:
    • набор установленных пакетов:
      $ rpm -qa | grep cprocsp
      
    • настройки провайдера (для простоты можно сохранить /etc/opt/cprocsp/config[64].ini).
  2. Удалить штатными средствами ОС все пакеты КриптоПро:
    # apt-get remove lsb-cprocsp-base
    
  3. Установить аналогичные новые пакеты КриптоПро.
  4. При необходимости внести изменения в настройки (можно просмотреть diff старого и нового /etc/opt/cprocsp/config[64].ini).
  5. Ключи и сертификаты сохраняются автоматически.

Прописывание путей к исполняемым файлам

Утилиты КриптоПро расположены в директориях /opt/cprocsp/sbin/<название_архитектуры> и /opt/cprocsp/bin/<название_архитектуры>.

Чтобы каждый раз не вводить полный путь к утилитам КриптоПро:

  • после установки пакета cryptopro-preinstall начните новый сеанс пользователя в консоли;
Примечание: Не работает для суперпользователя.

или

  • выполните от имени пользователя, который будет запускать команды (будет действовать до закрытия терминала):
export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"
Внимание! Если установлен пакет mono или mono4-devel, может быть конфликт по имени утилиты certmgr


Проверка лицензии

Проверить срок истечения лицензии можно командой (обратите внимание на строки Expires:):

$ cpconfig -license -view
License validity:
4040E-G0037-EK8R3-C6K4U-HCXQG
Expires: 2 month(s) 23 day(s)
License type: Server.
Примечание: Для версии КриптоПро CSP под Linux все лицензии считаются серверными, поэтому не смущайтесь строкой «License type: Server».


Для установки другой лицензии выполните (под root):

# cpconfig -license -set <серийный_номер>
Примечание: Серийный номер следует вводить с соблюдением регистра символов.


Проверка версии

Проверить версию КриптоПро можно командой:

$ csptest -keyset -verifycontext | sed -n 's/.* Ver:*\([0-9.]\+\).*/\1/p'
4.0.9963

Удаление КриптоПро

# apt-get remove lsb-cprocsp-base
Примечание: Если появляется
support_mutex_open("registry_lock") failed:: Permission denied
выполните после удаления
# rm -f /var/opt/cprocsp/tmp/.registry_lock


Настройка оборудования

Настройка устройств хранения (носителей) и считывания (считывателей) ключевой информации и датчиков случайных чисел.

Примечание: Если не работает под обычным пользователем, то проверить правила polkit.

Считыватели (readers) — устройства, предназначенные для чтения ключей. К считывателям относится считыватели дискет (FAT12), считыватели флеш-накопителей (FLASH), считыватели смарт-карт и токенов, считыватель образа дискеты на жестком диске (HDIMAGE) и др.

Ключевые носители (media) являются местом хранения электронной подписи. В качестве носителя ключевой информации могут использоваться: защищенный флэш-накопитель (токен) (Рутокен, JaCarta, ESMART и др.), смарт-карта, флэш-накопитель, дискета.

Ключевые контейнеры — это способ хранения закрытых ключей, реализованный в КриптоПро. Их физическое представление зависит от типа ключевого носителя (на флеш-накопителе, дискете, жестком диске это каталог в котором хранится набор файлов с ключевой информацией; в случае со смарт-картами — файлы в защищенной памяти смарт-карты).

Встроенный в «КриптоПро CSP» датчик случайных чисел (далее ДСЧ) используется для генерации ключей.

Для смарт-карт: ключи дополнительно защищаются кодом доступа к защищенной памяти смарт-карты (PIN). При всех операциях с защищенной памятью (чтение, запись, удаление...) требуется вводить PIN. Для других носителей: для повышения безопасности на контейнер можно установить пароль. В этом случае всё содержимое контейнера хранится не в открытом виде, а в зашифрованном на этом пароле. Пароль задается при создании контейнера, в дальнейшем для чтения ключей из контейнера необходимо будет вводить пароль.

Примечание: Подробнее про работе с разными ключевыми носителями: Рутокен, JaCarta, ESMART

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

Современные аппаратные и программно-аппаратные хранилища ключей, такие как Рутокен ЭЦП или eSmart ГОСТ, поддерживаются через интерфейс PCSC. За реализацию этого интерфейса отвечает служба pcscd, которую необходимо запустить перед началом работы с соответствующими устройствами:

# systemctl start pcscd

Можно включить службу pcscd в автозапуск при загрузке системы:

# systemctl enable pcscd

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

$ cpconfig -hardware reader -view

Nick name: Aladdin R.D. JaCarta [SCR Interface] 00 00
Connect name: 
Reader name: 

Nick name: FLASH
Connect name: 
Reader name: 

Nick name: HDIMAGE
Connect name: 
Reader name:

Либо:

$ csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
CryptAcquireContext succeeded.HCRYPTPROV: 6679203
GetProvParam(...PP_ENUMREADERS...) until it returns false
  Len    Byte  NickName/Name
_____________________________
 0x012a  0x72  ACS ACR38U-CCID 00 00
               All PC/SC readers
 0x012a  0x72  Aktiv Co. Rutoken S 00 00
               All PC/SC readers
 0x012a  0x58  FLASH
               FLASH
 0x012a  0x18  HDIMAGE
               Структура дискеты на жестком диске
Cycle exit when getting data. 4 items found. Level completed without problems.
Total: SYS: 0,000 sec USR: 0,170 sec UTC: 0,190 sec
[ErrorCode: 0x00000000]

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

# cpconfig -hardware reader -add HDIMAGE store
Adding new reader:
Nick name: HDIMAGE
Succeeded, code:0x0

Считыватель HDIMAGE размещается на /var/opt/cprocsp/keys/<имя пользователя>/.

Для работы со считывателем PC/SC требуется пакет cprocsp-rdr-pcsc. После подключения считывателя можно просмотреть список видимых считывателей (не зависимо от того, настроены ли они в КриптоПро как считыватели, зависит только от того, какие установлены драйверы для считывателей):

$ list_pcsc 
Aladdin R.D. JaCarta [SCR Interface] 00 00
Aktiv Co. Rutoken S 00 00

Инициализация считывателя Aktiv Co. Rutoken S 00 00 (требуется, если считыватель есть в списке видимых считывателей и отсутствует в списке настроенных), в параметре -add указывается имя, которое было получено при просмотре видимых считывателей, в параметре -name — удобное для обращения к считывателю имя, например, Rutoken (под правами root):

# cpconfig -hardware reader -add 'Aktiv Co. Rutoken S 00 00' -name 'Rutoken'
Adding new reader:
Nick name: Aktiv Co. Rutoken S 00 00
Name device: Rutoken
Succeeded, code:0x0

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

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

$ cpconfig -hardware media -view | iconv -f cp1251

Управление ДСЧ

Просмотр списка настроенных ДСЧ:

$ cpconfig -hardware rndm -view

Nick name: CPSD
Connect name: 
Rndm name: 
Rndm level: 3

Nick name: BIO_GUI
Connect name: 
Rndm name: 
Rndm level: 4

Nick name: BIO_TUI
Connect name: 
Rndm name: 
Rndm level: 5

Настройка криптопровайдера

Просмотреть доступные типы криптопровайдеров можно командой cpconfig -defprov -view_type:

$ cpconfig -defprov -view_type
Provider type	Provider Type Name
_____________	_____________________________________
      75	GOST R 34.10-2001 Signature with Diffie-Hellman Key Exchange
      80	GOST R 34.10-2012 (256) Signature with Diffie-Hellman Key Exchange
      81	GOST R 34.10-2012 (512) Signature with Diffie-Hellman Key Exchange
      16	ECDSA Full and AES
      24	RSA Full and AES

Просмотр свойств криптопровайдера нужного типа:

$ cpconfig -defprov -view -provtype 80
Listing Available Providers:
Provider type	Provider Name
_____________	_____________________________________
       80	Crypto-Pro GOST R 34.10-2012 KC1 CSP
       80	Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider

Provider types and provider names have been listed.

Управление контейнерами

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

Примечание: Для того, чтобы сертификат из контейнера можно было использовать через модуль pkcs11 (из пакета lsb-cprocsp-pkcs11) в браузере firefox-gost, необходимо создать его с -provtype 75 (поддержка ГОСТ-2001).


Внимание! C 1 января 2019 г. по указанию ФСБ РФ и Минкомсвязи всем аккредитованным УЦ запрещен выпуск сертификатов ЭП по ГОСТ 2001. Ключи и запрос на сертификат необходимо формировать ГОСТ 2012.


Создадим контейнер с именем «test» в локальном считывателе HDIMAGE.

$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\HDIMAGE\test'

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

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

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


После этого будет предложено указать пароль на контейнер (можно указать пустой, тогда пароль запрашиваться не будет):

Установка пароля на контейнер

Внимание! При создании контейнера на токене:
$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\Aladdin R.D. JaCarta [SCR Interface] 01 00\test'

Пароль не создается, а предъявляется (PIN-код пользователя):

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


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

Вывод команды:

CSP (Type:75) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6679219
GetProvParam(PP_NAME): Crypto-Pro GOST R 34.10-2001 KC1 CSP
Container name: "test"
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

  OID: 1.2.643.2.2.37.3.10
Total: SYS: 0,030 sec USR: 0,160 sec UTC: 22,910 sec
[ErrorCode: 0x00000000]

Локальный контейнер создан.

В КриптоПро 5 появилась возможность интерактивно выбирать носитель и тип создаваемого контейнера. Теперь можно создавать неизвлекаемые контейнеры.
Для этого необходимо выполнить команду, где testinside_2012 — имя контейнера:

$ csptest -keyset -provtype 80 -newkeyset -cont testinside_2012

Откроется окно выбора носителя и способа создания контейнера. Для некоторых носителей нет возможности выбрать способ создания контейнера (Рутокен S, JaCarta PKI):

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

Для некоторых носителей можно выбрать способ создания контейнера (Рутокен ЭЦП, JaCarta-2 PKI/ГОСТ).
Создание неизвлекаемого контейнера:
Создание неизвлекаемого контейнера
Создание обычного контейнера:
Создание обычного контейнера

Просмотр доступных контейнеров

Внимание! При подключении токена в порт USB3, контейнеры видны не будут.


Примечание: Вы можете загрузить все сертификаты с подключенных токенов командой:
csptestf -absorb -certs -autoprov


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

$ csptest -keyset -enum_cont -fqcn -verifyc
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6679203
\\.\HDIMAGE\test
OK.
Total: SYS: 0,000 sec USR: 0,070 sec UTC: 0,130 sec
[ErrorCode: 0x00000000]
Внимание! Имена контейнеров могут содержать названия в кодировке cp1251 (например, на токенах), что делает работу с ними по этим именам проблематичной. Можно показать список контейнеров с их уникальными именами командой:
$ csptest -keyset -enum_cont -fqcn -verifyc -uniq
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 6679203
\\.\Aktiv Co. Rutoken S 00 00\card              |\\.\Aktiv Co. Rutoken S 00 00\SCARD\rutoken_2b8654f7\0A00\6AD1
\\.\HDIMAGE\test                                |\\.\HDIMAGE\HDIMAGE\\test.000\2EF8
OK.
Total: SYS: 0,020 sec USR: 0,190 sec UTC: 1,510 sec
[ErrorCode: 0x00000000]
Уникальные имена указаны после символа «|».


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

csptestf -keyset -container '\\.\HDIMAGE\test' -info

Удаление контейнера

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

$ csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'
CSP (Type:80) v4.0.9006 KC1 Release Ver:4.0.9708 OS:Linux CPU:AMD64 FastCode:READY:AVX.
Container \\.\HDIMAGE\test deleted.
Total: SYS: 0,010 sec USR: 0,240 sec UTC: 0,260 sec
[ErrorCode: 0x00000000]

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

cryptcp — приложение командной строки для создания запросов на сертификаты, шифрования и расшифрования файлов, создания и проверки электронной подписи файлов с использованием сертификатов открытых ключей, хэширования файлов. Результатом работы приложения в большинстве случаев является файл с CMS-сообщением (PKCS#7) в кодировке DER или BASE64.

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

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

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

Для создания запроса на получение сертификата потребуется:

  1. DN — данные, которые будут храниться в поле Subject сертификата (cn=Test User5,e=cas@altlinux.org).
  2. Имя контейнера вместе со считывателем (например, в локальном хранилище hdimage: \\.\HDIMAGE\test).
  3. Имя файла, в котором следует сохранить запрос (test5.csr).
Внимание! Для использования проверки подлинности клиента в браузере потребуется также указать, что запрос создается по ГОСТ 2001 и добавляется тип применения подлинности клиента: -provtype 75 -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2".


С помощью опции -certusage можно указать OID назначение сертификата. Назначение сертификата представляется в сертификате объектным идентификатором, присвоенным этой политике, — OID. Если в сертификате указано несколько политик, то это означает, что сертификат соответствует всем этим политикам списка.

Таблица 2. Типы применения.

OID Назначение
1.3.6.1.5.5.7.3.1 Аутентификация сервера
1.3.6.1.5.5.7.3.2 Аутентификация клиента
1.3.6.1.5.5.7.3.3 Подписывание кода
1.3.6.1.5.5.7.3.4 Защищенная электронная почта
1.3.6.1.5.5.7.3.8 Простановка штампов времени
1.3.6.1.4.1.311.10.5.1 Цифровые права
1.3.6.1.4.1.311.10.3.12 Подписывание документа

Таблица 3. Поле Subject сертификата

OID Алиас Назначение Примечание
2.5.4.3 CN Общее имя Наименование ЮЛ (если ИНН начинается с "00") или ФИО владельца. Длина не более 64 символов
2.5.4.4 SN Фамилия
2.5.4.42 GN/G Имя Отчество Общая длина текста в полях SN и G должна быть не более 64 символов (с учетом одного пробела между текстом из Фамилии и текстом из Имени)
1.2.840.113549.1.9.1 emailAddress/E Адрес электронной почты ivanov@mail.mail
1.2.643.100.3 SNILS СНИЛС Должно быть записано 11 цифр (допускается 11 нулей для иностранных граждан).
1.2.643.3.131.1.1 INN ИНН 12 цифр, для ЮЛ первые две цифры 00
2.5.4.6 C Страна Двухсимвольный код страны (RU)
2.5.4.8 S Регион Наименование субъекта РФ ЮЛ: по адресу местонахождения,

ФЛ: по адресу регистрации (39 Калининградская обл.)

2.5.4.7 L Населенный пункт Наименование населенного

пункта (Калининград)

2.5.4.9 street Название улицы, номер дома Пр-т Победы 14 кв.3
2.5.4.10 O Организация Полное или сокращенное

наименование организации (только для ЮЛ)

2.5.4.11 OU Подразделение В случае выпуска СКПЭП на должностное лицо – соответствующее подразделение организации (только для ЮЛ)
2.5.4.12 T Должность В случае выпуска СКПЭП на должностное лицо – его должность (только для ЮЛ)
1.2.643.100.1 OGRN ОГРН ОГРН организации (только для ЮЛ)

Создать запрос на субъект "cn=Test User5,e=cas@altlinux.org", используя открытый ключ, сгенерированный в контейнере test текущего пользователя криптопровайдером «GOST R 34.10-2001» (тип — 75) и сохранить его в файл test5.req, назначение ключа — аутентификация и защита электронной почты:

$ cryptcp -creatrqst -dn "cn=Test User5,e=cas@altlinux.org" -provtype 75 -nokeygen -cont '\\.\HDIMAGE\test' -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test5.req
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.
Запрос успешно создан и сохранен в файле.
[ErrorCode: 0x00000000]

Созданный запрос будет сохранен в файле test5.req. Эти данные нужны для получения сертификата в удостоверяющем центре.

Создать запрос на физическое лицо, используя открытый ключ, сгенерированный в контейнере test_2012 (тип — 80) текущего пользователя криптопровайдером «Crypto-Pro GOST R 34.10-2012 KC1 CSP» (тип — 80) и сохранить его в файл test2012.req, назначение ключа — аутентификация и защита электронной почты:

$ cryptcp -creatrqst \
-dn "CN=Иванов Иван Иванович,SN=Иванов,G=Иван Иванович,E=ivanov@mail.mail,C=RU,L=Калининград,ST=39 Калининградская обл.,street=Пр-т Победы 14 кв.3,SNILS=102301111222,INN=11223344556" \
-provtype 80 -nokeygen  \
-cont '\\.\HDIMAGE\test_2012'  \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test2012.req

Тот же запрос, используя OID:

$ cryptcp -creatrqst \
-dn "2.5.4.3=Иванов Иван Иванович,2.5.4.4=Иванов,2.5.4.42=Иван Иванович,1.2.840.113549.1.9.1=ivanov@mail.mail,2.5.4.6=RU,2.5.4.8=39 Калининградская обл.,2.5.4.7=Калининград,2.5.4.9=Пр-т Победы 14 кв.3,1.2.643.3.131.1.1=102301111222,1.2.643.100.3=11223344556" \
-provtype 80 -nokeygen -cont '\\.\HDIMAGE\test_2012' \
-certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2" test2012.req
Примечание: Подробную инструкцию по работе с утилитой cryptcp можно скачать со страницы http://cryptopro.ru/products/other/cryptcp


Установка сертификата

Добавление сертификата, без привязки к ключам (только проверка ЭЦП):

$ certmgr -inst -file cert.cer

Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище uMy:

$ certmgr -inst -file cert.cer -store uMy -cont '\\.\HDIMAGE\test'

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

$ cryptcp -instcert -provtype 80 -cont '\\.\HDIMAGE\test' -ku -askpin cert.cer

Основные опции:

-provtype — указать тип криптопровайдера (по умолчанию 75);

-provname — указать имя криптопровайдера;

-cont — задать имя ключевого контейнера (по умолчанию выбор из списка);

-ku — использовать контейнер пользователя (CURRENT_USER);

-km — использовать контейнер компьютера (LOCAL_MACHINE);

-dm — установка в хранилище компьютера (LOCAL_MACHINE);

-du — установка в хранилище пользователя (CURRENT_USER);

-askpin — запросить пароль ключевого контейнера из с консоли;

<имя файла> — имя файла, содержащего сертификат.

Добавление сертификата УЦ из файла certne_ucw.cer в хранилище машины (для текущего пользователя):

$ certmgr -inst -file certne_ucw.cer -store uRoot

Добавление корневых сертификатов из файла cert.p7b (для текущего пользователя):

$ certmgr -inst -all -file cert.p7b -store uRoot

Необходимо последовательно добавить все сертификаты.

Примечание: Корневые сертификаты для всех пользователей ставятся в хранилище машины — т.е. с параметром -store mRoot. Например: # certmgr -inst -store mRoot -file /tmp/cert.cer


Просмотр сертификатов

Для просмотра установленных сертификатов можно воспользоваться командой:

$ certmgr -list 
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             : CN=Test User5, E=cas@altlinux.org
Serial              : 0x120012447FA7E652B76808CD7900000012447F
SHA1 Hash           : 0xcb8e7ca68bea0ffbbd84c326d565de68cd8a15f5
SubjKeyID           : 6f7507353601d6d943f1406aae60c21ab65190e0
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 18/12/2018  13:41:38 UTC
Not valid after     : 18/03/2019  13:51:38 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\\test.000\2EF8
Provider Name       : Crypto-Pro GOST R 34.10-2001 KC1 CSP
Provider Info       : ProvType: 75, KeySpec: 1, Flags: 0x0
CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================

[ErrorCode: 0x00000000]

Просмотр сертификатов в локальном хранилище uMy:

$ certmgr -list -store uMy
Примечание: Если в списке сертификатов выводится PrivateKey Link: Yes. Container: HDIMAGE\\test.000\2EF8, то сертификат ассоциирован (связан) с приватным ключом, а если выводится PrivateKey Link: No — связи нет, и использовать такой контейнер для подписи не удастся: Ассоциация сертификата с контейнером


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

$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken'

Просмотр корневых сертификатов:

$ certmgr -list -store uRoot

Получение сертификата в УЦ и его установка

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

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


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

$ certmgr -list -file certnew.p7b
Certmgr 1.1 (c) "CryptoPro",  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=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Serial              : 0x2B6E3351FD6EB2AD48200203CB5BA141
SHA1 Hash           : 0x046255290b0eb1cdd1797d9ab8c81f699e3687f3
SubjKeyID           : 15317cb08d1ade66d7159c4952971724b9017a83
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 05/08/2014  13:44:24 UTC
Not valid after     : 05/08/2019  13:54:03 UTC
PrivateKey Link     : No                  
2-------
Issuer              : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : CN=Test User5, E=cas@altlinux.org
Serial              : 0x120012447FA7E652B76808CD7900000012447F
SHA1 Hash           : 0xcb8e7ca68bea0ffbbd84c326d565de68cd8a15f5
SubjKeyID           : 6f7507353601d6d943f1406aae60c21ab65190e0
Signature Algorithm : ГОСТ Р 34.11/34.10-2001
PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
Not valid before    : 18/12/2018  13:41:38 UTC
Not valid after     : 18/03/2019  13:51:38 UTC
PrivateKey Link     : No
CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================

[ErrorCode: 0x00000000]

Цепочка сертификатов содержит два сертификата:

  • Сертификат удостоверяющего центра.
  • Сертификат клиента.

Для установки сертификата удостоверяющего центра:

  • выполните команду:
    $ certmgr -inst -file certnew.p7b -store uRoot
    
  • в ответ на запрос команды нажмите 1.

Для записи сертификата клиента в контейнер:

  • выполните команду:
    $ certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test'
    
  • в ответ на запрос команды нажмите 2.
  • введите пароль на контейнер \\.\HDIMAGE\test при запросе:
    Запрос пароля на контейнер
Примечание: Корневые сертификаты для всех пользователей ставятся в хранилище машины — т.е. с параметром -store mRoot. Например: # certmgr -inst -store mRoot -file /tmp/cert.cer CRL ставятся точно также только с параметром -crl. CRL ставить не обязательно, но нужно убедиться что в /etc/opt/cprocsp/config64.ini в секции apppath указан правильный путь для libcurl.so. По умолчанию там путь до библиотеки от КриптоПро и если curl от КриптоПро не установлен — загрузка CRL работать не будет. Установка параметра на 64-битных системах:
# cpconfig -ini \\config\\apppath -add string libcurl.so /opt/cprocsp/lib/amd64/libcpcurl.so


Проверка цепочки сертификатов

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


Таблица 4. Сертификаты популярных удостоверяющих центров.

Удостоверяющий Центр Источник Сертификаты
ПАК «Головной удостоверяющий центр» https://e-trust.gosuslugi.ru/MainCA https://e-trust.gosuslugi.ru/Shared/DownloadCert?thumbprint=8CAE88BBFD404A7A53630864F9033606E1DC45E2
ЗАО «Национальный удостоверяющий центр» https://www.nucrf.ru/info/ https://www.nucrf.ru/download/nucrf.p7b
Удостоверяющий центр СКБ Контур https://ca.kontur.ru/about/certificates (выбрать 2015 год) http://cdp.skbkontur.ru/certificates/kontur-root-2015.crt

Для проверки можно скопировать персональный сертификат в файл:

cryptcp -copycert -dn "CN=Иванов Иван Иванович" -df  tt.cer
CryptCP 5.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.

Будет использован следующий сертификат:
Субъект:11223344556, 102301111222, Пр-т Победы 14 кв.3, 39 Калининградская обл., Калининград, RU, ivanov@mail.mail, Иван Иванович, Иванов, Иванов Иван Иванович
Действителен с 21.02.2019 13:16:38 по 21.05.2019 13:26:38

Цепочки сертификатов проверены.
Копирование сертификатов завершено.
[ErrorCode: 0x00000000]

Из вывода следует, что все сертификаты есть в цепочке сертификатов.

Если же команда возвращает «Цепочка сертификатов не проверена для следующего сертификата:» или другую ошибку:

$ cryptcp -copycert -dn E=user@test.ru -df personal.cer

CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:******
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

Certificate chain is not checked for this certificate:
RDN:******
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

The certificate or certificate chain is based on an untrusted root.
Do you want to use this certificate ([Y]es, [N]o, [C]ancel)?

(нажмите C и Enter, чтобы выйти).

Можно запустить вышеуказанную команду с отладкой цепочки:

$ CP_PRINT_CHAIN_DETAIL=1 cryptcp -copycert -dn E=user@test.ru -df personal.cer
...
----------- Error chain -----------
Chain status:IS_UNTRUSTED_ROOT
Revocation reason:unspecified
1. 
 Subject:'E=ca@skbkontur.ru, C=ru, L=:0B5@8=1C@3, O= �$ �!▒ ▒>=BC@�, CN=uc skb kontur (root)'
 Issuer:'E=ca@skbkontur.ru, C=ru, L=:0B5@8=1C@3, O= �$ �!▒ ▒>=BC@�, CN=uc skb kontur (root)'
 Cert status:IS_UNTRUSTED_ROOT
...

То есть нам надо установить сертификат УЦ с CN=uc skb kontur (root):

$ certmgr -inst -store uRoot -file kontur-root-2015.crt

После этого:

$ cryptcp -copycert -dn E=user@test.ru -df personal.cer
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN:******
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

Certificate chains are checked.
Certificate's been copied.
[ReturnCode: 0]

Всё в порядке и сертификат виден в плагине Cades.

Удаление сертификата

Удалить сертификат c "CN=Иванов Иван Иванович" из хранилища КриптоПро:

$ certmgr -delete -dn "CN=Иванов Иван Иванович"

Удалить сертификат c "CN=Иванов Иван Иванович" из контейнера:

$ certmgr -delete -dn "CN=Иванов Иван Иванович" -container '\\.\Aladdin R.D. JaCarta [SCR Interface] 01 00\test'

Удалить все сертификаты из хранилища КриптоПро:

$ certmgr -delete -all
$ certmgr -delete -store uRoot

Удалить все сертификаты установленные в хранилище машины:

# certmgr -delete -store mRoot

Экспорт контейнера и сертификата на другую машину

Если при создании контейнера он был помечен как экспортируемый (ключ -exportable), то его можно экспортировать на USB-диск:

$ csptest -keycopy -contsrc '\\.\HDIMAGE\test_export' -contdest '\\.\FLASH\test_new'
CryptAcquireContext succeeded.HCRYPTPROV: 36965843
CryptAcquireContext succeeded.HCRYPTPROV: 37297363
Total: SYS: 0,100 sec USR: 0,200 sec UTC: 13,420 sec
[ErrorCode: 0x00000000]

При этом потребуется ввести пароль от контейнера '\\.\HDIMAGE\test_export' и задать пароль на новый контейнер '\\.\FLASH\test_new'.

Примечание: Будьте внимательны при операциях импорта/экспорта контейнера с использованием токена:
$ csptest -keycopy -contsrc '\\.\HDIMAGE\test_export' -contdest '\\.\Aladdin R.D. JaCarta [SCR Interface] (000000000000) 00 00\test_export'
необходимо будет предъявлять 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: 41622371
\\.\FLASH\test_new
\\.\HDIMAGE\test_export
\\.\HDIMAGE\test
OK.
Total: SYS: 0,030 sec USR: 0,060 sec UTC: 0,160 sec
[ErrorCode: 0x00000000]

Экспортировать сертификат из локального хранилища в файл:

$ certmgr -export -dn 'CN=Ли Александр Сергеевич' -dest test.cer

Скопировать сертификат на USB-диск:

$ cp test.cer /run/media/user/NAMEUSB/

Экспорт контейнера с USB-диска на жесткий диск:

$ csptest -keycopy -contsrc '\\.\FLASH\test_new' -contdest '\\.\HDIMAGE\test_export'
CryptAcquireContext succeeded.HCRYPTPROV: 35778003
CryptAcquireContext succeeded.HCRYPTPROV: 36125907
Total: SYS: 0,050 sec USR: 0,240 sec UTC: 19,390 sec
[ErrorCode: 0x00000000]
Примечание: Экспорт сертификата на жесткий диск необходимо выполнять под пользователем, который будет использовать данный контейнер для подписи.


Ассоциировать сертификат с контейнером, сертификат попадет в пользовательское хранилище My:

$ certmgr -inst -file /run/media/user/NAMEUSB/test.cer -cont '\\.\HDIMAGE\test_export'

Экспорт сертификатов на другую машину

Закрытые ключи к сертификатам находятся в /var/opt/cprocsp/keys.

Для экспорта сертификатов необходимо:

  1. Перенести ключи из /var/opt/cprocsp/keys на нужную машину в тот же каталог.
  2. Экспортировать сертификаты (их, количество можно определить, выполнив: certmgr -list, в примере сертификатов 3):
    $ for i in `seq 1 3`; do echo $i | certmgr -export -dest $i.cer; done
    
  3. Перенести файлы сертификатов (1.cer, 2.cer, 3.cer) на нужную машину.
  4. На машине, куда переносятся сертификаты, просмотреть какие контейнеры есть (должны появится контейнеры с первой машины):
    $ csptest -keyset -enum_cont -verifycontext -fqcn
    
  5. Связать сертификат и закрытый ключ:
    $ certmgr -inst -file 1.cer -cont '\\.\HDIMAGE\container.name'
    
    Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
    Cannot install certificate
    Public keys in certificate and container are not identical
    
  6. Если закрытого ключа нет, то просто поставить сертификат:
    $ certmgr -inst -file 1.cer
    

Импорт персонального сертификата

Вы можете импортировать собственный сертификат в локальный считыватель HDIMAGE.

Если у вас нет сертификата, самое время его создать:

Допустим, мы пошли по первому пути и создали сертификат web-server (делать это строго под правами root):

# . cert-sh-functions
# ssl_generate 'web-server'

Сертификат по умолчанию будет лежать в /var/lib/ssl/certs/web-server.cert, а ключ ­— в /var/lib/ssl/private/web-server.key

Для импорта потребуется файл сертификата и закрытый ключ в контейнере PKCS#12.

Создадим для нашего ключа и сертификата необходимый контейнер:

openssl pkcs12 -export -in /var/lib/ssl/certs/web-server.cert -inkey /var/lib/ssl/private/web-server.pem -out web-server.p12
Примечание: При создании контейнера будет дважды запрошен пароль для экспорта. По соображениям безопасности вводимые символы не показываются. После ввода каждого пароля нажимайте Enter.


Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде):

# openssl pkcs12 -in web-server.p12 -nodes | grep BEGIN
Enter Import Password:
MAC verified OK
-----BEGIN CERTIFICATE-----
-----BEGIN PRIVATE KEY-----

И сертификат и ключ попали в контейнер.

После генерации сертификата проверим наличие считывателя:

# cpconfig -hardware reader -view | grep ^Nick
Nick name: FLASH
Nick name: HDIMAGE

Для импорта сертификата в КриптоПро используйте программу certmgr. В нашем случае:

$ certmgr -inst -file web-server.p12 -cont HDIMAGE

Если Вам необходимо импортировать сертификат с токена:

certmgr -inst -cont '\\.\Aktiv Co. Rutoken S 00 00\le-fb25d25d-23e9-4723-ae4c-fe0c95f2fcc1'

Если контейнер защищен паролем используйте ключ -pin <пароль>

Инструменты КриптоПро — кроссплатформенный графический интерфейс (cptools)

В версии КриптоПРО 5 появилась графическая утилита для работы с сертификатами — cptools.
Для использования cptools необходимо установить пакет cprocsp-cptools-gtk из скачанного архива:

# apt-get install cprocsp-cptools-gtk*

После этого её можно запустить из консоли:

$ cptools

Графическая утилита для работы с сертификатами

С её помощью можно установить сертификат из токена в хранилище uMy:
CryptoPro5-cptools-import-cert.png

Работа с сертификатами в token-manager

token-manager предоставляет графический интерфейс управления ключевыми носителями и сертификатами. С помощью этой программы можно:

  • просматривать подключенные ключевые носители (токены);
  • изменять PIN-код ключевого носителя;
  • устанавливать, просматривать и удалять сертификаты;
  • просматривать и устанавливать лицензию КриптоПро.

Установка и запуск

Установка пакета token-manager:

# apt-get install token-manager

Запустить token-manager можно:

  • из командной строки:
    $ python /usr/bin/token-manager.py
    
  • в рабочей среде Mate: Меню Система ▷ Администрирование ▷ Ключевые носители и сертификаты;
  • в рабочей среде KDE5: Меню запуска приложений ▷ Настройки ▷ Ключевые носители и сертификаты.

token-manager

Проверка лицензии

Проверить срок истечения лицензии КриптоПРО можно выбрав в меню token-manager пункт Операции ▷ Просмотр лицензии КриптоПро CSP:

Просмотр лицензии КриптоПро CSP

Для установки другой лицензии КриптоПРО выберите в меню token-manager пункт Операции ▷ Ввод лицензии КриптоПро CSP:

Ввод лицензии КриптоПро CSP

Просмотр сертификатов

Просмотреть список сертификатов в хранилище или на ключевом носителе, можно выбрав соответствующий носитель:

Просмотр сертификатов в хранилище

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

Просмотр сертификата

Для просмотра корневых сертификатов, необходимо выбрать в меню token-manager пункт Операции ▷ Просмотр корневых сертификатов.

Установка сертификата

Чтобы установить сертификат с токена в локальное хранилище, необходимо выбрать контейнер на токене и нажать кнопку «Установить»:

Установка сертификата

Сертификат будет установлен в локальное хранилище сертификатов и будет связан с закрытым ключом на токене.

Чтобы установить сертификат в локальное хранилище из файла, необходимо выбрать «Личное хранилище сертификатов», нажать кнопку «Установить», выбрать файл сертификата и нажать кнопку «Открыть». Появится сообщение об успешном импорте сертификата:

Установка сертификата

Сертификат будет установлен в локальное хранилище сертификатов, но не будет связан ни с каким закрытым ключом. Этот сертификат можно использовать для проверки подписи.

Электронная подпись

Существуют два вида электронной подписи:

  • прикреплённая (attached) — в результирующий файл упакованы данные исходного файла и подпись;
  • откреплённая (detached) — подписываемый документ остается неизменным, подпись же сохраняется в отдельном файле. Для проверки отсоединенной подписи нужны оба файла, файл подписи и файл исходного документа.

Создание и проверка подписи в командной строке

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

Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла.

Для создания прикрепленной (attached) электронной подписи выполните команду:

Примечание: Проще всего для указания сертификата использовать адрес e-mail.
$ cryptcp -sign -dn E=user@test.ru -der zayavlenie.pdf
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.

Будет использован следующий сертификат:
Субъект:user@test.ru, Иванов Иван
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38

Цепочки сертификатов проверены.
Папка './':
zayavlenie.pdf... Подпись данных...    
    
Подписанное сообщение успешно создано.
[ErrorCode: 0x00000000]

где

  • -dn E=user@test.ru — сертификат по e-mail;
  • -der — использовать формат DER для файла подписи (по умолчанию используется формат Base64);
  • zayavlenie.pdf — имя подписываемого файла.

На выходе появится файл zayavlenie.pdf.sig, содержащий как сам подписываемый файл, так и электронную подпись.

Для создания открепленной (detached) подписи необходимо заменить ключ -sign на -signf:

$ cryptcp -signf -dn E=user@test.ru -der zayavlenie.pdf

Тогда рядом с оригинальным файлом будет лежать файл подписи — zayavlenie.pdf.sgn.

Проверка подписи

Для проверки прикреплённой подписи выполните команду:

$ cryptcp -verify zayavlenie.pdf.sig
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.

Будет использован следующий сертификат:
Субъект:user@test.ru, Иванов Иван
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38

Цепочки сертификатов проверены.
Папка './':
zayavlenie.pdf.sig... Проверка подписи...     
Автор подписи: user@test.ru, Иванов Иван
 Подпись проверена.
[ErrorCode: 0x00000000]

Показано, кто подписывал и что подпись проверена.

Для проверки откреплённой подписи выполните команду:

$ cryptcp -vsignf zayavlenie.pdf
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018.
Утилита командной строки для подписи и шифрования файлов.

Будет использован следующий сертификат:
Субъект:user@test.ru, Иванов Иван
Действителен с 18.12.2018 13:41:38 по 18.03.2019 13:51:38

Цепочки сертификатов проверены.
Папка './':
234.pdf... Проверка подписи...     
    
Автор подписи: user@test.ru, Иванов Иван
 Подпись проверена.
[ErrorCode: 0x00000000]

Также для проверки электронной подписи можно воспользоваться сервисом на сайте Госуслуг — https://www.gosuslugi.ru/pgu/eds.

Извлечение подписанного файла

Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи:

$ cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf

Создание и проверка ЭЦП в ALT CSP КриптоПро

Создание и проверка ЭЦП в gost-crypto-gui

gost-crypto-gui — средство для создания электронной подписи и шифрования файлов.

Установить пакет gost-crypto-gui из репозитория можно, выполнив команду:

# apt-get install gost-crypto-gui

Запустить программу можно:

  • из командной строки:
    $ python /usr/bin/gost-crypto-gui.py
    
  • в рабочей среде Mate: Меню Система ▷ Администрирование ▷ Подпись и шифрование файлов;
  • в рабочей среде KDE: Меню запуска приложений ▷ Настройки ▷ Подпись и шифрование файлов.

С её помощью можно подписывать и проверять подписи файлов:

Программа gost-crypto-gui

Для создания электронной подписи файла необходимо:

  1. Нажать кнопку «Подписать файл(ы)».
  2. Выбрать файл, который необходимо подписать.
  3. Выбрать сертификат и нажать кнопку «Далее»:
    Выбор сертификата
  4. Ввести пароль на контейнер (если он был установлен):
    Пароль на контейнер
  5. Появится сообщение о подписанном файле:
    Информация о подписанном файле

Опции ЭП настраиваются в меню «Опции» (параметр «Отсоединенная подпись» не работает???):

Опции ЭП

Для проверки электронной подписи следует:

  1. Нажать кнопку «Проверить подпись».
  2. Выбрать подписанный файл.
  3. Появится информация о сертификате подписи:
    Проверка электронной подписи

Создание и проверка ЭЦП с использованием cptools

Примечание: cptools доступна версии КриптоПро 5.


Запустить программу можно из консоли (должен быть установлен cprocsp-cptools-gtk из скачанного архива КриптоПро):

$ cptools

С помощью cptools можно подписывать и проверять подписи файлов.

Для создания электронной подписи файла необходимо:

  1. В левом меню выбрать пункт «Создание подписи».
  2. Выбрать файл, который необходимо подписать, нажав кнопку «Выбрать файл для подписи» (или ввести адрес файла в текстовое поле под кнопкой «Выбрать файл для подписи»).
  3. Изменить имя файла подписи, если оно вас не устраивает:
    Создание подписи в КриптоПро CSP
  4. Нажать кнопку «Подписать».
  5. Ввести пароль на контейнер (если он был установлен).
  6. Появится сообщение о подписанном файле: «Создание подписи завершилось успехом».

Для проверки электронной подписи следует:

  1. В левом меню выбрать пункт «Проверка подписи».
  2. Выбрать файл с подписью, нажав кнопку «Выбрать файл с подписью для проверки» (или ввести адрес файла в текстовое поле под этой кнопкой).
  3. Нажать кнопку «Проверить подпись».
  4. Появится информация о результате проверки:
    Проверка подписи в КриптоПро CSP

Web

Информацию о создании и проверки ЭЦП на веб-сайтах с помощью плагина КриптоПро можно найти в руководстве разработчика КриптоПро ЭЦП Browser plug-in:

КриптоПро ЭЦП Browser plug-in

Внимание! Последняя доступная версия плагина КриптоПро ЭЦП Browser plug-in 2.0 требует КриптоПро 4.0. С более ранними версиями КриптоПро плагин не работает и конфликтует.


КриптоПро ЭЦП Browser plug-in предназначен для создания и проверки электронной подписи (ЭП) на веб-страницах с использованием СКЗИ «КриптоПро CSP».

Плагин проверки ЭЦП для браузера требует установленного КриптоПро CSP, пакета cprocsp-rdr-gui-gtk из его комплекта и расширения для браузера CryptoPro Extension for CAdES Browser Plug-in (для работы в Firefox версии 52 и выше).

Для установки плагина:

  1. Скачайте архив по ссылке http://www.cryptopro.ru/products/cades/plugin/get_2_0 (будет скачан архив под архитектуру браузера) или на странице https://www.cryptopro.ru/products/cades/plugin/ нажмите ссылку «версия 2.0 для пользователей»:
    Скачать актуальную версию КриптоПро ЭЦП Browser plug-in
  2. Распакуйте архив:
    $ tar -xf cades-linux-amd64.tar.gz
    
  3. Установите пакеты (под правами root, из папки с установочными файлами):
    # apt-get install cprocsp-pki-{cades,plugin}-*.rpm
    
  4. Разместите ссылки (под правами root):
    Для Chromium:
    # ln -s /usr/share/chromium-browser/extensions /usr/lib64/chromium/extensions
    
    Для Firefox (64-битная версия):
    # ln -s /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 /usr/lib64/browser-plugins/libnpcades.so
    
    В актуальных версиях пакетов cprocsp-pki-* эти символические ссылки создаются автоматически в процессе установки.
  5. Для работы в Firefox версии 52 и выше установите расширение для браузера Инструкция на сайте производителя. Для установки расширения в Mozilla Firefox скачайте его по ссылке https://www.cryptopro.ru/sites/default/files/products/cades/extensions/firefox_cryptopro_extension_latest.xpi или нажмите на ссылку «Скачать расширение для браузера» на странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html
    Ссылка на расширение для браузера
    Во всплывающем окне нажмите кнопку «Разрешить»:
    Разрешить установку расширения для браузера
    Нажмите кнопку «Добавить»:
    Добавить расширение для браузера
    Появится сообщение, что расширение добавлено в Firefox:
    Сообщение об успешном добавлении расширения
    Убедиться, что плагин установлен можно на странице about:addons (или about:plugins в более ранних версиях Mozilla Firefox). Сделайте его активируемым по умолчанию.
  6. Для работы в Chromium установите расширение для браузера на странице chrome://extensions/:
    Добавить расширение для браузера
  7. На странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html вверху должна появится надпись: «Плагин загружен» и должен показаться сертификат в списке:
    Проверка работы КриптоПро ЭЦП Browser plug-in
    Проверка работы КриптоПро ЭЦП Browser plug-in
    Внимание! Если список пуст, необходимо проверить правильность цепочки сертификатов
  1. Внимание! Если при переходе на страницу https://www.cryptopro.ru/sites/default/files/products/cades/demopage/simple.html получаем ошибку SEC_ERROR_NO_MODULE, необходимо на странице about:config изменить параметр security.tls.version.max;3 на 2 или 1


zakupki.gov.ru

Для входа в личный кабинет на http://zakupki.gov.ru необходимо:

1. Браузер с поддержкой ГОСТового TLS: Chromium-gost или firefox-gost.

2. Так как сертификат у этого сайта неправильный, потребуется новая версия КриптоПро (4.0.9963 или новее) и выключение строгой проверки имени сервера (под правами root)[1]:

# /opt/cprocsp/sbin/amd64/cpconfig -ini '\config\parameters' -add long Rfc6125_NotStrict_ServerName_Check 1

Проверка под обычным пользователем:

$ /opt/cprocsp/bin/amd64/csptestf -tlsc -server zakupki.gov.ru -nosave
HDEContext expired: OK if file is completely downloaded
Reply status: HTTP/1.1 200 OK
1 connections, 589 bytes in 0.200 seconds;
Total: SYS: 0,020 sec USR: 0,150 sec UTC: 0,250 sec
[ErrorCode: 0x00000000]

Вход в ЕСИА

Для аутентификации через ЕСИА (https://esia.gosuslugi.ru/) потребуется установить версию не позже CSP 4.0R3 и плагин IFCPlugin, а также установить расширение для плагина Госуслуг, в зависимости от версии браузера:

Перезапустить браузер.

Подробнее:

Примечание: Для старых версий плагина (< 3.0.0) необходимо добавить в файл /etc/ifc.cfg после раздела с Jacarta (для 64-битных систем):
  { name  = "CryptoPro CSP";
    alias = "cryptoprocsp";
    type  = "pkcs11";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },


Примечание: Для работы с контейнерами КриптоПро (в том числе с ГОСТ-2012) для плагина 3.0.5 необходимо добавить в файл /etc/ifc.cfg (для 64-битных систем):
 { name  = "CryptoPro CSP5";
    alias = "cprocsp5";
    type  = "pkcs11";
    alg   = "gost2001";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },
  { name  = "CryptoPro CSP5 2012 256";
    alias = "cprocsp5_2012_256";
    type  = "pkcs11";
    alg   = "gost2012_256";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  },
 { name  = "CryptoPro CSP5 2012 512";
    alias = "cprocsp5_2012_512";
    type  = "pkcs11";
    alg   = "gost2012_512";
    model = "CPPKCS 3";
    lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
  }

И сделать символическую ссылку на библиотеку pkcs11:

# ln -s /opt/cprocsp/lib/amd64/libcppkcs11.so.4.0.4 /usr/lib/mozilla/plugins/lib/libcppkcs11.so


Журнал работы плагина можно найти в файле /var/log/ifc/engine_logs/engine.log.

Особенности работы с токенами

Rutoken S

При входе в ЕСИА с помощью Rutoken S не находится приватная часть ключа. В журнале ifc появляется строка:

IFC:do_work_sign_cms:ERROR:get_priv_key_by_id error:ifc_sign_cms.c:110

Для этого надо перенести приватный ключ в локальное хранилище и задействовать его:

$ csptest -keycopy -contsrc 'имя_контейнера_например\\.\Aktiv Rutoken ECP 00 00\ххххх' -contdest '\\.\HDIMAGE\private' -pindest пароль
$ certmgr -inst -cont '\\.\HDIMAGE\private'

для AltLinux9.2 КриптоПро5 Rutoken S - если cptools не читает ключ.

$ lsusb
Bus 001 Device 005: ID 0a89:0020 Retoken S

Добавить группу, если в журнале ошибки по отсутствию групп

$ groupadd scard
$ groupadd pcscd

В

$ cd /lib/udev/rules.d

добавить в файл

$ vi 50-pcscd-asedriveiiie.rules

строку

ATTRS{idVendor}=="0a89", ATTRS{idProduct}=="0020", GROUP="pcscd"

И закоментировать в файле

$ vi 60-openct.rules

строку

#ATTR{idVendor}=="0a89", ATTR{idProduct}=="0020", RUN+="/lib/udev/openct_usb /dev/$name"

После внесения изменений перезагрузить службу

$ service udevd restart

КриптоПро JCP

  • Для установки КриптоПро JCP нужно установить Oracle Java 1.7.0 (через собственную сборку или пакеты для Fedora)
  • Распакуйте архив и перейдите в каталог
  • Выполните
# ./install.sh /usr/java/jre1.7.0_51 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX "Your Company"

Поддержка Рутокена

# java -jar rtjlib.jar -install -rutoken

Запуск контрольной панели

$ ./ControlPane.sh /usr

(требует графического дисплея)

Ссылки

Известные ошибки и методы исправления

Доменный пользователь не видит токен

Необходимо создать правило в polkit (/etc/polkit-1/rules.d) которое разрешает действия org.debian.pcsc-lite.access_pcsc и org.debian.pcsc-lite.access_card для доменных пользователей, после чего перезагрузить рабочую станцию:

polkit.addRule(function(action, subject) {
if (action.id "org.debian.pcsc-lite.access_pcsc" && subject.isInGroup("пользователи домена")) {
return polkit.Result.YES;
};
if (action.id "org.debian.pcsc-lite.access_card" && subject.isInGroup("пользователи домена")) {
return polkit.Result.YES;
};
});

Неправильный зарегистрированный набор ключей

Код ошибки: 0x8009001A Может возникнуть в многопользовательской системе у второго и последующих пользователей из-за нарушения прав доступа к файлам в каталоге /var/opt/cprocsp/tmp.

Добавить в ACL отдельную запись для суперпользователя root:

# setfacl -R -m u:root:rwx /var/opt/cprocsp/tmp

Или же изменить переменную ядра fs.protected_regular на значение 0 (чем будет открыта уязвимость описанная https://www.opennet.ru/opennews/art.shtml?num=50147 однако проблемы многопользовательского режима исчезнут)

# echo 'fs.protected_regular = 0' >> /etc/sysctl.d/99-sysctl.conf
# sysctl -p --system