В данный пример
- В примере будет использоваться версия 5.0R2 (5.0.12000).
- Произведем установку криптопровайдера КриптоПро CSP. Для этого следует
запустить Терминал FLY и перейти в директорию, содержащую скачанный архив
с пакетами криптопровайдера: - Произвести распаковку архива: .
- Затем перейдите в папку распаковки. Получите права суперпользователя
root (sudo -s) и запустите установочный скрипт:
./install_gui.sh. -
- Выберите нужные в процессе работы пакеты и нажмите
Далее:Выберите обязательно следующие пакеты, остальные при необходимости (уточните у
Администратора сети):- Криптопровайдер КС1;
- Графические диалоги;
- Поддержка токенов и смарт-карт;
- cptools, многоцелевое графическое приложение;
- Библиотека PKCS #11 (для gosuslugi.ru).
- Введите лицензию КриптоПро CSP (Ввести лицензию).
Лицензионный ключ можно ввести позже – ознакомительная лицензия позволит
полноценно использовать CSP в течение 90 дней после первой установки (выберите
Позже). - Нажмите Выход для завершения установки.
Распаковать архив cadesplugin.exe с помощью 7-zip, например в C:\Temp.
Устанавливаем:
msiexec /i /qn /L*v
Скрипт для автоматической установки:
Скрипт автоматической установки «КриптоПро ЭЦП Browser plug-in»
Version: 0.1
Author: Pavel Satin
Creation Date: 13.09.2018
Purpose/Change: Первый вариант
# $ErrorActionPreference = "SilentlyContinue"
# $tempDir = "c:\Temp"
"Downloading $url to $file"
"Скачиваем «КриптоПро ЭЦП Browser plug-in»"
"Скачиваем консольный 7-zip"
"Запускаем установку плагина"
"/i $cadespluginMSI /qn /norestart /L*v $tempDir\cadescom\$logFile"
- Ссылки
- Системные требования
- Требования к аппаратному обеспечению
- Требования к программному обеспечению
- Требования к веб-серверу
- Требования к веб-серверу для ОС Microsoft Windows 2008 R2
- Требования к веб-серверу для ОС Microsoft Windows 2012 и 2012 R2
- Требования к веб-серверу для ОС Microsoft Windows 2016/2019
- Использование
- ES Module
- Function reference
- Выпуск сертификата
- Электронная подпись
- Шифрование данных
- Введение
- Описание проблемы и её решение
- Docker
- Вместо заключения
- Список ресурсов
- Системные требования¶
- Утилита cert-install. ps1¶
- Алгоритм работы¶
- Запуск скриптов¶
- Утилиты export_keys. ps1 и import_keys. ps1¶
- Алгоритм работы¶
- Вывод скриптов¶
- Решение проблем¶
- Windows блокирует запуск скрипта¶
Ссылки
- КриптоПро ЭЦП Browser plug-in
- Powershell: Installing MSI files
- Powershell: Remote install software
hopyres Оставлено | |
Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. Error 0x8009000a: Указан неправильный тип. Что ему нужно? Отредактировано пользователем 20 января 2022 г. 10:28:27(UTC) | |
Андрей * Оставлено | |
Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. точно 12330? | |
nickm Оставлено | |
Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Похоже на то, что “кривой” config64.ini. | |
Санчир Момолдаев Оставлено | |
1) скзи – товар двойного назначения. тиражирование скзи – сертифицированное фсб действие. как считаете пойдет ли aur на сертифицикацию фсб? 2) не все скрипты перенесены в скрипты пакета из аура. Код:
Отредактировано пользователем 19 января 2022 г. 10:44:59(UTC) | |
hopyres Оставлено | |
Автор: Андрей * Автор: hopyres Поставил КриптоПРО из AUR релиз 5.0.12330 с рукоприкладством, потому как другие пакеты скачиваются и ставятся без вопросов. Цитата: CSP (Type:80) v5.0.10010 KC1 Release Ver:5.0.11455 OS:Linux CPU:AMD64 FastCode:READY:AVX. точно 12330? Само приложение пишет 5.0.11455, а в AUR файле PKGBUILD указана версия 12330 | |
Санчир Момолдаев Оставлено | |
скачайте дистрибутив 5.0.12330 подложите его к pkgbuild и переустановите пакет | |
hopyres Оставлено | |
Автор: Санчир Момолдаев скачайте дистрибутив 5.0.12330 подложите его к pkgbuild и переустановите пакет Подкинул ему дистрибутив с официального сайта и всё заработало. | |
В данной статье мы описываем процесс установки и настройки КриптоПро CSP на ОС Linux (на примере Debian 11).
Она будет полезна вам, если вы получили ключ и сертификат в ФНС и используете ОС Linux для работы.
Рассматриваемая конфигурация:
- Debian 11
- КриптоПро CSP 5.0
- КриптоПро ЭЦП Browser plug-in 2.0
Порядок настройки:
1) Установка КриптоПро CSP 5.0:
1.1. Выполните регистрацию на сайте нашей компании. Если Вы уже зарегистрированы – выполните вход (необходимо ввести адрес электронной почты и пароль, которые Вы указывали при регистрации)
1.2. Перейдите на страницу загрузки дистрибутивов КриптоПро CSP
1.3. Ознакомьтесь с условиями лицензионного соглашения и нажмите кнопку «Я согласен с лицензионным соглашением. Перейти к загрузке»
1.4. Нажмите кнопку «Скачать для Linux», для загрузки дистрибутива актуальной версии КриптоПро CSP
1.5. Распакуйте загруженный архив: tar -xvf linux-amd64_deb.tgz && cd linux-amd64_deb
1.6. Запустите установку в графическом интерфейсе посредством запуска скрипта
sudo ./install_gui.sh
При установке дополнительно нужно отметить пакеты
- Smart Card and Token support modules
1.7. Для корректной работы с некоторыми ключевыми носителями необходима установка дополнительного программного обеспечения:
- pcscd (sudo apt-get install pcscd)
- libccid (sudo apt-get install libccid)
- Рутокен ЭЦП 2.0 – библиотека для работы через PKCS#11 интерфейс
- JaCarta-2 ГОСТ – Единый клиент JaCarta
- ESMART Token ГОСТ – ESMART PKI Client
- Рутокен S – пакет ifd-rutokens_1.0.4 расположен в архиве с ПО
установка скаченных выше библиотек PKCS#11 выполняется командой
sudo dpkg -i путь до скаченной библиотеки
убедитесь, что служба pcscd запущена sudo systemctl status pcscd
если нет запустите ее sudo systemctl enable –now pcscd
2) Установка КриптоПро ЭЦП BrowserPlug-in 2.0:
Скачайте КриптоПроЭЦП Browser plug-in 2.0
Распакуйте загруженный архив: tar -xvf cades-linux-amd64.tar.gz
Выполните установку
sudo dpkg -i cprocsp-pki-cades
sudo dpkg -i cprocsp-pki-plugin
3) Установка личного сертификата:
Установка личного сертификата с привязкой к ключевому контейнеру на ключевом носителе (при подключенном ключевом носителе):
Показать приложения
Инструменты КриптоПро
Контейнеры
Выбрать нужный ключевой носитель
Установить сертификат
Установка облачного сертификата описана в инструкции по ссылке
4) Проверить правильность настройки можно на тестовой странице проверки плагина.
Если настройка произведена корректно, то в поле Сертификат появится строка, соответствующая сертификату.
После выбора сертификата и нажатия кнопки Подписать появится надпись Подпись сформирована успешно.
5) Проверка статуса лицензии КриптоПро CSP 5.0:
6) Активация лицензии КриптоПро CSP 5.0:
Показать приложения
Инструменты КриптоПро
Общее
Ввести лицензию для меня
Примечания:
a) При необходимости отдельной установки сертификатов
корневых удостоверяющих центров (например, в случае использования неквалифицированного сертификата) или промежуточных удостоверяющих центров (например, в случае с проблемами автоматического построения цепочки сертификатов по ссылкам из сертификатов) эти сертификаты можно установить следующим образом:
Показать приложения
Инструменты КриптоПро
Сертификаты
Установить сертификаты
выбрать файл с нужным сертификатом
b) Для работы на портале nalog.ru необходимо:
– иметь в наличии квалифицированный сертификат электронной подписи и соответствующий ему ключ,
– для входа в личный кабинет ИП или ЮЛ с помощью электронной подписи использовать один из браузеров (рекомендуется использовать последнии доступные версии браузеров) с поддержкой ГОСТ TLS – Chromium-Gost или Яндекс.Браузер и входить по прямой ссылке:
https://lkul.nalog.ru – для юридических лиц,
https://lkipgost2.nalog.ru/lk – для индивидуальных предпринимателей.
c) Информация по входу на портал gosuslugi.ru доступна по ссылке.
biff Оставлено | |
Ubuntu 22.04 Код:
Установка Browser plugin Код:
Если игнорировать rdr_gui_gtk – тоже падает Код:
Отредактировано пользователем 21 февраля 2022 г. 15:52:36(UTC) | |
Александр Лавник Оставлено | |
Здравствуйте. Не игнорируйте, установите нужный пакет. | |
1 пользователь поблагодарил Александр Лавник за этот пост. nickm оставлено 21.02.2022(UTC) | |
biff Оставлено | |
Как его установить? Кем он предоставляется? Код:
| |
Александр Лавник Оставлено | |
Автор: biff Как его установить? Кем он предоставляется? Код:
В составе дистрибутива КриптоПро CSP. В Вашем случае: Код:
| |
biff Оставлено | |
Нда, лучше бы вы его устанавливали по умолчанию, чем заставлять пользователей самим искать пакеты в куче дистрибутивах КриптоПро продуктов | |
Александр Лавник Оставлено | |
Автор: biff Нда, лучше бы вы его устанавливали по умолчанию, чем заставлять пользователей самим искать пакеты в куче дистрибутивах КриптоПро продуктов А Вы устанавливайте через скрипт install_gui.sh с выбором всех опций кроме KC2, тогда таких проблем не возникнет. | |
2 пользователей поблагодарили Александр Лавник за этот пост. Андрей * оставлено 21.02.2022(UTC), nickm оставлено 21.02.2022(UTC) | |
Форум КриптоПро
»
Средства криптографической защиты информации
»
Linux, Solaris etc.
»
CryptoPro ECP browser plug-in requires rdr_gui_gtk package from CryptoPro CSP
Николай О. Оставлено | |
Здравсвуйте! sudo dpkg -i cprocsp-pki-plugin-64_2.0.14368-1_amd64.deb получаю ошибку: Цитата: (Reading database … 210067 files and directories currently installed.) И где взять rdr_gui_gtk ? | |
Александр Лавник Оставлено | |
Автор: Николай О. Здравсвуйте! sudo dpkg -i cprocsp-pki-plugin-64_2.0.14368-1_amd64.deb получаю ошибку: Цитата: (Reading database … 210067 files and directories currently installed.) И где взять rdr_gui_gtk ? Здравствуйте. Пакет cprocsp-rdr-gui-gtk… нужно взять из состава используемого дистрибутива КриптоПро CSP. | |
Denis Sidorenko Оставлено | |
Здравствуйте! Аналогичная проблема, в дистрибутиве не произошло установки rdr_gui_gtk. Как вы решили проблему? Код:
Далее Код:
Отредактировано пользователем 8 февраля 2022 г. 20:47:45(UTC) | |
kislenko-artem-artem Оставлено | |
Думаю, что проблема в том, что устанавливается пакет cprocsp-rdr-gui-gtk-64 А ищется пакет cprocsp-rdr-gui-gtk | |
kislenko-artem-artem Оставлено | |
В итоге сделал просто apt install ./cprocsp-pki-plugin-64_2.0.14458-1_amd64.deb – все заработало | |
Системные требования
Требования к аппаратному обеспечению
Минимальные требования к аппаратному обеспечению представлены в таблице ниже.
Требования к программному обеспечению
Служба проверки сертификатов и электронной подписи КриптоПро SVS предназначена для
функционирования в следующих операционных системах (ОС):
- Microsoft Windows Server 2008 R2 с установленным пакетом обновления Service Pack 1 и выше,
- Windows Server 2012,
- Windows Server 2012 R2,
- Microsoft Windows Server 2016,
- Microsoft Windows Server 2019,
- операционная система специального назначения «Astra Linux Special Edition» (ОС СН «Astra Linux Special Edition»),
- РЕД ОС.
В качестве криптопровайдера может быть использовано СКЗИ «КриптоПро CSP» версии 4.0 варианта
исполнения 2-Base, 3-Base и выше.
При использовании ОС Microsoft Windows 2008 R2 необходимо наличие установленного Internet Explorer
версии не ниже 9.
Требования к веб-серверу
Требования к веб-серверу для ОС Microsoft Windows 2008 R2
Для настройки работы веб-сервера необходимо установить Microsoft Internet Information Services 7.5. В
Мастере добавления ролей и компонентов необходимо добавить следующие роли веб-сервера IIS:
- ASP.NET;
- Расширяемость .NET (.NET Extensibility 4.5);
- Расширения ISAPI (ISAPI Extensions);
- Фильтры ISAPI (ISAPI Filters);
- Статическое содержимое (Static content);
- Фильтрация запросов (Request Filtering);
- Консоль управления IIS (IIS Management Console).
Примечание
Если установка Microsoft .NET Framework 4.6.1 происходила до установки роли IIS, то после добавления
данной роли необходимо в командной строке выполнить команду (в одну строку):
%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe iru
Требования к веб-серверу для ОС Microsoft Windows 2012 и 2012 R2
Для функционирования всех компонентов СЭП «КриптоПро DSS» необходима установка Microsoft Internet
Information Services (IIS) 8. В Мастере добавления ролей и компонентов необходимо добавить следующие
роли веб-сервера IIS:
- ASP.NET 4.5;
- Расширяемость .NET (.NET Extensibility 4.5);
- Расширения ISAPI (ISAPI Extensions);
- Фильтры ISAPI (ISAPI Filters);
Указанные роли находятся в разделе «Веб-сервер (IIS) – Веб-сервер – Разработка приложений».
- Статическое содержимое (Static content);
- Фильтрация запросов (Request Filtering);
Указанная роль находится в разделе «Веб-сервер (IIS) – Веб-сервер – Безопасность».
- Консоль управления службами IIS (IIS Management Console).
Указанная роль находится в разделе «Веб-сервер (IIS) – Средства управления – Консоль управления
службами IIS».
Также необходимо выбрать и установить следующие компоненты IIS: Дополнительные службы .NET
Framework 4.5:
- Активация по HTTP (HTTP Activation).
Установить необходимые компоненты можно как через Диспетчер Сервера, так и с помощью командной
строки. Для установки указанных выше компонентов сервера выполните следующую команду:
dism.exe /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-ASPNET45 /FeatureName:IIS-NetFxExtensibility45 /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-StaticContent /FeatureName:IIS-ManagementConsole /FeatureName:IIS-RequestFiltering /FeatureName:WAS-WindowsActivationService /FeatureName:WCF-HTTP-Activation45 /FeatureName:IIS-NetFxExtensibility45 /FeatureName:NetFx4Extended-ASPNET45 /FeatureName:WAS-ConfigurationAPI
Требования к веб-серверу для ОС Microsoft Windows 2016/2019
Для настройки работы веб-сервера необходимо установить Microsoft Internet Information Services 10. В
Мастере добавления ролей и компонентов необходимо добавить следующее:
- Служба активации процессов Windows:
- Модель процесса;
- API конфигурации;
- Функции .NET Framework 4.6:
- .NET Framework 4.6
- ASP.NET 4.6
- Службы WCF:
- Активация по HTTP
- Платформа .NET 3.5.
- Ведение журнала;
- Расширяемость .NET (.NET Extensibility 4.5);
- Расширения ISAPI (ISAPI Extensions);
- Фильтры ISAPI (ISAPI Filters);
- Статическое содержимое (Static content);
- Фильтрация запросов (Request Filtering);
- Консоль управления IIS (IIS Management Console).
Установить необходимые компоненты можно как через Диспетчер Сервера, так и с помощью командной
строки. Для установки указанных выше компонентов сервера выполните следующую команду:
dism.exe /Online /Enable-Feature /FeatureName:IIS-WebServerRole /FeatureName:IIS-WebServer /FeatureName:IIS-ASPNET45 /FeatureName:IIS-NetFxExtensibility45 /FeatureName:IIS-ISAPIExtensions /FeatureName:IIS-ISAPIFilter /FeatureName:IIS-StaticContent /FeatureName:IIS-ManagementConsole /FeatureName:IIS-RequestFiltering /FeatureName:WAS-WindowsActivationService /FeatureName:WCF-HTTP-Activation45 /FeatureName:IIS-NetFxExtensibility45 /FeatureName:NetFx4Extended-ASPNET45 /FeatureName:WAS-ConfigurationAPI
КриптоПро SVS при эксплуатации в ОС СН Astra Linux Special Edition поддерживает следующие веб-серверы:
- nginx
- apache
Настройка веб-серверов выполняется согласно эксплуатационной документации к используемой версии КриптоПро CSP
(см. документ “Руководство администратора безопасности. Linux” из соответствующего комплекта документации).
Пример настройки веб-сервера nginx
Установка дополнительных пакетов:
sudo apt-get install build-essential patch
Применение модуля СКЗИ для nginx:
wget https://nginx.org/download/nginx-1.18.0.tar.gz
tar -xvf ./nginx-1.18.0.tar.gz
cp ./ng-nginx.1.18.0.patch ./nginx-1.18.0 && cd ./nginx-1.18.0/
patch -p1 < ./ng-nginx.1.18.0.patch
Получение дополнительных исходных текстов:
wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz
tar -xvf ./pcre-8.44.tar.gz && cd ./pcre-8.44
wget https://zlib.net/zlib-1.2.11.tar.gz
tar -xvf ./zlib-1.2.11.tar.gz
wget https://www.openssl.org/source/openssl-1.1.1h.tar.gz
tar -xvf ./openssl-1.1.1h.tar.gz
cd ./nginx-1.18.0
./configure \
--user=nginx \
--group=nginx \
--with-cc-opt='-fstack-protector -fstack-protector-strong --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Werror=implicit-function-declaration -Winit-self -Wp,-D_FORTIFY_SOURCE=2 -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie -L/opt/cprocsp/lib/amd64 -lrdrsup -lssp -lcapi10 -lcapi20' \
--prefix=/opt/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--lock-path=/var/run/lock/nginx.lock \
--pid-path=/var/run/nginx.pid \
--with-pcre=/home/test/src/pcre-8.44/ \
--with-pcre-jit \
--with-zlib=/home/test/src/zlib-1.2.11/ \
--with-http_ssl_module \
--with-http_sspi_module \
--with-http_stub_status_module \
--with-openssl=/home/test/src/openssl-1.1.1h/ \
--with-openssl-opt='no-gost no-comp no-dtls no-deprecated no-dynamic-engine no-engine no-hw-padlock no-nextprotoneg no-psk no-tests no-ts no-ui-console' \
--with-stream \
--with-stream_ssl_module \
--with-stream_sspi_module \
--with-http_v2_module
make
Копирование базовой конфигурации (пример конфигурации приведён в 4.1.2):
sudo cp ./nginx.conf.sample ./nginx-1.18.0/conf/nginx.conf
sudo make install
Создание системного пользователя:
sudo adduser --system --no-create-home --group nginx
sudo chown -R nginx:nginx /var/log/nginx/
sudo cp ./nginx.init /etc/init.d/nginx
Использование
Function reference
Демо: Выпуск сертификата
Демо: Электронная подпись
Демо: Шифрование данных
Скачать
Использование
<script src="ruscrypto.min.js"></script>
<script>
var cryptopro = new window.RusCryptoJS.CryptoPro;
cryptopro.init().then(function(info) {
console.log('Initialized', info);
}
</script>
ES Module
import { CryptoPro } from 'ruscryptojs';
const cryptopro = new CryptoPro;
cryptopro.init().then(function(info) {
console.log('Initialized', info);
}
Function reference
init () :
Promise
Инициализация и проверка наличия требуемых возможностей. Должна быть вызвана первой до всех прочих вызовов.
Возвращает объект с полями:
{
version: 'версия плагина'
}
bind
(
userPin : Void
) : Promise
Включает кеширование ПИН-кодов в процессе подписания, чтобы не тробовать от пользователя повторного ввода.
Возвращает новое состояние (true).
unbind
() : Promise
Отключает кеширование ПИН-кодов в процессе подписания.
Возвращает новое состояние (false).
generateCSR
(
dn : DN
[, ekuOids : Array
[, options : Object ]]
) : Promise
Начиная с версии 2.6
Создание запроса на сертификат.
Возвращает объект с полями
{
csr: 'base64 запрос на сертификат'
}
generateCSR
(
dn : DN
[, pin : String
[, ekuOids : Array
[, providerType : Number ]]]
) : Promise
До версии 2.6
Создание запроса на сертификат.
Возвращает объект с полями
{
csr: 'base64 запрос на сертификат'
}
writeCertificate
(
certBase64 : String
) : Promise
Запись сертификата (полученного от УЦ).
Возвращает отпечаток (thumbprint) установленного сертификата.
certificateInfo
(
certThumbprint : String
) : Promise
Получение информации об установленном сертификате.
Возвращает объект с полями и строковым представлением:
'Название: ' + this.Name +
'Издатель: ' + this.IssuerName +
'Субъект: ' + this.SubjectName +
'Версия: ' + this.Version +
'Серийный №: ' + this.SerialNumber +
'Отпечаток SHA1: ' + this.Thumbprint +
'Не дествителен до: ' + this.ValidFromDate +
'Не действителен после: ' + this.ValidToDate +
'Приватный ключ: ' + (this.HasPrivateKey ? 'Есть' : 'Нет') +
'Валидный: ' + (this.IsValid ? 'Да' : 'Нет')
Дополнительно содержит поля Subject
и Issuer
с представлением соответствующих полей в виде объектов DN,
где каждый RDN представлен как свойство и его значение.
listCertificates () :
Promise
Получение списка доступных сертификатов.
Возвращает массив объектов с полями:
[{
id: 'thumbprint',
name: 'subject'
}, ...]
readCertificate
(
certThumbprint : String
) : Promise
Чтение (экспорт) сертификата.
Возвращает base64 закодированное тело сертификата.
signData
(
dataBase64 : String,
certThumbprint : String
[, options : Object]
) : Promise
Начиная с версии 2.4
Подпись данных отсоединенная или присоединенная.
Возвращает base64 закодированную подпись.
signData
(
dataBase64 : String,
certThumbprint : String
[, pin : String]
) : Promise
До версии 2.4
Подпись данных (отсоединенная).
Возвращает base64 закодированную подпись.
signData2
(
dataBase64 : String,
certThumbprint : String,
certThumbprint2 : String,
options : Object
) : Promise
Начиная с версии 2.4 нет обратной совместимости!
Совместная подпись данных (двумя сертификатами).
Возвращает base64 закодированную подпись.
signData2
(
dataBase64 : String,
certThumbprint : String,
pin : String,
certThumbprint2 : String,
pin2 : String
) : Promise
До версии 2.4
Совместная подпись данных (двумя сертификатами).
Возвращает base64 закодированную подпись.
addSign
(
dataBase64 : String,
signBase64 : String,
certThumbprint : String
[, options : Object]
) : Promise
Начиная с версии 2.4 нет обратной совместимости!
Добавление подписи к существующей.
Возвращает base64 закодированную подпись.
addSign
(
dataBase64 : String,
signBase64 : String,
certThumbprint : String
[, pin : String]
) : Promise
До версии 2.4
Добавление подписи к существующей.
Возвращает base64 закодированную подпись.
verifySign
(
dataBase64 : String,
signBase64 : String
[, options : Object]
) : Promise
Возвращает истину true или выбрасывает ошибку в случае неуспешной проверки.
encryptData
(
dataBase64 : String,
certThumbprint : String
) : Promise
Шифрование данных в формате CMS.
Возвращает зашифрованные данные в формате CMS.
decryptData
(
dataBase64 : String,
certThumbprint : String
[, pin : String]
) : Promise
Расшифрование данных в формате CMS.
Возвращает расшифрованные данные.
Выпуск сертификата
Электронная подпись
Шифрование данных
Всем привет! Я Максим, бэкенд-разработчик команды MSB (корпоративная сервисная шина), занимаюсь интеграциями систем для внутренних нужд компании Tele2, и в этом посте хочу поделиться опытом интеграции с “КриптоПро DSS” поверх ГОСТ TLS.
Введение
В связи с экономией на бумаге ростом цифровизации бизнес-процессов, в частности, с постепенным уходом от традиционных бумажных документов к электронному документообороту, возникла потребность реализовать электронную подпись документов у нас в компании.
В качестве сервера электронной подписи используется комплекс “КриптоПро DSS”, имеющий возможность встроить двухфакторное подтверждение операций подписания в мобильное приложение, посредством своего DSS SDK.
Мы встроили данный SDK в наше корпоративное мобильное приложение, о котором писала моя коллега в своей статье на Хабре.
Но мой рассказ связан с опытом решения задачи со стороны бэкенда, и мы рассмотрим эту задачу подробнее.
Описание проблемы и её решение
В нашей схеме подключение к серверу электронной подписи осуществляется по ГОСТ TLS с аутентификацией клиента по сертификату.
Но не секрет, что стандартные платформы, а именно горячо любимый мной .NET, не поддерживают российские криптошифры по ГОСТу.
В качестве эксперимента пробовал подключить rtengine, но он не завёлся, и, помимо прочего, он не является сертифицированным средством защиты информации. В таких случаях “КриптоПро” советует использовать “КриптоПро Stunnel”.
Изначально, stunnel – это open-source приложение, выступающее в роли шлюза, который принимает незашифрованный трафик и пересылает его на целевой сервер поверх TLS. Часто используется, когда клиент сам не поддерживает TLS-шифрование.
А Stunnel от “КриптоПро” – это практически тот же stunnel, но с поддержкой ГОСТ TLS, а значит, он замечательно подходит для решения нашей проблемы.
Представленная выше схема рабочая, если бы не одно но: согласно политикам безопасности в компании, все запросы во внешнюю сеть Интернет могут осуществляться только через корпоративный прокси. Ванильный stunnel из коробки умеет делать запросы через прокси, но “КриптоПро” эту фичу выпилил в своей редакции.
Чтобы обойти это ограничение, в схему было решено добавить еще одно известное Linux-администраторам приложение socat (еще один шлюз, в своем роде), который умеет делать подключения через HTTP-прокси. Важное условие – HTTP-прокси должен разрешать подключения через метод CONNECT.
В итоге схема станет такой:
Docker
Для упрощения было решено пренебречь правилом “один контейнер – один процесс” и запускать “КриптоПро Stunnel” и socat в одном контейнере. Данный контейнер поднимается в виде sidecar рядом с основным контейнером микросервиса. Это позволяет нашему микросервису общаться с “КриптоПро DSS” так, как будто бы они общались по http-протоколу, а вопросы шифрования трафика по ГОСТ TLS отдаются на откуп контейнеру с stunnel и socat.
Чтобы подготовить образ контейнера, нужно скачать deb-пакет с “КриптоПро CSP” (именно в составе этого дистрибутива и состоит “КриптоПро Stunnel”). К сожалению, скачать пакет нельзя по прямой ссылке, которую можно было бы прописать в Dockerfile (иначе бы статья получилась в два раза короче). Для скачивания нужно пройти регистрацию на сайте “КриптоПро”, и только потом будет дана возможность скачать пакет.
Ниже приведен пример Dockerfile, скриптов инициализации и конфига для “КриптоПро Stunnel”.
Рабочий пример можно также посмотреть здесь.
Dockerfile
FROM debian:buster-slim
EXPOSE 80/tcp
ARG TZ=Europe/Moscow
ENV PATH="/opt/cprocsp/bin/amd64:/opt/cprocsp/sbin/amd64:${PATH}"
# stunnel settings
ENV STUNNEL_HOST="example.cryptopro.ru:4430"
ENV STUNNEL_HTTP_PROXY=
ENV STUNNEL_HTTP_PROXY_PORT=80
ENV STUNNEL_HTTP_PROXY_CREDENTIALS=
ENV STUNNEL_DEBUG_LEVEL=5
ENV STUNNEL_CERTIFICATE_PFX_FILE=/etc/stunnel/certificate.pfx
ENV STUNNEL_CERTIFICATE_PIN_CODE=
# dependencies
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \
&& echo $TZ > /etc/timezone \
&& apt-get update \
&& apt-get -y install lsb-base curl socat \
&& rm -rf /var/lib/apt/lists/*
# install cryptopro csp
WORKDIR /dist
COPY dist/csp_deb.tgz csp_deb.tgz
RUN tar -zxvf csp_deb.tgz --strip-components=1 \
&& ./install.sh cprocsp-stunnel
WORKDIR /
COPY conf/ /etc/stunnel
COPY bin/docker-entrypoint.sh docker-entrypoint.sh
COPY bin/stunnel-socat.sh stunnel-socat.sh
RUN chmod +x /docker-entrypoint.sh /stunnel-socat.sh
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["stunnel_thread", "/etc/stunnel/stunnel.conf"]
docker-entrypoint.sh
#!/bin/bash
# скрипт инициализации
# ---------------------------------
# настройка csp
echo "Configuring CryptoPro CSP..."
# импорт сертификата с закрытым ключом
if [[ ! -f "$STUNNEL_CERTIFICATE_PFX_FILE" ]]; then
echo "Client certificate not found in ${STUNNEL_CERTIFICATE_PFX_FILE}"
exit 1
fi
certmgr -install -pfx -file "${STUNNEL_CERTIFICATE_PFX_FILE}" -pin "${STUNNEL_CERTIFICATE_PIN_CODE}" -silent || exit 1
echo "Certificate was imported."
echo
# определение контейнера-хранилища закрытых ключей
containerName=$(csptest -keys -enum -verifyc -fqcn -un | grep 'HDIMAGE' | awk -F'|' '{print $2}' | head -1)
if [[ -z "$containerName" ]]; then
echo "Keys container not found"
exit 1
fi
# установка сертификата клиента
certmgr -inst -cont "${containerName}" -silent || exit 1
# экспорт сертификата для stunnel
exportResult=$(certmgr -export -dest /etc/stunnel/client.crt -container "${containerName}")
if [[ ! -f "/etc/stunnel/client.crt" ]]; then
echo "Error on export client certificate"
echo "$result"
exit 1
fi
echo "CSP configured."
echo
# ---------------------------------
# запуск socat
echo "Starting socat..."
nohup bash /stunnel-socat.sh </dev/null >&1 2>&1 &
# ---------------------------------
# запуск stunnel
echo "Configuring stunnel..."
sed -i "s/^debug=.*$/debug=$STUNNEL_DEBUG_LEVEL/g" /etc/stunnel/stunnel.conf
echo "Starting stunnel"
exec "$@"
stunnel-socat.sh
#!/bin/bash
echo Configuring socat...
socatParameters="TCP:${STUNNEL_HOST}"
if [[ -n "$STUNNEL_HTTP_PROXY" ]]; then
# если указан http-прокси, подключение будет происходить через него
socatParameters="PROXY:${STUNNEL_HTTP_PROXY}:${STUNNEL_HOST},proxyport=${STUNNEL_HTTP_PROXY_PORT}"
if [[ -n "$STUNNEL_HTTP_PROXY_CREDENTIALS" ]]; then
socatParameters="${socatParameters},proxyauth=${STUNNEL_HTTP_PROXY_CREDENTIALS}"
fi
fi
socatCmd="socat UNIX-LISTEN:/var/run/socat.sock,reuseaddr,fork ${socatParameters}"
while true; do
rm -f /var/run/socat.sock
echo $(date) "Start socat instance."
${socatCmd}
sleep 1
done
stunnel.conf
foreground=yes
pid=/var/opt/cprocsp/tmp/stunnel_cli.pid
output=/dev/stdout
debug=5
[https]
client=yes
accept=80
cert=/etc/stunnel/client.crt
verify=0
connect=/var/run/socat.sock
Про Dockerfile рассказывать не буду, он достаточно тривиален, а вот скрипт инициализации docker-entrypoint.sh интереснее. Первым делом скрипт импортирует сертификат с закрытым ключом в хранилище ключей, так как “КриптоПро Stunnel” для работы необходим закрытый ключ. Затем из хранилища экспортируется сертификат с открытым ключом в формате DER. В дальнейшем по этому сертификату “КриптоПро Stunnel” будет получать закрытый ключ из хранилища ключей.
После инициализации хранилища ключей происходит настройка и запуск socat. Для конфигурирования socat добавлены переменные окружения, которые позволяют указать, через какой HTTP-прокси необходимо выполнять запросы. Не буду останавливаться на этих переменных – их описание есть в репозитории. Однако не лишним будет уточнить, что, если переменные не указаны, socat будет самостоятельно выполнять TCP-запросы до целевого сервера. Для получения входящих запросов socat открывает unix-сокет, на который и будет обращаться “КриптоПро Stunnel”.
Финальным шагом в скрипте являются конфигурирование Stunnel и его последующий запуск.
“КриптоПро Stunnel” при запуске начинает прослушивать порт 80, то есть принимать голый HTTP-трафик. HTTP-трафик будет шифроваться по ГОСТу и пересылаться на unix-сокет, который слушает socat. Socat, в свою очередь, откроет соединение с целевым сервером, напрямую или через HTTP-прокси, и отправит уже шифрованный запрос.
Шифрованный ответ от целевого сервера пройдет ту же цепочку, только обратном порядке, и вызывающему приложению будет возвращен ответ в виде plain text, что позволит не реализовывать ГОСТ TLS внутри приложений (если такая реализация вообще возможна).
Вместо заключения
К сожалению, документация по отечественным решениям зачастую достаточно скромна. К примеру, на попытки заставить работать “КриптоПро Stunnel” через HTTP-прокси ушло много времени, пока не пришло понимание, что “КриптоПро Stunnel” прокси не поддерживает и что без еще одного инструмента не обойтись.
Данная статья призвана помочь сберечь ваше время, надеюсь, описанное окажется полезным.
Бонус
В качестве бонуса хотелось бы поделиться несколькими советами:
Список ресурсов
stunnel TLS Proxy
Шифрование TLS-трафика по алгоритмам ГОСТ-2012 c Stunnel
Системные требования¶
Скрипты, перечисленные в этом разделе, написаны на Windows PowerShell.
Windows PowerShell — расширяемое средство автоматизации от Microsoft, состоящее из оболочки с интерфейсом командной строки и сопутствующего языка сценариев.
Windows PowerShell 2.0 был выпущен в составе Windows 7, Windows 8 и Windows Server 2008 R2, а также Windows Server 2012 R2, как неотъемлемый компонент системы.
Кроме того, вторая версия доступна и для других систем, таких, как Windows XP SP3, Windows Server 2003 SP2, Windows Vista SP1, Windows Vista SP2, Windows Server 2008 и Windows Server 2012.
Примечание
Это означает, что только в Windows 7 и выше, есть встроенные средства для работы скриптов. В других системах нужно установить PowerShell отдельно (Скачать).
Также необходимо наличие установленной КриптоПро.
Утилита cert-install. ps1¶
- Загрузить утилиту
cert-install.ps1 – утилита для массовой установки сертификатов.
Позволяет массово устанавливать сертификаты с носителей. При необходимости можно установить сертификаты только с определенного носителя.
Алгоритм работы¶
После запуска скрипта появится меню выбора действий:
В зависимости от выбора будет выполнена соответствующая операция.
Запуск скриптов¶
Выполнять скрипты рекомендуется через среду разработки Windows PowerShell ISE. Чтобы не менять настройки безопасности на компьютерах абонентов:
- Откройте скрипт в Windows PowerShell ISE;
- Выделите код скрипта, нажмите
и скрипт будет выполнен.
Если в процессе выполнения скрипта возникли ошибки или его не удалось запустить, смотрите раздел Решение проблем.
Утилиты export_keys. ps1 и import_keys. ps1¶
- Загрузить скрипты
Две утилиты, используеющиеся совместно.
export_keys.ps1
:
- автоматически определяет разрядность системы;
- автоматически определяет SID пользователя;
- экспортирует ветку в папку со скриптом.
import_keys.ps1
:
- автоматически определяет разрядность системы;
- автоматически определяет SID пользователя;
- изменяет ветку реестра в экспортированном файле;
- импортирует файл с контейнерами;
- автоматически устанавливает сертификаты, перенесенных контейнеров.
Примечание
Утилиты целесообразно использовать в случае, когда требуется перенести большое количество контейнеров из реестра одного компьютера, в реестр другого.
Алгоритм работы¶
- Перенесети папку с утилитами на первый компьютер абонента, с которого надо скопировать контейнеры;
- Запустите скрипт
и дождитесь его успешного выполнения. При этом в папке со скриптами появится экспортированная ветка реестра;
- Перенесите папку со скрипом и экспортированным файлом на второй компьютер;
- Запустите скрипт
и дождитесь его успешного выполнения;
- Просмотрите вывод скрипта, на наличе проблем и проверьте вход в сервисы СКБ Контур.
Примечание
При использовании скриптов не требуется устанавливать сертификаты через КриптоПро. Однако, вы можете проверить через КриптоПро успешное выполнение сценариев.
Внимание
Скрипт export_keys.ps1 сохраняет ветку в файле ps_keys.reg на рабочем столе. Скрипт import_keys.ps1 подхватывает файл ps_keys.reg также
с рабочего стола и резудьтат обработки сохраняет в файле ps_keys_out.reg.
Файл ps_keys.reg не будет подхвачен скриптом import_keys.ps1 из других папок.
Вывод скриптов¶
Скрипты подробно комментируют процесс своего выполнения, поэтому внимательно смотрите то, что они выводят в командной строке.
Пример успешного вывода export_keys.ps1:
\ \\\ \\\\ \\\\
Пример успешного вывода import_keys.ps1:
\ \\\ \\\ \\\\ # 2 found->KEY PROV INFO PROP ID. \\ # 2 found->KEY PROV INFO PROP ID. \\
Решение проблем¶
Windows блокирует запуск скрипта¶
Система “безопасности” Windows может заблокировать выполнение скриптов. В такой ситуации требуется принудительно разрешить их выполнение.
Если при попытке выполнить сценарий появляется сообщение Не удается загрузить файл <путь к вашему файлу>, так как выполнение скриптов запрещено для данной системы.
Введите “get-help about_signing” для получения дополнительных сведений, достаточно подтвердить свое согласие введя Y.
Также можно воспользоваться средой разработки Windows PowerShell ISE. Подробнее смотрите:
- Создание и выполнение скриптов
- Использование среды Windows PowerShell ISE