Возможна ли проверка ЭЦП на Linux-сервере? — Хабр Q&A

Возможна ли проверка ЭЦП на Linux-сервере? — Хабр Q&A Электронная цифровая подпись
Содержание
  1. Скачиваем deb-пакет для установки КриптоПро в Ubuntu
  2. . Импорт коренвых сертификатов в хранилище доверенных корневых сертификатов
  3. . Установка КриптоПро ЭЦП Browser plug-in
  4. . Установка расширения браузера КриптоПро ЭЦП Browser plug-in
  5. . Тестирование работоспособности подписи
  6. Установка КриптоПро в графическом режиме
  7. Ввод лицензионного кода
  8. Установка дополнительных файлов поддержки КрптоПро
  9. Установка драйверов Рутокен
  10. Перезапуск службы pcscd
  11. Проверка работоспособности Рутокена при помощи фирменных средств производителя
  12. Проверка работоспособности Рутокена при помощи встроенных средств КриптоПро
  13. Просмотр и Импорт в Личное хранилище сертификатов с Рутокена
  14. Возможна ли проверка эцп на linux-сервере?
  15. Запуск контрольной панели[править]
  16. Извлечение подписанного файла[править]
  17. Импорт персонального сертификата[править]
  18. Использование cptools[править]
  19. Криптопро эцп browser plug-in[править]
  20. Настройка криптопровайдера[править]
  21. Настройка оборудования[править]
  22. Особенности работы с токенами[править]
  23. Получение сертификата в уц и его установка[править]
  24. Проверка лицензии[править]
  25. Проверка подписи[править]
  26. Проверка цепочки сертификатов[править]
  27. Прописывание путей к исполняемым файлам[править]
  28. Просмотр доступных контейнеров[править]
  29. Просмотр сертификатов[править]
  30. Работа с сертификатами в token-manager[править]
  31. Совместимость[править]
  32. Создание запроса на получение сертификата[править]
  33. Создание и проверка эцп в gost-crypto-gui[править]
  34. Создание и проверка эцп с использованием cptools[править]
  35. Создание контейнера[править]
  36. Создание подписи[править]
  37. Удаление сертификата[править]
  38. Управление дсч[править]
  39. Управление носителями[править]
  40. Управление сертификатами[править]
  41. Управление считывателями[править]
  42. Установка и запуск[править]
  43. Установка криптопро csp[править]
  44. Установка сертификата[править]
  45. Экспорт контейнера и сертификата на другую машину[править]
  46. Экспорт сертификатов на другую машину[править]
  47. Электронная подпись[править]
  48. Эцп по гост на gnu/linux с помощью openssl

Скачиваем deb-пакет для установки КриптоПро в Ubuntu

Загрузка доступна с официального сайта КриптоПро в разделе Продукты. Отмечу лишь то, что надо скачивать обязательно сертифицированную версию. В данном материале описана установка и настройка КриптоПро CSP 4.0 R3.

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

. Импорт коренвых сертификатов в хранилище доверенных корневых сертификатов

Вначале скопируем кореные сертификаты в отдельную папку. Затем в контекстном меню, перейдя в эту папку, выполним команду Открыть в терминале. Далее произведем установку командой в Теримнале:

. Установка КриптоПро ЭЦП Browser plug-in

Для установки КриптоПро ЭЦП Browser plug-in потребуется утилита alien. Установим ее командой:

sudo apt install alien

Далее скачиваем установочный пакет КриптоПро ЭЦП Browser plug-in с официального сайта КриптоПро.

Распаковываем архив cades_linux_amd64.zip и переходим перейти в каталог с распакованными файлами, выполним команду Открыть в терминале и далее выполним команды для преобразования rpm-пакетов в deb-пакеты:

. Установка расширения браузера КриптоПро ЭЦП Browser plug-in

Далее необходимо в используемом вами браузере установить расширение КриптоПро ЭЦП Browser plug-in. Cсылка на расширение для Google Chrome

. Тестирование работоспособности подписи

Если вы все сделали правильно, то КриптоПро настроен. Проверить подпись можно по ссылке

Установка КриптоПро в графическом режиме

Переходим в папку с распакованным архивом и выбираем в контекстном меню команду Открыть в Терминале (в Kubuntu Действия / Открыть Терминал в этой папке). Для запуска установки в КриптоПро в графическом режиме вводим в терминале команду

Ввод лицензионного кода

Далее мастер предложит ввести код лицензии. Делать это не обязательно. По умолчанию КриптоПро включает стандартную лицензию на три месяца. Проверить срок действия лицензии можно стандартной командой в Терминале

/opt/cprocsp/sbin/amd64/cpconfig -license -view

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

Если установка КриптоПро запущена не в графическом режиме или при установке выбраны не все компоненты, то следует в обязательном порядке установить следующие пакеты (найти их можно в папке установки КриптоПро с файломinstall_gui.sh):

