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

Добро пожаловать!

Moderator: Blaze

Post Reply
User avatar
Blaze
DEV Team
DEV Team
Posts: 1509
Joined: 28 Dec 2010, 11:31
Distribution: ⟰ Porteus 3.2 Cinnamon x86_64
Location: ☭ Russian Federation, Lipetsk region, Dankov
Contact:

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

Post#1 by Blaze » 16 Sep 2017, 09:46

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

КриптоПро — линейка криптографических утилит для генерации ЭЦП, работы с сертификатами, организации структуры PKI. Незаменимый продукт для работы в ЕИС (zakupki.gov.ru), Официальный сайт ГМУ (bus.gov.ru), Электронный бюджет (budget.gov.ru), ГИС ЖКХ (dom.gosuslugi.ru), ФИАС (fiasmo.nalog.ru), Федеральная налоговая служба (lkfl.nalog.ru) и т.д.
Заметка. Все команды описанные в данной статье выполняем под root пользователем.
Для авторизации в качестве root пользователя выполните в терминале:

Code: Select all

su
toor
Скрипт автоматизированной сборки xzm модулей KC1 и KC2 КриптоПро CSP для Porteus

Code: Select all

#!/bin/bash

# Copyright 2017-2025  Blaze, Russian Federation, Lipetsk region, Dankov
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
# This is script for the automated building KC1 and KC2 xzm modules from rpm packages
# of CryptoPro CSP for Porteus i586 and x86_64.
#
#
# Date: 11.09.2017 20:58:47 (UTC+3)
#
#
# Скрипт для автоматизированной сборки KC1 и KC2 xzm модулей КриптоПро CSP для Porteus
# Вручную в браузере скачиваем архив с сайта КриптоПро CSP с rpm пакетами
# linux-ia32.tgz или linux-amd64.tgz, в зависимости от архитектуры ПК
# ссылка на загрузку https://www.cryptopro.ru/products/csp/downloads
# скопируйте данный архив в /tmp

if [ `whoami` != "root" ]; then
   echo 'Этот скрипт должен быть запущен с правами root' >&2
   exit 1
fi

cd /tmp

