GitHub — krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in ЭЦП

About()

Выводит информацию о верисии плагина и так далее

Angular (es modules typescript)

Запуск в режиме разработки:

Запуск в продакшн режиме:

npm run build
npm run serve

Cryptopro

Единое, асинхронное API для взаимодействия с КриптоПРО ЭЦП Browser Plug-In

Currentcadescert(thumbprint)

Получает сертификат по thumbprint значению сертификата

Getcert(thumbprint)

Получает сертификат по thumbprint значению сертификата.
С помощью этой функции в сертификате доступны методы для парсинга информации о сертификате

Getcertslist()

Получает массив валидных сертификатов

Installation

First of all, include JavaScript sources cryptopro.js and lib_nativebridge.js into HTML code of your page.

lib_cryptopro.js is a core of this project and contains wrapper implementation. lib_nativebridge.js is needed by iOS devices to utilize functionality of CRYPTO-PRO Browser plug-in.

Then, put object tags into body of your page as shown below. Be sure to keep their IDs, because these names are referenced by library.

Finally, create an instance of CryptoPro() class in your code:

Now you should be able to use all functions of CryptoPro.js library!

Isvalid()

Производит проверку на валидность сертификата

Possibleinfo(subjectissuer)

Функция формирует ключи и значения в зависимости от переданного параметра
Доступные параметры ‘subjectInfo’ и ‘issuerInfo’

Signbase64(thumbprint, base64, type)

Подписать строку в формате base64

Поддерживаемые КриптоПро ЭЦП Browser plug-in браузеры (IE, Firefox, Opera, Chrome, Safari) не предоставляют простого и надежного способа обработки бинарных данных. Таким образом, невозможно обеспечить корректную передачу бинарных данных из браузера в плагин и обратно.
При подписании произвольных данных рекомендуется предварительно закодировать их в Base64 и использовать свойство ContentEncoding.

По этой же причине для возвращаемых из КриптоПро ЭЦП Browser plug-in строк, в которых могут содержаться бинарные данные, не поддерживается кодировка CAPICOM_ENCODING_BINARY.

Signxml(thumbprint, xml, cadescomxmlsignaturetype)

Подписать строку в формате XML

Usage

Actually, before you can sign and verify documents, you should invoke Initialize() method to ensure that CRYPTO-PRO Browser plug-in is installed and activated correctly. Please refer the following example:

Запуск режима разработки

Устанавливаем зависимости:

Во время работы с кодом необходим запущенный сборщик:

И пример, на котором можно тестировать изменения.
Удобнее всего тестировать на примере с тэгом script, тк он отвязан от фреймворков
и использует сборку в формате UMD из папки dist/, постоянно обновляемую пока работает
сборщик. Запускаем его таким образом:

После выполнения npm link ../../ в директории examples/script-tag/node_modules папка crypto-pro-js станет ярлыком,
указывающим на папку содержащую локально собранный пакет.

Запуск тестов

Тесты написаны с использованием Jest:

Зачем мне этот пакет?

КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
Асинхронной (в современных браузерах) и синхронной (в браузерах постарше).
С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.
И вместо этого
и этого
написать это (UMD):

или это (ES Modules Typescript):

Лицензия

MIT

Метод getcertslist

Получение списка доступных сертификатов
Результат:

  • Массив вида: [{}, {}, …], где

Вызов:

Метод signcreate

Создание прикрепленной подписи контента в base64 кодировке
Параметры:

  • cert — ФИО владельца сертификата
  • data — контент в base64 кодировке

Результат:

Вызов:

Методы объекта cryptopro

*Методы getContainerCertificates и getAllContainerCertificates позволяют получить сертификаты из закрытых ключей, записанных на обыкновенную флэшку

Методы объекта сертификата

Сертификат предоставляет следущее API:

Миграция с версии 1 на 2