cprocsp-rdr-pcsc-64_4.0.0-4_amd64.deb

cprocsp-rdr-rutoken-64_4.0.0-4_amd64.deb

ifd-rutokens_1.0.1_amd64.deb

cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb

Установка драйверов Рутокен

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

Однако для полноценной работы Рутокена потребуется установить дополнительные библиотеки при помощи команды в Терминале:

Перезапуск службы pcscd

Перезапустить указанную службы легко при помощи команды

Проверка работоспособности Рутокена при помощи фирменных средств производителя

Выполнив команду pcsc_scan в терминале, можно проверить работоспособность подключенного Рутокена. Если картинка такая же, как и на скриншоте, то все работает правильно.

Проверка работоспособности Рутокена при помощи встроенных средств КриптоПро

Средства КриптоПро также позволяют сразу же проверить работоспособность присоединенных носителей. Команда в терминале

Просмотр и Импорт в Личное хранилище сертификатов с Рутокена

Для просмотра личных сертификатов, имеющихся на подключенных контейнерах, выполняем команду в Терминале

Возможна ли проверка эцп на linux-сервере?

Подскажите, как проверить на сервере ЭЦП?
Возможно ли это сделать свободным ПО или посоветуйте платное что-то? Должны поддерживаться российские ГОСТы.
Подпись создается при помощи плагина для браузера КриптоПро.

Смотрел в сторону OpenSSL с поддержкой gost (для работы российских ГОСТов) , может кто-то прокомментирует этот вариант (плюс там для верификации подписи нужен публичный ключ, и я не понял откуда его взять, если при формировании подписи на сервер приходят только исходное и зашифрованное сообщение)?

p.s. желательно, чтобы это все работало на Python

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

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

Извлечение подписанного файла[править]

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

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

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

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

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

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

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

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

Примечание: При создании контейнера будет дважды запрошен пароль для экспорта. По соображениям безопасности вводимые символы не показываются. После ввода каждого пароля нажимайте Enter.

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

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

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

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

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

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

Использование cptools[править]

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

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

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

Читайте также:  До Нового года нужно обновить сертификат — СКБ Контур

Криптопро эцп browser plug-in[править]

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

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

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

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

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

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

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

Настройка оборудования[править]

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

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

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

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

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

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

Особенности работы с токенами[править]

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

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

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

Получение сертификата в уц и его установка[править]

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

Проверка лицензии[править]

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

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

Проверка подписи[править]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

После этого:

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

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

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

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

  • после установки пакета cryptopro-preinstall начните новый сеанс пользователя в консоли;

Примечание: Не работает для суперпользователя.

или

  • выполните от имени пользователя, который будет запускать команды (будет действовать до закрытия терминала):

Внимание! Если установлен пакет mono или mono4-devel, может быть конфликт по имени утилиты certmgr

Просмотр доступных контейнеров[править]

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

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

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

Просмотр сертификатов[править]

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

$ certmgr -list 
Certmgr 1.1 (c) "Crypto-Pro",  2007-2021.
program for managing certificates, CRLs and stores

=============================================================================
1-------
Issuer              : [email protected], C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
Subject             : CN=Test User5, [email protected]
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/2021  13:41:38 UTC
Not valid after     : 18/03/2021  13:51:38 UTC
PrivateKey Link     : Yes                 
Container           : HDIMAGE\test.0002EF8
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-2021_CRYPTO-PRO Test Center 2.crt
OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO Test Center 2.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:

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

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

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

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

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

Совместимость[править]

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

  • КриптоПро CSP
  • КриптоПро JCP
  • КриптоПро HSM
  • КриптоПро TSP
  • КриптоПро OCSP
  • КриптоПро ЭЦП Browser plug-in
  • КриптоПро SSF
  • КриптоПро Stunnel
  • Браузер КриптоПро Fox

Примечание: В репозитории доступен пакет firefox-gost, аналогичный КриптоПро Fox, с патчем от КриптоПро.

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

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

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

Создание и проверка эцп в gost-crypto-gui[править]

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

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

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

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

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

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

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

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

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

Создание и проверка эцп с использованием cptools[править]

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

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

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

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

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

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

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

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

Создание контейнера[править]

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

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

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

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

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

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

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

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

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_2021 — имя контейнера:

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

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

Создание подписи[править]

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

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

Примечание: Проще всего для указания сертификата использовать адрес e-mail.

где

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

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

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

Удаление сертификата[править]

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

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

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

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

Управление дсч[править]

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

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

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

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

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

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

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

Либо:

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

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

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

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

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

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

Установка и запуск[править]

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

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

Установка криптопро 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:

Этот пакет установит все требуемое для КриптоПро (включая инфраструктуру поддержки карт Рутокен S и Рутокен ЭЦП).