# сборка для архитектуры i586
if [ -f "linux-ia32.tgz" ]; then
   mv linux-ia32.tgz linux-ia32.tar.gz
   tar xvf linux-ia32.tar.gz
   cd /tmp/linux-ia32
   VER=$(cat linux-ia32.ini | grep version= | cut -d "=" -f2)
   rm cprocsp-cpopenssl-devel*.rpm
   rm cprocsp-drv*.rpm
   rm cprocsp-ipsec*.rpm
   rm lsb-cprocsp-devel*.rpm
   rm lsb-cprocsp-rdr-sobol*.rpm
   rm sobol*.rpm
   rpm2xzm *.rpm *.xzm
   rm {*.rpm,*.sh,*.ini,cpverify}
   for x in `find . -type f ! -name 'lsb-cprocsp-kc1*' ! -name 'lsb-cprocsp-kc2*' | fgrep .xzm | sort`; do unsquashfs -n -f $x >/dev/null; done
   rm /tmp/linux-ia32/squashfs-root/etc/opt/cprocsp/config.ini
   mkdir cprocsp-kc2-$VER-$(arch)
   cp -a squashfs-root/* cprocsp-kc2-$VER-$(arch)
   mv squashfs-root cprocsp-kc1-$VER-$(arch)
   xzm2dir lsb-cprocsp-kc1*.xzm cprocsp-kc1-$VER-$(arch)
   xzm2dir lsb-cprocsp-kc2*.xzm cprocsp-kc2-$VER-$(arch)
   wget -P /tmp/linux-ia32/cprocsp-kc1-$VER-$(arch)/etc/opt/cprocsp http://csp.ublaze.ru/kc1/config.ini
   wget -P /tmp/linux-ia32/cprocsp-kc2-$VER-$(arch)/etc/opt/cprocsp http://csp.ublaze.ru/kc2/config.ini
   rm *.xzm
   dir2xzm cprocsp-kc1-$VER-$(arch) cprocsp-kc1-$VER-i586.xzm
   dir2xzm cprocsp-kc2-$VER-$(arch) cprocsp-kc2-$VER-i586.xzm
   rm -rf /tmp/linux-ia32/cprocsp-kc?-$VER-$(arch)
   else echo "Архив linux-ia32.tgz не найден в директории /tmp"
fi

cd /tmp

# сборка для архитектуры x86_64
if [ -f "linux-amd64.tgz" ]; then
   mv linux-amd64.tgz linux-amd64.tar.gz
   tar xvf linux-amd64.tar.gz
   cd /tmp/linux-amd64
   VER=$(cat linux-amd64.ini | grep version= | cut -d "=" -f2)
   rm cprocsp-cpopenssl-devel*.rpm
   rm cprocsp-drv*.rpm
   rm cprocsp-ipsec*.rpm
   rm lsb-cprocsp-devel*.rpm
   rm lsb-cprocsp-rdr-sobol*.rpm
   rm sobol*.rpm
   rpm2xzm *.rpm *.xzm
   rm {*.rpm,*.sh,*.ini,cpverify}
   for x in `find . -type f ! -name 'lsb-cprocsp-kc1*' ! -name 'lsb-cprocsp-kc2*' | fgrep .xzm | sort`; do unsquashfs -n -f $x >/dev/null; done
   rm /tmp/linux-amd64/squashfs-root/etc/opt/cprocsp/config64.ini
   mkdir cprocsp-kc2-$VER-$(arch)
   cp -a squashfs-root/* cprocsp-kc2-$VER-$(arch)
   mv squashfs-root cprocsp-kc1-$VER-$(arch)
   xzm2dir lsb-cprocsp-kc1*.xzm cprocsp-kc1-$VER-$(arch)
   xzm2dir lsb-cprocsp-kc2*.xzm cprocsp-kc2-$VER-$(arch)
   wget -P /tmp/linux-amd64/cprocsp-kc1-$VER-$(arch)/etc/opt/cprocsp http://csp.ublaze.ru/kc1/config64.ini
   wget -P /tmp/linux-amd64/cprocsp-kc2-$VER-$(arch)/etc/opt/cprocsp http://csp.ublaze.ru/kc2/config64.ini
   rm *.xzm
   dir2xzm cprocsp-kc1-$VER-$(arch) cprocsp-kc1-$VER-x86_64.xzm
   dir2xzm cprocsp-kc2-$VER-$(arch) cprocsp-kc2-$VER-x86_64.xzm
   rm -rf /tmp/linux-amd64/cprocsp-kc?-$VER-$(arch)
   else echo "Архив linux-amd64.tgz не найден в директории /tmp"
fi
Скачиваем и распаковываем под root-ом мой скрипт cprocsp.sh.tar.bz2 в директории /tmp
Вручную в браузере скачиваем архив с сайта КриптоПро CSP с rpm пакетами linux-ia32.tgz или linux-amd64.tgz, в зависимости от архитектуры ПК
ссылка на загрузку https://www.cryptopro.ru/products/csp/downloads
скопируйте данный архив(ы) в /tmp

Запускаем скрипт

Code: Select all

cd /tmp
# wget http://csp.ublaze.ru/cprocsp.sh.tar.bz2
# tar xvf cprocsp.sh.tar.bz2
./cprocsp.sh
Готовые xzm модули с КриптоПро CSP для архитектур i586 и x86_64
Заметка. Требования к уровню защиты информации КС2 содержат требования к уровню КС1 плюс дополнительные требования. Уровень защиты информации определяется потенциальными возможностями нарушителя, в соответсвии с базовой моделью нарушителя, разработанной ФАПСИ. Вкратце - для уровня КС1 предполагается, что имеем случайного внешнего нарушителя который может перхватывать информацию в каналах свизя - следоватлеьно достаточные требования - математическая стойкость, корректности реализации и качество ключей. Уровень КС2 - неавторизованный внутренний нарушитель - следовательно достаточные дополнительные требования - рзаграничение доступа к скзи, ну там есть еще кое-чего. это влечет за собой наличие в системе сертифицированного фапси/фсб электронного замка, его основная задача - идентфикация и аутентфикация пользователя, проверка целсотности, доверенная загрузка. дополнительно - качественный аппаратный датчик случайных чисел и интерфейс к носителью ключевой информации.
Установка переменных окружения.

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

Code: Select all

sed -i "s|ENV_SUPATH     PATH=|ENV_SUPATH     PATH="$(/bin/ls -d /opt/cprocsp/{s,}bin/*|tr '\n' ':')"|g" /etc/login.defs
Проверка версии и лицензии КриптоПро CSP.

Для проверки версии КриптоПро CSP выполните:

Code: Select all

csptest -keyset -verifycont
Для установки лицензии КриптоПро CSP выполните:

Code: Select all

cpconfig -license -set серийный_номер
Проверить срок истечения лицензии можно командой:

Code: Select all

cpconfig -license -view

Управление ридерами.
Ридеры (readers) — устройства размещения контейнеров (аппаратные токены, каталог для размещения файлов).
Для просмотра доступных ридеров:

Code: Select all

csptest -enum -info -type PP_ENUMREADERS | iconv -f cp1251
Ридер HDIMAGE размещается в /var/opt/cprocsp/keys/root/

Инициализация ридера HDIMAGE:

Code: Select all

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

Code: Select all

/etc/rc.d/rc.pcscd start
Заметка. Предварительно скачайте и активируйте модули

Code: Select all

usm -u usm
usm -u all
usm -g pcsc-lite
usm -g openct
usm -g opensc
usm -g ccid
Но смысла скачивать и настраивать все это нет. Подробнее читайте 2 сообщение данной темы.
Управление контейнерами.

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

Code: Select all

csptest -keyset -provtype 75 -newkeyset -cont '\\.\HDIMAGE\test'
Для просмотра доступных контейнеров используйте команду:

Code: Select all

csptest -keyset -enum_cont -fqcn -verifyc -uniq
Для удаления контейнера:

Code: Select all

csptest -keyset -deletekeyset -cont '\\.\HDIMAGE\test'

Работа с сертификатами.

Подробная инструкция по утилите сertmgr.

Просмотр содержимого сертификата:

Code: Select all

certmgr -list -file /путь-до-сертификата/имя-сертификата.cer
Установка личного сертификата в контейнер ридера HDIMAGE:

Code: Select all

certmgr -inst -file /путь-до-сертификата/имя-сертификата.cer -cont '<путь к контейнеру, начинающийся на \\.\>' -store uMy
Для просмотра установленных сертификатов воспользуйтесь командой:

Code: Select all

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

Code: Select all

certmgr -list -store uRoot
Удаление сертификатов. Удалить личный сертификат под номером 1 можно командой:

Code: Select all

certmgr -delete 1
Удалить корневой сертификат под номером 1

Code: Select all

certmgr -delete 1 -store uRoot
Удалить все сертификаты:

Code: Select all

certmgr -delete -all
certmgr -delete -store uRoot
certmgr -delete -store uMy
Установка корневого сертификата удостоверяющего центра:

Code: Select all

certmgr -inst -cert -file /путь-до-сертификата/имя-сертификата.cer -store uRoot
Установка списка отозванных сертификатов:

Code: Select all

certmgr -inst -crl -file /путь-до-файла/имя-файла.crl
Установка цепочки промежуточных сертификатов:

Code: Select all

certmgr -inst -cert -file /путь-до-файла/имя-файла.p7b -store CA
Установка сертификата с токена:

Code: Select all

certmgr -inst -cont '<путь к контейнеру, начинающийся на \\.\>' -store uMy
Создание запроса и получение сертификата в УЦ.

Для создания запроса потребуется:
  • DN (cn=Test User,e=ca@porteus.org)
  • имя контейнера (в локальном хранилище hdimage: \\.\HDIMAGE\test)
  • имя файла запроса (test.req)
Внимание! Для использования проверки подлинности клиента в браузере потребуется также указать, что запрос создается по ГОСТ 2001 и добавляется тип применения подлинности клиента: -provtype 75 -certusage "1.3.6.1.5.5.7.3.4,1.3.6.1.5.5.7.3.2".
Типы применения

Code: Select all

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

Code: Select all

cryptcp -creatrqst -dn "cn=Test User,e=ca@porteus.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" test.req
Показать содержимое запроса:

Code: Select all

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

Code: Select all

certmgr -list -file certnew.p7b
Установите сертификат удостоверяющего центра:

Code: Select all

certmgr -inst -file certnew.p7b -store uRoot
нажмите 1

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

Code: Select all

certmgr -inst -file certnew.p7b -store uMy -cont '\\.\HDIMAGE\test' -inst_to_cont
нажмите 2

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

Code: Select all

Удостоверяющий Центр 	                                   Источник 	                      Сертификаты
ЗАО «Национальный удостоверяющий центр» 	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
Для проверки можно скопировать персональный сертификат в файл:

Code: Select all

cryptcp -copycert -dn E=user@test.ru -df personal.cer
Запуск с отладкой цепочки:

Code: Select all

CP_PRINT_CHAIN_DETAIL=1 cryptcp -copycert -dn E=user@test.ru -df personal.cer
То есть нам надо установить сертификат УЦ с CN=uc skb kontur (root):

Code: Select all

certmgr -inst -store uRoot -file kontur-root-2015.crt
После этого:

Code: Select all

cryptcp -copycert -dn E=user@test.ru -df personal.cer
Всё в порядке и сертификат виден в плагине Cades.

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

Code: Select all

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

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

Code: Select all

cryptcp -verify zayavlenie.pdf.sig
Показано, кто подписывал и что подпись проверена.

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

Code: Select all

cryptcp -verify zayavlenie.pdf.sig zayavlenie.pdf
Работа с криптографическими провайдерами.

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

Code: Select all

cpconfig -defprov -view_type
Более детальная информация о криптографическом провайдере 75:

Code: Select all

cpconfig -defprov -view -provtype 75
Установка криптографического провайдера 75 по умолчанию:

Code: Select all

/cpconfig -defprov -setdef -provtype 75 -provname "Crypto-Pro GOST R 34.10-2001 KC1 CSP"
Linux porteus 4.13.3-porteus #1 SMP PREEMPT Sat Sep 23 18:22:13 x86_64 Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] (rev 81) » Vengeance LPX 16GB DDR4 K2 3200MHz C16

User avatar
Blaze
DEV Team
DEV Team
Posts: 1509
Joined: 28 Dec 2010, 11:31
Distribution: ⟰ Porteus 3.2 Cinnamon x86_64
Location: ☭ Russian Federation, Lipetsk region, Dankov
Contact:

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

Post#2 by Blaze » 16 Sep 2017, 16:48

Увы, в Porteus мне не удалось заставить работать Aladdin Token JC 0 (eToken)

Code: Select all

root@porteus:/home/guest# cpconfig -hardware reader -add "AKS ifdh [Main Interface] 00 00"
Adding new reader:
Nick name: AKS ifdh [Main Interface] 00 00
Adding AKS ifdh [Main Interface] 00 00 failed
Connection error.
root@porteus:/home/guest# list_pcsc
AKS ifdh [Main Interface] 00 00
root@porteus:/home/guest#
и, как следствие, подружить его с программным продуктом КриптоПро CSP. В этом есть свои плюсы и минусы.
Плюс в том, что не нужно скачивать устанавливать в танцах с бубнами драйвера для Token-ов и запускать не нужные службы в Porteus.
Минус - необходимо запустить ПК с Windows и скопировать в КриптоПро CSP контейнер закрытого ключа из Token-а, после чего в Internet Explorer экспортировать сертификат в формате PKCS #7 (.p7b)

Итак мы запустили ПК с Windows.

Заходим в Пуск > Панель управления > КриптоПро CSP > Сервиc > Скопировать…

Image

Напротив пункта Имя ключевого контейнера нажимаем кнопку Обзор…

Image

Выбираем ключевой контейнер с Token-а. Нажимаем кнопку ОК и затем кнопку Далее >

Image

Image

Вводим pin-код от Token-а и ставим галочку Запомнить pin-код. Нажимаем кнопку OK.

Image

Вводим имя для создаваемого ключевого контейнера и нажимаем кнопку Готово.

Image

В следующем диалоговом окне выбираем USB флешку, чтобы сохранить туда контейнер закрытого ключа. Нажимаем кнопку OK.

Image

В предложенном диалогом окне оставляем поля с паролем и его подтверждением пустыми и жмем кнопку ОК.

Image

Заходим в Пуск > Панель управления > Свойства браузера (или заходим в Internet Explorer, нажимаем в правом углу по иконке с шестеренкой > Свойства браузера) > Содержание > Сертификаты.

Image

Во вкладке Личные выбираем нужный сертификат и нажимаем кнопку Экспорт… и затем жмем кнопку Далее.

Image

Image

Выбираем Нет, не экспортировать закрытый ключ в пункте Экспортировать закрытый ключ вместе с сертификатом. Нажимаем Далее.

Image

В предложенном диалоговом окне отмечаем:
  • Стандарт Cryptographic Message Syntax – сертификаты PKCS #7 (.p7b)
  • Включить по возможности все сертификаты в путь сертификации
Нажимаем Далее.

Image

Нажимаем кнопку Обзор… и выбираем место куда Вам лучше сохранить сертификат, например на флешку – там же, где лежит ранее созданный контейнер закрытого ключа. Вводим имя сертификата. Жмем ОК > Далее > Готово.

Image

Image

Открываем нашу USB флешку (накопитель) и проверяем, чтобы на ней был сертификат в формате .p7b и контейнер (в виде папки) закрытого ключа.

Image

В Porteus, согласно моему примеру, копируем с USB флешки (с правами root) tokencer.000 и tokencer.p7b в /var/opt/cprocsp/keys/root/ и выставляем следующие права доступа:

Code: Select all

chmod 700 /var/opt/cprocsp/keys/root/tokencer.000
chmod 700 /var/opt/cprocsp/keys/root/tokencer.p7b
chmod 600 -R /var/opt/cprocsp/keys/root/tokencer.000/*
Проверяем что контейнер доступен

Code: Select all

csptest -keyset -enum_cont -fqcn -verifyc -uniq
Устанавливаем сертификат tokencer.p7b с номером 2 в личные сертификаты контейнера ридера HDIMAGE:

Code: Select all

certmgr -inst -file /var/opt/cprocsp/keys/root/tokencer.p7b -cont '\\.\HDIMAGE\HDIMAGE\\tokencer.000\014C' -store uMy
в предложенном примере нажимаем 2
Проверяем целостность цепочки сертификатов

Code: Select all

cryptcp -copycert -dn E=user@test.ru -df /var/opt/cprocsp/keys/root/tokencer.p7b
Цепочка сертификатов нарушена и поэтому нам требуется установить корневой сертификат УЦ под номером 1

Code: Select all

certmgr -inst -cert -file /var/opt/cprocsp/keys/root/tokencer.p7b -store uRoot
нажимаем 1

Проверяем снова

Code: Select all

cryptcp -copycert -dn E=user@test.ru -df /var/opt/cprocsp/keys/root/tokencer.p7b
Не пугайтесь сообщения о том, что один из сертификатов в цепочке просрочен.
В моем примере - он действительно просрочен 06.02.2016.
Это видно на одном из предыдущих скриншотов. Вот он
Image
У меня нет под рукой eToken с действующим сертификатом. Извиняюсь за это, но суть я думаю до Вас донес.
Linux porteus 4.13.3-porteus #1 SMP PREEMPT Sat Sep 23 18:22:13 x86_64 Intel(R) Core(TM) i5-6600K CPU @ 3.50GHz GenuineIntel GNU/Linux
MS-7A12 » [AMD/ATI] Tobago PRO [Radeon R7 360 / R9 360 OEM] (rev 81) » Vengeance LPX 16GB DDR4 K2 3200MHz C16

Post Reply