Внесены следующие изменения:

  • Пакет собран в форматах:
    • UMD, в папке dist/, для подключения через тэг script. Объект window.cryptoPro доступен глобально.
    • ES Modules, в папке lib/, для использования с разными системами сборки.
      Методы API импортируются напрямую из npm пакета.
  • В UMD версии переименован глобальный объект с window.CryptoPro на window.cryptoPro
  • Переименованы общие методы:
  • Убран метод signDataXML
  • Переименованы методы сертификата:
  • Результат методов сертификата getOwnerInfo и getIssuerInfo
    изменился с { descr, title, translated } на { description, title, isTranslated }
  • Принципиальная реализация методов, обращающихся к Крипто ПРО не изменилась.
    Получение сертификатов, создание подписи, проверка корректности настроек работают по-прежнему.
  • Убрана поддержка IE8 (Крипто ПРО его больше не поддерживает)
  • Убрана поддержка КриптоПРО CSP версий ниже 4.0
  • Убрана поддержка КриптоПРО ЭЦП browser plug-in версий ниже 2.0
  • Доработана обработка ошибок, выбрасываемых из Крипто ПРО
  • При написании кода будут работать автодополнения и подсказки
  • Исправлена проблема работы библиотеки с UglifyJs
  • Методы API доступны напрямую:

В версии 1:

В версии 2 (UMD):

В версии 2 (ES Modules):

Настройка плагина для firefox (до версии 52)

После настройки плагина на страницах, запрашивающих работу с ЭП в панели навигации, рядом с url будет кнопка,
позволяющая «разрешить и запомнить» использование установленного плагина.

Перезапустите Firefox, и убедитесь в наличии CryptoPRO Cades plugin (см. Menu -> Addons).

Обратите внимание! для пробной работы с компонентом вам необходимо иметь

  • Компьютер под управлением Windows, Linux, MacOS или FreeBSD
  • Один из современных браузеров (Internet Explorer, Mozilla Firefox, Opera, Chrome, Яндекс.Браузер, Safari) с поддержкой сценариев JavaScript
  • Установленный плагин для браузера «КриптоПро ЭЦП Browser plug-in» (Установить)
  • Если планируется создание ЭЦП по ГОСТ Р 34.10-2001/2022, то необходимо установить СКЗИ КриптоПро CSP
  • Cертификат ключа подписи, который можно получить на странице тестового центра
  • Проверить работу установленного плагина

Ошибка параметр задан неверно. (0x80070057)

Если при попытке подписать сообщение с использованием PKCS#7 подписи падает такая ошибка, то читайте этот issue

Примеры

Для их запуска необходим NodeJS LTS.

Проверка пакета перед публикацией в npm

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

npm run package
mv package ..

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

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

Проверяем работу примеров в режимах разработки и продакшн.

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

Распространение и установка файлов криптопро эцп browser plug-in

Для функционирования веб-страниц, использующих КриптоПро ЭЦП Browser plug-in, он должен быть установлен на стороне клиента.

1. Скачайте программу установки и запустите исполняемый файл CadesPlugIn.exe.

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

2. Для браузера Chrome, запустите Chrome (Chromium) и дождитесь оповещения об установленном расширении «CryptoPro Extension for CAdES Browser Plug-in». Включите это расширение. Или зайдите по ссылке и установите расширение. Для браузеров Opera и Яндекс.Браузер расширение также доступно по ссылке. Для браузера Firefox версии 52 и выше требуется скачать расширение с сайта и установить в браузер самостоятельно.

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

3. Перезапустите браузер. Если установка прошла корректно, на странице появится информация о том, что плагин загружен.

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

1. Для работы плагина требуется установленный КриптоПро CSP версии 4.0 и выше. Дистрибутив и инструкцию по установке можно получить по

ссылке

. Для работы плагина обязательна установка пакетa cprocsp-rdr-gui-gtk и отсутствие установленного пакета cprocsp-rdr-gui.

2. Скачайте и распакуйте архив cades_linux_ia32.zip или cades_linux_amd64.zip

3. Установите пакеты cprocsp-pki-2.0.0-cades.rpm cprocsp-pki-2.0.0-plugin из архива. В дистрибутивах семейства Debian необходимо конвертировать пакеты из формата rpm в deb. Для этого можно использовать утилиту alien. При использовании некоторых 64 битных версий КриптоПро CSP 4.0 для rpm дистрибутивов потребуется указать флаг —nodeps.