Примечание: Пакет cryptopro-preinstall вытягивает зависимости libpangox-compat, opensc, pcsc-lite, pcsc-lite-rutokens, pcsc-lite-ccid, newt52.

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

Читайте также:  КриптоПро CSP 5.0

Таблица 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-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. Установите пакеты КриптоПро:

Примечание: Для 32-битной версии вместо последнего пакета — lsb-cprocsp-rdr-4*

Примечание: Если возникнут проблемы с отображением контейнеров на Рутокен S — удалите pcsc-lite-openct

Примечание: Для установки cprocsp-rdr-jacarta может понадобиться предварительно удалить openct.

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

Примечания:

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

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

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

Установка сертификата[править]

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

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

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

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

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

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

При этом потребуется ввести пароль от контейнера ‘\.HDIMAGEtest_export’ и задать пароль на новый контейнер ‘\.FLASHtest_new’.

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

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

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

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

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

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

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

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

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

  1. Перенести ключи из /var/opt/cprocsp/keys на нужную машину в тот же каталог.
  2. Экспортировать сертификаты (их, количество можно определить, выполнив: certmgr -list, в примере сертификатов 3):
  3. Перенести файлы сертификатов (1.cer, 2.cer, 3.cer) на нужную машину.
  4. На машине, куда переносятся сертификаты, просмотреть какие контейнеры есть (должны появится контейнеры с первой машины):
  5. Связать сертификат и закрытый ключ:
    Если закрытый ключ и сертификат не подходят друг к другу, будет выведена ошибка:
    Cannot install certificate
    Public keys in certificate and container are not identical
    
  6. Если закрытого ключа нет, то просто поставить сертификат:

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

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

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

Эцп по гост на gnu/linux с помощью openssl

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

Удостоверяющий Центр выдал нам ключ и сертификат в одном PKCS#12 файле auth.p12
Я исхожу из того, что у нас в наличии есть linux и docker. Можно даже не локально – вполне можно закинуть наш документ куда-нибудь на хостинг и подключиться по SSH. Подробности установки docker и работы с докер-образами оставим за пределами этой заметки. Перейдём сразу к делу:

Прямо из папки, где лежит наш документ на подпись (document.pdf) и PKCS#12 файл (auth.p12) запускаем замечательный docker образ OpenSSL с поддержкой ГОСТ и заходим в контейнер:

sudo docker run --rm -i -t -v `pwd`:`pwd` -w `pwd` rnix/openssl-gost bash

Вытаскиваем из PKCS#12 файла приватный ключ и сохраняем его в pem-формате. Может потребоваться ввести ваш пароль от PKCS#12 файла.

openssl pkcs12 -in auth.p12 -out key.pem -engine gost -nodes -clcerts

Аналогично вытаскиваем из PKCS#12 файла и сертификат.

openssl pkcs12 -in auth.p12 -clcerts -nokeys -out pub.crt

Подписываем документ. Подпись будет отсоединенная, в формате PKCS#7 в отдельном файле (document.pdf.sig)

openssl smime -sign -signer pub.crt -inkey key.pem -engine gost -binary -noattr -outform DER -in document.pdf -out document.pdf.sig

Проверить подпись можно много где, как локально так и на сайте госуслуг, например.
Всё. Можно отправлять контрагенту документ и соответствующий sig файл.

Если вдруг у вас сертификат в формате DER (в Windows часто это файл с расширением .cer), то можно конвертировать такой сертификат в pem-формат:

openssl x509 -inform DER -in pub.cer -out pub.crt

Файлы в примерах команд выше:

auth.p12 – бинарный PFX-файл, содержащий сертификат и закрытый ключ
pub.crt – сертификат (содержащий открытый ключ) в текстовом формате PEM
pub.cer – сертификат (содержащий открытый ключ) в бинарном формате DER
key.pem – закрытый ключ
document.pdf – pdf-документ, который необходимо подписать
document.pdf.sig – файл куда будет сохранена отсоединённая подпись к документу

Источники вдохновения:

Работаем с реестром запрещенных ресурсов
Не ждем, а готовимся к переходу на новые стандарты криптографической защиты информации
Docker-образы с поддержкой ГОСТ-сертификатов в openssl, curl, php, nginx
OpenSSL: простое шифрование с открытым ключом
https://stackoverflow.com/questions/52980370/how-to-convert-p12-to-crt-file
https://www.emaro-ssl.ru/blog/convert-ssl-certificate-formats/
https://ecpexpert.ru/q/213942
http://rodji.net/blog/2021/12/27/openssl-по-гост-подписывание-шифрование-пр/
https://polikarpoff.ru/all/eksport-ecp-v-formate-pkcs-12/

Оцените статью
ЭЦП Эксперт
Добавить комментарий