КриптоПро: различия между версиями
(не показаны 202 промежуточные версии 31 участника) | |||
Строка 1: | Строка 1: | ||
{{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> --> | |||
== Совместимость == | |||
По информации разработчика, с ALT Linux совместимы следующие продукты КриптоПро: | |||
* КриптоПро CSP | |||
* КриптоПро JCP | |||
* КриптоПро HSM | |||
* КриптоПро TSP | |||
* КриптоПро OCSP | |||
* КриптоПро ЭЦП Browser plug-in | |||
* КриптоПро SSF | |||
* КриптоПро Stunnel | |||
* Браузер КриптоПро 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) — для 32-разрядных систем (x86, rpm)</code>; | |||
*<code>linux-amd64.tgz (20,1 МБ, для x86_64) — для 64-разрядных систем (x64, rpm)</code>. | |||
[[Изображение:Cryptopro_load.png|Загрузка КриптоПро]] | |||
{{Attention|По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия '''на три месяца'''}} | {{Attention|По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия '''на три месяца'''}} | ||
== Установка == | === Установка === | ||
1. Установите пакет {{pkg|cryptopro-preinstall}}: | |||
:<source lang="text" highlight="1"># apt-get install cryptopro-preinstall</source> | |||
:Этот пакет установит все требуемое для КриптоПро (включая инфраструктуру поддержки карт Рутокен S и Рутокен ЭЦП). | |||
{{note|Пакет {{pkg|cryptopro-preinstall}} вытягивает зависимости {{pkg|libpangox-compat}}, {{pkg|opensc}}, {{pkg|pcsc-lite}}, {{pkg|pcsc-lite-rutokens}}, {{pkg|pcsc-lite-ccid}}, {{pkg|newt52}}.}} | |||
2. Распакуйте архив, скачанный с официального сайта КриптоПро: | |||
:<source lang="text" highlight="1">$ tar -xf linux-amd64.tgz</source> | |||
''Таблица 1. Описание необходимых пакетов КриптоПро.'' | |||
{|class="standard" | |||
!Пакет | |||
!Описание | |||
|- | |||
|colspan="2"|'''Базовые пакеты:''' | |||
|- | |||
|{{pkg|cprocsp-curl}}||Библиотека libcurl с реализацией шифрования по ГОСТ | |||
|- | |||
|{{pkg|lsb-cprocsp-base}}||Основной пакет КриптоПро CSP | |||
|- | |||
|{{pkg|lsb-cprocsp-capilite}}||Интерфейс CAPILite и утилиты | |||
|- | |||
|{{pkg|lsb-cprocsp-kc1}}||Провайдер криптографической службы KC1 | |||
|- | |||
|{{pkg|lsb-cprocsp-kc2}}||Провайдер криптографической службы KC2 (требует наличия аппаратного датчика случайных чисел или гаммы) | |||
|- | |||
|- | |||
|{{pkg|lsb-cprocsp-rdr}}||Поддержка ридеров и RNG | |||
|- | |||
|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-rutoken}}||Поддержка карт Рутокен | |||
|- | |||
|{{pkg|cprocsp-rdr-jacarta}}||Поддержка карт JaCarta | |||
|- | |||
|{{pkg|cprocsp-rdr-pcsc}}||Компоненты PC/SC для ридеров КриптоПро CSP | |||
|- | |||
|{{pkg|lsb-cprocsp-pkcs11}}||Поддержка PKCS11 | |||
|- | |||
|{{pkg|ifd-rutokens}}||Конфигурация Рутокеновских карт (или можно взять {{pkg|pcsc-lite-rutokens}} из репозитория) | |||
|} | |||
3. Установите пакеты КриптоПро: | |||
* под правами пользователя 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-64* lsb-cprocsp-rdr-64* </source> | |||
{{note|Для 32-битной версии вместо последнего пакета — {{pkg|lsb-cprocsp-rdr-4*}}}} | |||
* установите пакеты для поддержки токенов (Рутокен 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> | |||
{{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|Установка пакетов КриптоПро]] | |||
'''Примечания:''' | '''Примечания:''' | ||
Строка 25: | Строка 103: | ||
* Для установки {{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}} добавлены подпакеты: | |||
** {{pkg|cryptopro-preinstall-base}} для установки с {{pkg|cprocsp-compat-altlinux}}, «предоставляющим» {{pkg|lsb}} (в случае нежелательности «лишних» зависимостей вроде {{pkg|libqt3}}), и | |||
** {{pkg|cryptopro-preinstall-full}} для автоустановки зависимостей {{pkg|cprocsp-rdr-gui}}. | |||
=== Обновление === | |||
{{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}} начните новый сеанс пользователя в консоли; | |||
{{note|Не работает для суперпользователя.}} | |||
или | |||
* выполните от имени пользователя, который будет запускать команды (будет действовать до закрытия терминала): | |||
<source lang="Bash">export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"</source> | |||
{{Attention|Если установлен пакет {{pkg|mono}} или {{pkg|mono4-devel}}, может быть конфликт по имени утилиты certmgr}} | |||
== Проверка лицензии == | === Проверка лицензии === | ||
Проверить срок истечения лицензии можно командой (обратите внимание на строки '''Expires:'''): | Проверить срок истечения лицензии можно командой (обратите внимание на строки '''Expires:'''): | ||
<source lang="text"> | <source lang="text" highlight="1">$ cpconfig -license -view | ||
License validity: | |||
4040E-G0037-EK8R3-C6K4U-HCXQG | |||
Expires: | Expires: 2 month(s) 23 day(s) | ||
License type: Server. | |||
</source> | |||
{{note|Для версии КриптоПро CSP под Linux все лицензии считаются серверными, поэтому не смущайтесь строкой «License type: Server».}} | |||
Для установки другой лицензии выполните (под root): | Для установки другой лицензии выполните (под root): | ||
<source lang="text" highlight="1"># cpconfig -license -set <серийный_номер></source> | |||
{{Note|Серийный номер следует вводить с соблюдением регистра символов.}} | {{Note|Серийный номер следует вводить с соблюдением регистра символов.}} | ||
== Управление | === Проверка версии === | ||
Проверить версию КриптоПро можно командой: | |||
<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].}} | |||
Считыватели (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 | |||
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]</source> | |||
Инициализация считывателя HDIMAGE, если его нет в списке доступных считывателей (под правами root): | |||
<source lang="text" highlight="1"># cpconfig -hardware reader -add HDIMAGE store | |||
Adding new reader: | |||
Nick name: HDIMAGE | |||
Succeeded, code:0x0</source> | |||
Считыватель 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' | |||
Adding new reader: | |||
Nick name: Aktiv Co. Rutoken S 00 00 | |||
Name device: Rutoken | |||
Succeeded, code:0x0 | |||
</source> | |||
=== Управление носителями === | |||
Просмотр доступных носителей: | |||
<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 | |||
Provider types and provider names have been listed. | |||
</source> | |||
=== Управление контейнерами === | |||
==== Создание контейнера ==== | |||
{{note|Для того, чтобы сертификат из контейнера можно было использовать через модуль pkcs11 (из пакета {{pkg|lsb-cprocsp-pkcs11}}) в браузере {{pkg|firefox-gost}}, необходимо создать его с -provtype 75 (поддержка ГОСТ-2001).}} | |||
{{Attention|C 1 января 2019 г. по указанию ФСБ РФ и Минкомсвязи всем аккредитованным УЦ запрещен выпуск сертификатов ЭП по ГОСТ 2001. | |||
Ключи и запрос на сертификат необходимо формировать ГОСТ 2012.}} | |||
Создадим контейнер с именем «''test''» в локальном считывателе ''HDIMAGE''. | |||
<source lang="text" highlight="1">$ csptest -keyset -provtype 75 -newkeyset -cont '\\.\HDIMAGE\test'</source> | |||
При установленном пакете {{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> | |||
Пароль не создается, а предъявляется (PIN-код пользователя): | |||
[[Изображение:Cryptopro-newkeyset-pin.png|Запрос пин-кода для аутентификации на носителе]]}} | |||
<source lang="text"># cryptcp -creatrqst -dn 'cn= | После указания пароля снова будет предложено перемещать указатель мыши. | ||
CryptCP | |||
Вывод команды: | |||
<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 | |||
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] | |||
</source> | |||
Локальный контейнер создан. | |||
В КриптоПро 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> | |||
[[Файл:CryptoPro5 keyset win 1.jpg|Создание неизвлекаемого контейнера]]<br> | |||
Создание обычного контейнера:<br> | |||
[[Файл:CryptoPro5 keyset win 2.jpg|Создание обычного контейнера]]<br> | |||
==== Просмотр доступных контейнеров ==== | |||
{{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. | |||
AcquireContext: OK. HCRYPTPROV: 6679203 | |||
\\.\HDIMAGE\test | |||
OK. | |||
Total: SYS: 0,000 sec USR: 0,070 sec UTC: 0,130 sec | |||
[ErrorCode: 0x00000000]</source> | |||
{{Attention|Имена контейнеров могут содержать названия в кодировке cp1251 (например, на токенах), что делает работу с ними по этим именам проблематичной. Можно показать список контейнеров с их уникальными именами командой: <source lang="text" highlight="1">$ 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]</source> Уникальные имена указаны после символа «|».}} | |||
Просмотр подробной информации о контейнере: | |||
<source lang="text" highlight="1">csptestf -keyset -container '\\.\HDIMAGE\test' -info</source> | |||
==== Удаление контейнера ==== | |||
Удалить контейнер можно с помощью команды: | |||
<source lang="text" highlight="1">$ 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]</source> | |||
== Управление сертификатами == | |||
cryptcp — приложение командной строки для создания запросов на сертификаты, шифрования и расшифрования файлов, создания и проверки электронной подписи файлов с использованием сертификатов открытых ключей, хэширования файлов. Результатом работы приложения в большинстве случаев является файл с CMS-сообщением (PKCS#7) в кодировке DER или BASE64. | |||
=== Создание запроса на получение сертификата === | |||
Создание запроса на получение сертификата средствами КриптоПро: | |||
<source lang="text" highlight="1">cryptcp -creatrqst -dn "список имён полей" -cont 'путь к контейнеру' <название_файла>.csr</source> | |||
Для создания запроса на получение сертификата потребуется: | |||
# DN — данные, которые будут храниться в поле Subject сертификата (cn=Test User5,e=cas@altlinux.org). | |||
# Имя контейнера вместе со считывателем (например, в локальном хранилище hdimage: {{path|\\.\HDIMAGE\test}}). | |||
# Имя файла, в котором следует сохранить запрос ({{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"}}.}} | |||
С помощью опции -certusage можно указать OID назначение сертификата. | |||
Назначение сертификата представляется в сертификате объектным идентификатором, присвоенным этой политике, — OID. Если в сертификате указано несколько политик, то это означает, что сертификат соответствует всем этим политикам списка. | |||
''Таблица 2. Типы применения.'' | |||
{|class="standard" | |||
!OID | |||
!Назначение | |||
|- | |||
|{{term|1.3.6.1.5.5.7.3.1}}||Аутентификация сервера | |||
|- | |||
|{{term|1.3.6.1.5.5.7.3.2}}||Аутентификация клиента | |||
|- | |||
|{{term|1.3.6.1.5.5.7.3.3}}||Подписывание кода | |||
|- | |||
|{{term|1.3.6.1.5.5.7.3.4}}||Защищенная электронная почта | |||
|- | |||
|{{term|1.3.6.1.5.5.7.3.8}}||Простановка штампов времени | |||
|- | |||
|{{term|1.3.6.1.4.1.311.10.5.1}}||Цифровые права | |||
|- | |||
|{{term|1.3.6.1.4.1.311.10.3.12}}||Подписывание документа | |||
|} | |||
''Таблица 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 | |||
CryptCP 4.0 (c) "КРИПТО-ПРО", 2002-2018. | |||
Утилита командной строки для подписи и шифрования файлов. | |||
Запрос успешно создан и сохранен в файле. | |||
[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> | |||
Тот же запрос, используя 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}} | |||
=== Установка сертификата === | |||
Добавление сертификата, без привязки к ключам (только проверка ЭЦП): | |||
<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">$ cryptcp -instcert -provtype 80 -cont '\\.\HDIMAGE\test' -ku -askpin cert.cer</source> | |||
Основные опции: | |||
-provtype — указать тип криптопровайдера (по умолчанию 75); | |||
-provname — указать имя криптопровайдера; | |||
-cont — задать имя ключевого контейнера (по умолчанию выбор из списка); | |||
-ku — использовать контейнер пользователя (CURRENT_USER); | |||
-km — использовать контейнер компьютера (LOCAL_MACHINE); | |||
-dm — установка в хранилище компьютера (LOCAL_MACHINE); | |||
-du — установка в хранилище пользователя (CURRENT_USER); | |||
-askpin — запросить пароль ключевого контейнера из с консоли; | |||
<имя файла> — имя файла, содержащего сертификат. | |||
Добавление сертификата УЦ из файла certne_ucw.cer в хранилище машины (для текущего пользователя): | |||
<source lang="text" highlight="1">$ certmgr -inst -file certne_ucw.cer -store uRoot</source> | |||
Добавление корневых сертификатов из файла cert.p7b (для текущего пользователя): | |||
<source lang="text" highlight="1">$ certmgr -inst -all -file cert.p7b -store uRoot</source> | |||
Необходимо последовательно добавить все сертификаты. | |||
{{Note|Корневые сертификаты для всех пользователей ставятся в хранилище машины — т.е. с параметром {{cmd|-store mRoot}}. Например: {{cmd|# certmgr -inst -store mRoot -file /tmp/cert.cer}}}} | |||
=== Просмотр === | === Просмотр сертификатов === | ||
<source lang="text"> | Для просмотра установленных сертификатов можно воспользоваться командой: | ||
Certmgr 1. | <source lang="text" highlight="1">$ certmgr -list | ||
Certmgr 1.1 (c) "Crypto-Pro", 2007-2018. | |||
program for managing certificates, CRLs and stores | program for managing certificates, CRLs and stores | ||
============================================================================= | ============================================================================= | ||
1------- | 1------- | ||
Issuer | Issuer : E=support@cryptopro.ru, C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2 | ||
Subject | Subject : CN=Test User5, E=cas@altlinux.org | ||
Serial | Serial : 0x120012447FA7E652B76808CD7900000012447F | ||
SHA1 Hash | SHA1 Hash : 0xcb8e7ca68bea0ffbbd84c326d565de68cd8a15f5 | ||
Not valid before | SubjKeyID : 6f7507353601d6d943f1406aae60c21ab65190e0 | ||
Not valid after | Signature Algorithm : ГОСТ Р 34.11/34.10-2001 | ||
PrivateKey Link | 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]</source> | [ErrorCode: 0x00000000]</source> | ||
=== | Просмотр сертификатов в локальном хранилище uMy: | ||
<source lang="text" highlight="1">$ certmgr -list -store uMy</source> | |||
{{Note|Если в списке сертификатов выводится '''PrivateKey Link: Yes. Container: HDIMAGE\\test.000\2EF8''', то сертификат ассоциирован (связан) с приватным ключом, а если выводится '''PrivateKey Link: No''' — связи нет, и использовать такой контейнер для подписи не удастся: | |||
[[Изображение:Certmgr_list.png|Ассоциация сертификата с контейнером]]}} | |||
Просмотр сертификатов в контейнере: | |||
<source lang="text" highlight="1">$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken'</source> | |||
Просмотр корневых сертификатов: | |||
<source lang="text" highlight="1">$ certmgr -list -store uRoot</source> | |||
=== Получение сертификата в УЦ и его установка === | |||
Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия: | |||
# Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро). | |||
# Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»: | |||
#:[[Изображение:Certrqxt1.png|Ссылка «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»]] | |||
# Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла {{path|test5.req}} и нажмите кнопку «Выдать»: | |||
#:[[Изображение:Certrqxt.png|Выдача запроса на сертификат]] | |||
# Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя {{path|certnew.p7b}}): | |||
#:[[Изображение:Certrqxt2.png|Ссылка «Загрузить цепочку сертификатов»]] | |||
{{Note|Просмотреть содержимое файла {{path|test5.req}} можно, выполнив команду: | |||
<source lang="text" highlight="1">$ cat test5.req | |||
MIIBMDCB4AIBADA2MRMwEQYDVQQDDApUZXN0IFVzZXI1MR8wHQYJKoZIhvcNAQkBFhBjYXNAYWx0 | |||
bGludXgub3JnMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQDq5IAql+tHfVT7r | |||
oz+P5dPgOUVXc7dg91nzGM7fkUBSKlapGO2A2xUDRUBHLtW/hBCiZsxdH3ydhzlZ6nhcbNKgPjA8 | |||
BgorBgEEAYI3AgEOMS4wLDAdBgNVHSUEFjAUBggrBgEFBQcDBAYIKwYBBQUHAwIwCwYDVR0PBAQD | |||
AgTwMAgGBiqFAwICAwNBAFYnhGI6SsCwFRSl5p6EVnM7y6Hx9JGM6BFS4U3xTEGvzMK7yzk9j1kG | |||
EKU7YZO5cFluPuDdi0WuYskhdz4SEg4=</source>}} | |||
Просмотреть полученный сертификат можно, выполнив команду: | |||
<source lang="text" highlight="1">$ 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] | |||
</source> | |||
Цепочка сертификатов содержит два сертификата: | |||
*Сертификат удостоверяющего центра. | |||
*Сертификат клиента. | |||
Для установки сертификата удостоверяющего центра: | |||
* выполните команду: | |||
*:<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uRoot</source> | |||
* в ответ на запрос команды нажмите 1. | |||
Для записи сертификата клиента в контейнер: | |||
* выполните команду: | |||
*:<source lang="text" highlight="1">$ certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test'</source> | |||
* в ответ на запрос команды нажмите 2. | |||
*введите пароль на контейнер \\.\HDIMAGE\test при запросе: | |||
*:[[Изображение:Keyset_pass.png|Запрос пароля на контейнер]] | |||
{{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>}} | |||
=== Проверка цепочки сертификатов === | |||
{{Attention|В кэше сертификатов для выпущенного сертификата должны присутствовать корневые сертификаты удостоверяющих центров. В противном случае он будет недоступен в плагине для браузера!}} | |||
''Таблица 4. Сертификаты популярных удостоверяющих центров.'' | |||
{|class="standard" | |||
!Удостоверяющий Центр | |||
!Источник | |||
!Сертификаты | |||
|- | |||
|ПАК «Головной удостоверяющий центр»||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 | |||
|- | |||
|} | |||
Для проверки можно скопировать персональный сертификат в файл: | |||
<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 | |||
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)?</source> | |||
(нажмите C и Enter, чтобы выйти). | |||
=== | Можно запустить вышеуказанную команду с отладкой цепочки: | ||
<source lang="text" highlight="1">$ 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 | |||
... | |||
</source> | |||
То есть нам надо установить сертификат УЦ с '''CN=uc skb kontur (root)''': | |||
== | <source lang="text" highlight="1">$ certmgr -inst -store uRoot -file kontur-root-2015.crt</source> | ||
<source lang="text"> | После этого: | ||
CryptCP | <source lang="text" highlight="1">$ 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. | 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. | Certificate's been copied. | ||
[ReturnCode: 0]</source> | [ReturnCode: 0] | ||
</source> | |||
Всё в порядке и сертификат виден в плагине Cades. | |||
=== Удаление сертификата === | |||
Удалить сертификат 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'''. | Вы можете импортировать собственный сертификат в локальный считыватель '''HDIMAGE'''. | ||
Строка 134: | Строка 837: | ||
* [[Создание сертификатов PKCS12]] (достаточно только пакета {{pkg|openssl}}) | * [[Создание сертификатов PKCS12]] (достаточно только пакета {{pkg|openssl}}) | ||
Допустим, мы пошли по первому пути и создали сертификат web-server: | Допустим, мы пошли по первому пути и создали сертификат web-server ('''делать это строго под правами root'''): | ||
<source lang=" | <source lang="text" highlight="1-2"># . cert-sh-functions | ||
ssl_generate 'web-server'</source> | # ssl_generate 'web-server'</source> | ||
Сертификат по умолчанию будет лежать в {{path|/var/lib/ssl/certs/web-server.cert}}, а ключ — в {{path|/var/lib/ssl/private/web-server.key}} | Сертификат по умолчанию будет лежать в {{path|/var/lib/ssl/certs/web-server.cert}}, а ключ — в {{path|/var/lib/ssl/private/web-server.key}} | ||
Строка 143: | Строка 846: | ||
Создадим для нашего ключа и сертификата необходимый контейнер: | Создадим для нашего ключа и сертификата необходимый контейнер: | ||
<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.}} | {{Note|При создании контейнера будет дважды запрошен пароль для экспорта. По соображениям безопасности вводимые символы не показываются. После ввода каждого пароля нажимайте Enter.}} | ||
Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде): | Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде): | ||
<source lang=" | <source lang="text" highlight="1"># openssl pkcs12 -in web-server.p12 -nodes | grep BEGIN | ||
Enter Import Password: | Enter Import Password: | ||
MAC verified OK | MAC verified OK | ||
Строка 156: | Строка 859: | ||
После генерации сертификата проверим наличие считывателя: | После генерации сертификата проверим наличие считывателя: | ||
<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|Установка сертификата]] | |||
Сертификат будет установлен в локальное хранилище сертификатов и будет связан с закрытым ключом на токене. | |||
Чтобы установить сертификат в локальное хранилище из файла, необходимо выбрать «Личное хранилище сертификатов», нажать кнопку «Установить», выбрать файл сертификата и нажать кнопку «Открыть». Появится сообщение об успешном импорте сертификата: | |||
[ErrorCode: | [[Файл:Token-manager-install-sert2.png|Установка сертификата]] | ||
--> | |||
Сертификат будет установлен в локальное хранилище сертификатов, но не будет связан ни с каким закрытым ключом. Этот сертификат можно использовать для проверки подписи. | |||
== Электронная подпись == | |||
Существуют два вида электронной подписи: | |||
* прикреплённая (attached) — в результирующий файл упакованы данные исходного файла и подпись; | |||
* откреплённая (detached) — подписываемый документ остается неизменным, подпись же сохраняется в отдельном файле. Для проверки отсоединенной подписи нужны оба файла, файл подписи и файл исходного документа. | |||
=== Создание и проверка подписи в командной строке === | |||
==== Создание подписи ==== | |||
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла. | |||
Для создания прикрепленной (attached) электронной подписи выполните команду: | |||
{{note|Проще всего для указания сертификата использовать адрес e-mail.}} | |||
<source lang="text" highlight="1">$ 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] | |||
</source> | |||
где | |||
* '''-dn E=user@test.ru''' — сертификат по e-mail; | |||
* '''-der''' — использовать формат DER для файла подписи (по умолчанию используется формат Base64); | |||
* '''zayavlenie.pdf''' — имя подписываемого файла. | |||
На выходе появится файл {{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 | |||
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]</source> | |||
Показано, кто подписывал и что подпись проверена. | |||
Для проверки откреплённой подписи выполните команду: | |||
<source lang="text" highlight="1">$ 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]</source> | |||
Также для проверки электронной подписи можно воспользоваться сервисом на сайте Госуслуг — https://www.gosuslugi.ru/pgu/eds. | |||
==== Извлечение подписанного файла ==== | |||
Для извлечения файла с данными из файла электронной подписи необходимо указать имя файла, в который будут извлечены данные, в конце команды проверки подписи: | |||
<source lang="text" highlight="1">$ cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf</source> | |||
=== [[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 == | |||
Информацию о создании и проверки ЭЦП на веб-сайтах с помощью плагина КриптоПро можно найти в | |||
руководстве разработчика КриптоПро ЭЦП Browser plug-in: | |||
* <big>[http://cpdn.cryptopro.ru/default.asp?url=content/cades/indexpage.html КриптоПро ЭЦП. Руководство разработчика]</big> | |||
== КриптоПро ЭЦП Browser plug-in == | == КриптоПро ЭЦП Browser plug-in == | ||
Плагин проверки ЭЦП для браузера требует установленного КриптоПро CSP. Инструкция на сайте производителя: http:// | {{Attention|Последняя доступная версия плагина КриптоПро ЭЦП Browser plug-in 2.0 <u>требует КриптоПро 4.0</u>. С более ранними версиями КриптоПро плагин не работает и конфликтует.}} | ||
КриптоПро ЭЦП 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] | |||
Перезапустить браузер. | |||
Подробнее: | |||
* [[ЕСИА|Вход в ЕСИА]] | |||
* [https://support.cryptopro.ru/index.php?/Knowledgebase/Article/View/275 Вход с помощью электронной подписи на портал Госуслуг на Linux (от КриптоПро)] | |||
{{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>}} | |||
{{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>}} | |||
Журнал работы плагина можно найти в файле {{path|/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 | |||
Для этого надо перенести приватный ключ в локальное хранилище и задействовать его: | |||
<source lang="text" highlight="1-2">$ csptest -keycopy -contsrc 'имя_контейнера_например\\.\Aktiv Rutoken ECP 00 00\ххххх' -contdest '\\.\HDIMAGE\private' -pindest пароль | |||
$ certmgr -inst -cont '\\.\HDIMAGE\private'</source> | |||
- | для AltLinux9.2 КриптоПро5 Rutoken S - если cptools не читает ключ. | ||
<source lang="text" highlight="1-2">$ lsusb | |||
Bus 001 Device 005: ID 0a89:0020 Retoken S</source> | |||
Добавить группу, если в журнале ошибки по отсутствию групп | |||
<source lang="text" highlight="1-2">$ groupadd scard | |||
$ groupadd pcscd</source> | |||
В <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 == | ||
Строка 218: | Строка 1237: | ||
* Распакуйте архив и перейдите в каталог | * Распакуйте архив и перейдите в каталог | ||
* Выполните | * Выполните | ||
<source lang="text" highlight="1"># ./install.sh /usr/java/jre1.7.0_51 XXXXX-XXXXX-XXXXX-XXXXX-XXXXX "Your Company"</source> | |||
=== Поддержка [[Rutoken|Рутокена]] === | |||
* Загрузите драйвер для JCP http://www.rutoken.ru/support/download/rutoken-for-cp/ и распакуйте его | |||
* Выполните: | |||
<source lang="text" highlight="1"># java -jar rtjlib.jar -install -rutoken</source> | |||
== | === Запуск контрольной панели === | ||
<source lang="text" highlight="1">$ ./ControlPane.sh /usr</source> | |||
(требует графического дисплея) | |||
== Ссылки == | |||
* ЖТЯИ.00050-03 90 02-02. СКЗИ «КриптоПро CSP». Руководство администратора безопасности. Использование СКЗИ под управлением ОС Linux (из электронной документации по КриптоПро; доступно для скачивания с демонстрационной версией) | * ЖТЯИ.00050-03 90 02-02. СКЗИ «КриптоПро CSP». Руководство администратора безопасности. Использование СКЗИ под управлением ОС Linux (из электронной документации по КриптоПро; доступно для скачивания с демонстрационной версией) | ||
* ЖТЯИ.00050-03 90 07. КриптоПро CSP. Приложение командной строки | * ЖТЯИ.00050-03 90 07. КриптоПро CSP. Приложение командной строки | ||
* [https://www.cryptopro.ru/forum2/default.aspx?g=posts&m=83121#post83121 Инструкция по настройке '''IFCPlugin''' (сайт госуслуг) для работы с КриптоПро] | |||
* [[ЭЦП]] | |||
* [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]] | ||
[[Категория:Криптография]] | [[Категория:Криптография]] | ||
{{Category navigation|title=Криптография|category=Криптография|sortkey={{SUBPAGENAME}}}} | |||
{{Category navigation|title=ПО уровня предприятия|category=Enterprise Software|sortkey={{SUBPAGENAME}}}} |
Текущая версия от 12:37, 18 сентября 2024
О КриптоПро
КриптоПро — линейка криптографических утилит (вспомогательных программ), так называемых "криптопровайдеров". Они используются во многих программах российских разработчиков для генерации ЭЦП, работы с сертификатами, организации структуры PKI и т.д. (см.сайт).
Совместимость
По информации разработчика, с ALT Linux совместимы следующие продукты КриптоПро:
- КриптоПро CSP
- КриптоПро JCP
- КриптоПро HSM
- КриптоПро TSP
- КриптоПро OCSP
- КриптоПро ЭЦП Browser plug-in
- КриптоПро SSF
- КриптоПро Stunnel
- Браузер КриптоПро 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 и Рутокен ЭЦП).
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*
- установите пакеты для поддержки токенов (Рутокен S и Рутокен ЭЦП):
# apt-get install cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* pcsc-lite-rutokens pcsc-lite-ccid
- установите пакет для поддержки токенов (JaCarta):
# apt-get install cprocsp-rdr-jacarta*
- установите пакет для поддержки носителей с неизвлекаемыми ключами:
# apt-get install cprocsp-rdr-cryptoki*
- Для установки сертификатов Главного удостоверяющего центра:
# 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.
Обновление
Для обновления КриптоПро необходимо:
- Запомнить текущую конфигурацию:
- набор установленных пакетов:
$ rpm -qa | grep cprocsp
- настройки провайдера (для простоты можно сохранить /etc/opt/cprocsp/config[64].ini).
- набор установленных пакетов:
- Удалить штатными средствами ОС все пакеты КриптоПро:
# apt-get remove lsb-cprocsp-base
- Установить аналогичные новые пакеты КриптоПро.
- При необходимости внести изменения в настройки (можно просмотреть diff старого и нового /etc/opt/cprocsp/config[64].ini).
- Ключи и сертификаты сохраняются автоматически.
Прописывание путей к исполняемым файлам
Утилиты КриптоПро расположены в директориях /opt/cprocsp/sbin/<название_архитектуры> и /opt/cprocsp/bin/<название_архитектуры>.
Чтобы каждый раз не вводить полный путь к утилитам КриптоПро:
- после установки пакета cryptopro-preinstall начните новый сеанс пользователя в консоли;
или
- выполните от имени пользователя, который будет запускать команды (будет действовать до закрытия терминала):
export PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')$PATH"
Проверка лицензии
Проверить срок истечения лицензии можно командой (обратите внимание на строки Expires:):
$ cpconfig -license -view
License validity:
4040E-G0037-EK8R3-C6K4U-HCXQG
Expires: 2 month(s) 23 day(s)
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
Настройка оборудования
Настройка устройств хранения (носителей) и считывания (считывателей) ключевой информации и датчиков случайных чисел.
Считыватели (readers) — устройства, предназначенные для чтения ключей. К считывателям относится считыватели дискет (FAT12), считыватели флеш-накопителей (FLASH), считыватели смарт-карт и токенов, считыватель образа дискеты на жестком диске (HDIMAGE) и др.
Ключевые носители (media) являются местом хранения электронной подписи. В качестве носителя ключевой информации могут использоваться: защищенный флэш-накопитель (токен) (Рутокен, JaCarta, ESMART и др.), смарт-карта, флэш-накопитель, дискета.
Ключевые контейнеры — это способ хранения закрытых ключей, реализованный в КриптоПро. Их физическое представление зависит от типа ключевого носителя (на флеш-накопителе, дискете, жестком диске это каталог в котором хранится набор файлов с ключевой информацией; в случае со смарт-картами — файлы в защищенной памяти смарт-карты).
Встроенный в «КриптоПро CSP» датчик случайных чисел (далее ДСЧ) используется для генерации ключей.
Для смарт-карт: ключи дополнительно защищаются кодом доступа к защищенной памяти смарт-карты (PIN). При всех операциях с защищенной памятью (чтение, запись, удаление...) требуется вводить PIN. Для других носителей: для повышения безопасности на контейнер можно установить пароль. В этом случае всё содержимое контейнера хранится не в открытом виде, а в зашифрованном на этом пароле. Пароль задается при создании контейнера, в дальнейшем для чтения ключей из контейнера необходимо будет вводить пароль.
Управление считывателями
Современные аппаратные и программно-аппаратные хранилища ключей, такие как Рутокен ЭЦП или 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.
Управление контейнерами
Создание контейнера
Создадим контейнер с именем «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/ГОСТ).
Создание неизвлекаемого контейнера:
Создание обычного контейнера:
Просмотр доступных контейнеров
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]
$ 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
Для создания запроса на получение сертификата потребуется:
- DN — данные, которые будут храниться в поле Subject сертификата (cn=Test User5,e=cas@altlinux.org).
- Имя контейнера вместе со считывателем (например, в локальном хранилище hdimage: \\.\HDIMAGE\test).
- Имя файла, в котором следует сохранить запрос (test5.csr).
С помощью опции -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
Установка сертификата
Добавление сертификата, без привязки к ключам (только проверка ЭЦП):
$ 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
Необходимо последовательно добавить все сертификаты.
Просмотр сертификатов
Для просмотра установленных сертификатов можно воспользоваться командой:
$ 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
Просмотр сертификатов в контейнере:
$ certmgr -list -container '\\.\Aktiv Rutoken ECP - CP 00 00\Rutoken'
Просмотр корневых сертификатов:
$ certmgr -list -store uRoot
Получение сертификата в УЦ и его установка
Для получения сертификата в УЦ (на примере тестового удостоверяющего центра КриптоПро), необходимо выполнить следующие действия:
- Откройте в браузере ссылку http://www.cryptopro.ru/certsrv (тестовый удостоверяющий центр КриптоПро).
- Нажмите ссылку «Отправить готовый запрос PKCS#10 или PKCS#7 в кодировке Base64»:
- Вставьте в поле «Base-64-шифрованный запрос сертификата» содержимое файла test5.req и нажмите кнопку «Выдать»:
- Сохраните файл по ссылке «Загрузить цепочку сертификатов» (по умолчанию предлагается имя certnew.p7b):
$ 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 при запросе:
# 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'
Просмотр списка контейнеров:
$ 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.
Для экспорта сертификатов необходимо:
- Перенести ключи из /var/opt/cprocsp/keys на нужную машину в тот же каталог.
- Экспортировать сертификаты (их, количество можно определить, выполнив: certmgr -list, в примере сертификатов 3):
$ for i in `seq 1 3`; do echo $i | certmgr -export -dest $i.cer; done
- Перенести файлы сертификатов (1.cer, 2.cer, 3.cer) на нужную машину.
- На машине, куда переносятся сертификаты, просмотреть какие контейнеры есть (должны появится контейнеры с первой машины):
$ csptest -keyset -enum_cont -verifycontext -fqcn
- Связать сертификат и закрытый ключ:
$ certmgr -inst -file 1.cer -cont '\\.\HDIMAGE\container.name'
- Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
Cannot install certificate Public keys in certificate and container are not identical
- Если закрытого ключа нет, то просто поставить сертификат:
$ certmgr -inst -file 1.cer
Импорт персонального сертификата
Вы можете импортировать собственный сертификат в локальный считыватель HDIMAGE.
Если у вас нет сертификата, самое время его создать:
- Создание через cert-sh-functions (требует установки пакета cert-sh-functions)
- Создание сертификатов PKCS12 (достаточно только пакета openssl)
Допустим, мы пошли по первому пути и создали сертификат 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
Проверка созданного контейнера (при запросе введите пароль, введённый в предыдущей команде):
# 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:
Работа с сертификатами в token-manager
token-manager предоставляет графический интерфейс управления ключевыми носителями и сертификатами. С помощью этой программы можно:
- просматривать подключенные ключевые носители (токены);
- изменять PIN-код ключевого носителя;
- устанавливать, просматривать и удалять сертификаты;
- просматривать и устанавливать лицензию КриптоПро.
Установка и запуск
Установка пакета token-manager:
# apt-get install token-manager
Запустить token-manager можно:
- из командной строки:
$ python /usr/bin/token-manager.py
- в рабочей среде Mate: Меню Система ▷ Администрирование ▷ Ключевые носители и сертификаты;
- в рабочей среде KDE5: Меню запуска приложений ▷ Настройки ▷ Ключевые носители и сертификаты.
Проверка лицензии
Проверить срок истечения лицензии КриптоПРО можно выбрав в меню token-manager пункт Операции ▷ Просмотр лицензии КриптоПро CSP:
Для установки другой лицензии КриптоПРО выберите в меню token-manager пункт Операции ▷ Ввод лицензии КриптоПро CSP:
Просмотр сертификатов
Просмотреть список сертификатов в хранилище или на ключевом носителе, можно выбрав соответствующий носитель:
Для просмотра сертификата, необходимо выбрать сертификат и нажать кнопку «Просмотр»:
Для просмотра корневых сертификатов, необходимо выбрать в меню token-manager пункт Операции ▷ Просмотр корневых сертификатов.
Установка сертификата
Чтобы установить сертификат с токена в локальное хранилище, необходимо выбрать контейнер на токене и нажать кнопку «Установить»:
Сертификат будет установлен в локальное хранилище сертификатов и будет связан с закрытым ключом на токене.
Чтобы установить сертификат в локальное хранилище из файла, необходимо выбрать «Личное хранилище сертификатов», нажать кнопку «Установить», выбрать файл сертификата и нажать кнопку «Открыть». Появится сообщение об успешном импорте сертификата:
Сертификат будет установлен в локальное хранилище сертификатов, но не будет связан ни с каким закрытым ключом. Этот сертификат можно использовать для проверки подписи.
Электронная подпись
Существуют два вида электронной подписи:
- прикреплённая (attached) — в результирующий файл упакованы данные исходного файла и подпись;
- откреплённая (detached) — подписываемый документ остается неизменным, подпись же сохраняется в отдельном файле. Для проверки отсоединенной подписи нужны оба файла, файл подписи и файл исходного документа.
Создание и проверка подписи в командной строке
Создание подписи
Для создания электронной подписи файла необходимо указать сертификат и имя подписываемого файла.
Для создания прикрепленной (attached) электронной подписи выполните команду:
$ 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: Меню запуска приложений ▷ Настройки ▷ Подпись и шифрование файлов.
С её помощью можно подписывать и проверять подписи файлов:
Для создания электронной подписи файла необходимо:
- Нажать кнопку «Подписать файл(ы)».
- Выбрать файл, который необходимо подписать.
- Выбрать сертификат и нажать кнопку «Далее»:
- Ввести пароль на контейнер (если он был установлен):
- Появится сообщение о подписанном файле:
Опции ЭП настраиваются в меню «Опции» (параметр «Отсоединенная подпись» не работает???):
Для проверки электронной подписи следует:
- Нажать кнопку «Проверить подпись».
- Выбрать подписанный файл.
- Появится информация о сертификате подписи:
Создание и проверка ЭЦП с использованием cptools
Запустить программу можно из консоли (должен быть установлен cprocsp-cptools-gtk из скачанного архива КриптоПро):
$ cptools
С помощью cptools можно подписывать и проверять подписи файлов.
Для создания электронной подписи файла необходимо:
- В левом меню выбрать пункт «Создание подписи».
- Выбрать файл, который необходимо подписать, нажав кнопку «Выбрать файл для подписи» (или ввести адрес файла в текстовое поле под кнопкой «Выбрать файл для подписи»).
- Изменить имя файла подписи, если оно вас не устраивает:
- Нажать кнопку «Подписать».
- Ввести пароль на контейнер (если он был установлен).
- Появится сообщение о подписанном файле: «Создание подписи завершилось успехом».
Для проверки электронной подписи следует:
- В левом меню выбрать пункт «Проверка подписи».
- Выбрать файл с подписью, нажав кнопку «Выбрать файл с подписью для проверки» (или ввести адрес файла в текстовое поле под этой кнопкой).
- Нажать кнопку «Проверить подпись».
- Появится информация о результате проверки:
Web
Информацию о создании и проверки ЭЦП на веб-сайтах с помощью плагина КриптоПро можно найти в руководстве разработчика КриптоПро ЭЦП Browser plug-in:
КриптоПро ЭЦП Browser plug-in
КриптоПро ЭЦП Browser plug-in предназначен для создания и проверки электронной подписи (ЭП) на веб-страницах с использованием СКЗИ «КриптоПро CSP».
Плагин проверки ЭЦП для браузера требует установленного КриптоПро CSP, пакета 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 для пользователей»:
- Распакуйте архив:
$ tar -xf cades-linux-amd64.tar.gz
- Установите пакеты (под правами root, из папки с установочными файлами):
# apt-get install cprocsp-pki-{cades,plugin}-*.rpm
- Разместите ссылки (под правами 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-* эти символические ссылки создаются автоматически в процессе установки.
- Для работы в 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
- Для работы в Chromium установите расширение для браузера на странице chrome://extensions/:
- На странице https://www.cryptopro.ru/sites/default/files/products/cades/demopage/cades_bes_sample.html вверху должна появится надпись: «Плагин загружен» и должен показаться сертификат в списке:
- Внимание! Если при переходе на страницу 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, а также установить расширение для плагина Госуслуг, в зависимости от версии браузера:
Перезапустить браузер.
Подробнее:
{ name = "CryptoPro CSP";
alias = "cryptoprocsp";
type = "pkcs11";
lib_linux = "/opt/cprocsp/lib/amd64/libcppkcs11.so";
},
{ 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"
Поддержка Рутокена
- Загрузите драйвер для JCP http://www.rutoken.ru/support/download/rutoken-for-cp/ и распакуйте его
- Выполните:
# java -jar rtjlib.jar -install -rutoken
Запуск контрольной панели
$ ./ControlPane.sh /usr
(требует графического дисплея)
Ссылки
- ЖТЯИ.00050-03 90 02-02. СКЗИ «КриптоПро CSP». Руководство администратора безопасности. Использование СКЗИ под управлением ОС Linux (из электронной документации по КриптоПро; доступно для скачивания с демонстрационной версией)
- ЖТЯИ.00050-03 90 07. КриптоПро CSP. Приложение командной строки
- Инструкция по настройке IFCPlugin (сайт госуслуг) для работы с КриптоПро
- ЭЦП
- Набор скриптов для подписания и проверки ЭЦП КриптоПро на Linux
Известные ошибки и методы исправления
Доменный пользователь не видит токен
Необходимо создать правило в 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