4. Для браузера Chrome(Chromium) расширение для работы плагина устанавливается автоматически при перезапуске браузера. Ручная установка возможна если перейти по ссылке. Для браузеров Opera и Яндекс.Браузер расширение доступно по ссылке

5. Перезапустите браузер.

Поддерживаемые браузеры: FireFox, Opera версии 35 и выше, Google Chrome, Chromium и Яндекс.Браузер.

1. Перейдите на

демо-страницу

с примером подписи CAdES BES, CAdES X LONG или примером подписи XML.

2. Следуя указаниям демо-страницы, выберите сертификат подписи, введите данные для проверки работы плагина и нажмите «Подписать».

GitHub - krecu/cryptopro-async-plugin: КриптоПро ЭЦП browser plug-in

Дополнительную информацию можно получить на сайте производителя.

Для активации объектов КриптоПро ЭЦП Browser plug-in следует подключить к странице файл cadesplugin_api.js:

Пример создания объектов КриптоПро ЭЦП Browser plug-in

Тем, кто хочет помочь

Буду благодарен за расширение/улучшение/доработку API.
Вам будут полезны примеры,
предоставляемые Крипто ПРО.

Установка

Для NPM:

npm install crypto-pro-js

Для Yarn:

Для Bower:

bower install webmasterskaya/crypto-pro-js

Подключение пакета как UMD модуля через тэг script:

Подключение пакета как ES модуля с Typescript или JavaScript:

Список требуемых полифиллов (если необходимы, подключаются самостоятельно):

  • Promise
  • Array.prototype.find

Установка криптопро csp в linux / osx

Процесс установки в OSX незначительно отличается от Linux, поэтому описание приведено на примере дистрибутива семейства Debian (x64).

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

После загрузки КриптоПРО CSP для нужной платформы, распакуйте архив:

tar -xzvf linux-amd64_deb.tgz
chmod 777 -R linux-amd64_deb/

Запустите скрипт установки:

linux-amd64_deb/install.sh

Проверьте отсутствиеcprocsp-rdr-gui:

Установите дополнительно cprocsp-rdr-gui-gtk:

dpkg -i linux-amd64_deb/cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb

Дополнительная информация по установке

Установка криптопро эцп browser plugin в linux

Загрузите КриптоПРО ЭЦП browser plug-in и распакуйте его:

mkdir cades_linux_amd64
tar -xzvf cades_linux_amd64.tar.gz -C cades_linux_amd64

Сконвертируйте rpm в deb пакеты при помощи утилиты alien:

Установите пакеты:

dpkg -i cprocsp-pki-cades_2.0.0-2_amd64.deb
dpkg -i cprocsp-pki-plugin_2.0.0-2_amd64.deb

Проверьте наличие файлов плагина:

Установка сертификатов в linux

В OSX процесс схож с Linux.

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

Скопируйте ключевой контейнер \.FLASH.sidorov на жесткий диск:

Наличие [ErrorCode: 0x00000000] в завершении каждой команды КриптоПРО говорит о ее успешном выполнении.

Проверьте наличие нового контейнера \.HDIMAGEsidor:

Установите личный сертификат:

Возможно в выводе вы ссылку на сертификат УЦ

При необходимости загрузите сертификат удостоверяющего центра и установите его командой:

После чего, при проверке установленного личного сертификата вы увидите PrivateKey Link: Yes:

/opt/cprocsp/bin/amd64/certmgr -list -store uMy

Friendlyvalidperiod()

Возвращает распаршенную информацию об объекте validPeriod

Friendlysubjectinfo()

Возвращает распаршенную информацию о строке subjectInfo

Friendlyissuerinfo()

Возвращает распаршенную информацию о строке issuerInfo

Friendlydate(date)

Формирует дату от переданного параметра

ЭЦП:  Копирование контейнера закрытого ключа в реестр | База знаний
Оцените статью
ЭЦП64