КриптоПро

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


О КриптоПро

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

Сайт: http://www.cryptopro.ru/


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

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

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


Установка

Загрузка

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

  • linux-ia32.zip (18 МБ, для i586) КриптоПро CSP 4.0 для Linux (x86, rpm) для 32 разрядный систем
  • linux-amd64.zip (18 МБ, для x86_64) КриптоПро CSP 4.0 для Linux (x64, rpm) для 64 разрядный систем
Внимание! По умолчанию при скачивании с сайта КриптоПро выдаётся лицензия на три месяца


Установка пакетов

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

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


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

$ tar -xf linux-amd64.tgz

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

Пакет Описание
Базовые пакеты:
cprocsp-curl Библиотека libcurl с реализацией шифрования по ГОСТ
lsb-cprocsp-base Основной пакет КриптоПро CSP
lsb-cprocsp-capilite Интерфейс CAPILite и утилиты
lsb-cprocsp-kc1 Провайдер криптографической службы KC1
lsb-cprocsp-rdr Поддержка ридеров и RNG
Дополнительные пакеты:
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* lsb-cprocsp-rdr-64*
    
Примечание: Для 32-битной версии вместо последнего пакета — lsb-cprocsp-rdr-4*
  • установите пакеты для поддержки токенов (Рутокен S и Рутокен ЭЦП):
    # apt-get install cprocsp-rdr-gui-gtk* cprocsp-rdr-rutoken* cprocsp-rdr-pcsc* lsb-cprocsp-pkcs11* pcsc-lite-rutokens pcsc-lite-ccid
    
  • установите пакет для поддержки токенов (JaCarta):
    # apt-get install cprocsp-rdr-jacarta*
    
Примечание: Для установки cprocsp-rdr-jacarta может понадобиться предварительно удалить openct.


Примечания:

  • Можно запустить ./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.
Внимание! Пакеты КриптоПро становятся нерабочие при их обновлении. Рекомендуется удалить все пакеты и установить пакеты снова.


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

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

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

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

или

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


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

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

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


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

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


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

# apt-get remove lsb-cprocsp-base

Настройка КриптоПро

TODO:
Добавить информацию о token-manager значительно упрощающим описанные процедуры

token-manager

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

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

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

# apt-get install token-manager

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

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

token-manager

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

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

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

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

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

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

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

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

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

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

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

$ 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 размещается на /var/opt/cprocsp/keys/<имя пользователя>/.

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

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

Инициализация считывателя 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

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

# systemctl start pcscd

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

# systemctl enable pcscd

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

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

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


Внимание! При наличии хотя бы одного контейнера с ГОСТ-2012 перестаёт работать плагин ЕСИА (ifcplugin).


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

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

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

Cryptopro-newkeyset.png

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

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


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

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

Внимание! При создании контейнера на токене, пароль не создается, а предъявляется (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 появилась возможность интерактивно выбирать носитель и тип создаваемого контейнера. Теперь можно создавать неизвлекаемые контейнеры.
Для этого необходимо выполнить команду, где test5inside — имя контейнера:

$ csptest -keyset -provtype 75 -newkeyset -cont test5inside

Откроется окно выбора носителя и способа создания контейнера:
Создание контейнера
Создание неизвлекаемого контейнера:
Создание неизвлекаемого контейнера
Создание обычного контейнера:
Создание обычного контейнера

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

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


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

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


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

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

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

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

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

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

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

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

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


Таблица 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 Подписывание документа

Создать запрос на субъект "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. Эти данные нужны для получения сертификата в удостоверяющем центре.

Примечание: Подробную инструкцию по работе с утилитой cryptcp можно скачать со страницы http://cryptopro.ru/products/other/cryptcp


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

Показать содержимое запроса:

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

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

$ certmgr -list -file certnew.p7b
Certmgr 1.0 (c) "CryptoPro",  2007-2010.
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    : 28/06/2016  10:22:36 UTC
Not valid after     : 28/09/2016  10:32:36 UTC
PrivateKey Link     : No                  
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================

[ErrorCode: 0x00000000]

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

$ certmgr -inst -file certnew.p7b -store uRoot

(нажмите 1)

Установите сертификат клиента (введите пароль на контейнер \\.\HDIMAGE\test при запросе):

$ certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test' -inst_to_cont

(нажмите 2)

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


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

$ certmgr -list 
Certmgr 1.0 (c) "CryptoPro",  2007-2010.
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    : 28/06/2016  10:22:36 UTC
Not valid after     : 28/09/2016  10:32:36 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
Extended Key Usage  : 1.3.6.1.5.5.7.3.4
                      1.3.6.1.5.5.7.3.2
=============================================================================

[ErrorCode: 0x00000000]

Удаление

Удалить сертификат под номером 1:

$ certmgr -delete 1

Удалить все сертификаты:

$ certmgr -delete -all
$ certmgr -delete -store uroot

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

Использование cptools

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

# apt-get install cprocsp-cptools-gtk*

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

$ cptools

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

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

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


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

Удостоверяющий Центр Источник Сертификаты
ПАК «Головной удостоверяющий центр» 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 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.

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

TODO:
Добавить информацию о rosa-crypto-tool и gost-crypto-gui значительно упрощающих описанные процедуры


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

Установить пакет gost-crypto-gui из репозитория:

# apt-get install gost-crypto-gui

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

$ python /usr/bin/gost-crypto-gui.py

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

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

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

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

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

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

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

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

$ cptools

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

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

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

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

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

Подпись

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

Примечание: Проще всего для указания сертификата использовать адрес e-mail.
$ cryptcp -sign -dn E=user@test.ru -der zayavlenie.pdf
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN: ******, user@test.ru
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

Certificate chains are checked.
Folder './':
zayavlenie.pdf... Signing the data...    
    
Signed message is created.
[ReturnCode: 0]

где

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

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

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

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

$ cryptcp -verify zayavlenie.pdf.sig
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN: ******, user@test.ru
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

Certificate chains are checked.
Folder './':
zayavlenie.pdf.sig... Signature verifying...     
Signer: ******, user@test.ru
 Signature's verified.
[ReturnCode: 0]

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

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

$ cryptcp -vsignf -f zayavlenie.pdf.sgn zayavlenie.pdf
CryptCP 4.0 (c) "Crypto-Pro", 2002-2015.
Command prompt Utility for file signature and encryption.

The following certificate will be used:
RDN: ******, user@test.ru
Valid from 13.07.2016 12:03:00 to 13.07.2017 12:04:00

Certificate chains are checked.
Folder './':
zayavlenie.pdf... Signature verifying...     
    
Signer: ******, user@test.ru
 Signature's verified.
[ErrorCode: 0x00000000]

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

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

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

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

Web

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

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

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


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

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

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


Вход в ЕСИА

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

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


Внимание! При наличии хотя бы одного контейнера КриптоПро с ГОСТ-2012 плагин ЕСИА перестаёт работать.
TODO:
Перепроверить с IFCPlugin 3.0.0.0 выпущенным в 2018 году.


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

КриптоПро JCP

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

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

# java -jar rtjlib.jar -install -rutoken

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

$ ./ControlPane.sh /usr

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

Ссылки