node js криптопро

node js криптопро Электронная цифровая подпись

Начнем с того, что у нас есть уже установленный Oracle Instant Client и SDK на Ubuntu, процесс его установки описывать не буду тк все это давно описано. Итак, мы хотим подружить наш новомодный Node.js с ораклом. Для этого нам потребуется фирменный node-oracledb – a Node.js driver for Oracle Database.

Скорее всего команда

npm install oracledb

закончится ошибкой, потому, что как обычно это бывает с ораклом, не хватает переменных окружения. В моем случае Oracle Instant Client установлен в /opt/Oracle/instantclient_11_2, поэтому все буду описывать относительного этого пути. SDK расположен в /opt/Oracle/instantclient_11_2/sdk.

Идем в /etc/profile.d/oracle.sh, который вы создали при установке клиента, и добавляем в него OCI_LIB_DIR и OCI_INC_DIR, таки образом, чтоб получилось что-то вроде моего:

export PATH=/opt/Oracle/instantclient_11_2:$PATH
export LD_LIBRARY_PATH=/opt/Oracle/instantclient_11_2:$LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.UTF8
export ORACLE_HOME=/opt/Oracle/instantclient_11_2
export TNS_ADMIN=/opt/Oracle
export SQLPATH=/opt/Oracle/instantclient_11_2
export OCI_LIB_DIR=$ORACLE_HOME
export OCI_INC_DIR=$ORACLE_HOME/sdk/include

Так же можно прописать нужные переменные в /root/.bashrc для того, чтоб они были доступны под суперпользователем.

Содержание
  1. cryptopro-node-cades
  2. Установка
  3. Сборка
  4. Использование модуля
  5. nodeCryptopro
  6. Установка и настройка пакета
  7. Ubuntu
  8. Windows
  9. Использование
  10. Ubuntu
  11. Компиляция. so/. dll библиотеки
  12. Ubuntu
  13. Windows
  14. Для работы плагина выполните следующие шаги
  15. Описание принципов работы плагина
  16. cryptoPro
  17. Ошибка Параметр задан неверно. (0x80070057)
  18. Зачем мне этот пакет?
  19. Установка
  20. API
  21. Методы объекта cryptoPro
  22. Методы объекта сертификата
  23. Поддерживаемые СКЗИ
  24. Примеры
  25. Тэг script (UMD)
  26. Тем, кто хочет помочь
  27. Запуск режима разработки
  28. Запуск тестов
  29. Проверка пакета перед публикацией в NPM
  30. Лицензия
  31. Поддерживаемые СКЗИ
  32. Поддерживаемые СКЗИ
  33. На самом деле всё куда хуже
  34. Миграция с версии 1 на 2
  35. Установка КриптоПРО CSP в Linux / OSX
  36. Начну с того, что всё плохо
  37. Использование
  38. Ubuntu
  39. Установка сертификатов в Linux
  40. CryptoPro
  41. Проверка пакета перед публикацией в NPM
  42. Запуск режима разработки
  43. .
  44. Запуск режима разработки
  45. Установка КриптоПРО ЭЦП browser plugin в Linux
  46. Настройка плагина для Firefox (до версии 52)
  47. Компиляция. so/. dll библиотеки
  48. Ubuntu
  49. Windows
  50. API
  51. Методы объекта cryptoPro
  52. Методы объекта сертификата
  53. Примеры
  54. Тэг script (UMD)
  55. Angular (ES Modules + Typescript)
  56. React (ES Modules + JavaScript)
  57. Миграция с версии 1 на 2
  58. Установка КриптоПРО ЭЦП browser plugin в Linux
  59. Настройка плагина для Firefox (до версии 52)
  60. Зачем мне этот пакет?
  61. Проверка работы примеров с React и Angular
  62. Проверка работы примеров с React и Angular
  63. Crypto-pro’s People
  64. crypto-pro’s Issues
  65. Неверный тип возвращаемого значения getAlgorithm
  66. Поддержка установки через Bower
  67. Проверка открепленной подписи и подписанного файла.
  68. Есть ли возможность подписать XML
  69. Не видит сертификаты с USB накопителя
  70. Создание открепленной подписи для файла
  71. переход с createSignature на createAttachedSignature
  72. Планируются ли новые методы?
  73. Например
  74. Возвращать сообщения об ошибках с кодом
  75. Экспорт сертификата с приватным ключом
  76. Возможно ли декодировать dataBase64 c помощью подписи?
  77. Uncatched Exception in Promice (“The operation was canceled by the user. (0x000004C7)”)
  78. Ошибка на production (Ошибка обработки сертификатов: t. Item is not a function)
  79. Пустой файл при извлечении из прикрепленной подписи
  80. метод getCertList не работает после минификации с помощью UglifyJs
  81. КриптоПРО ЭЦП Browser Plug-In не доступен
  82. Запуск Angular примера в IE 11
  83. Ошибка синтаксиса при подключении cryptopro на internet explorer
  84. Ошибка создание отсоединенной подписи
  85. реализация подписи в браузере с помощью Angular
  86. Контейнеры с сертификатами на носителях
  87. Подпись нешифрованных документов
  88. Сборка проекта в минифицированной версии в одном файле
  89. Не получается подписать файл через createDetachedSignature
  90. Валидация подписи
  91. Синтаксическая ошибка internet explorer 10
  92. Подписание файла в Angular
  93. Для чего здесь вычисляется hash по ГОСТ Р 34. 11-94 для строки: “abc” ?
  94. Ошибка CSP “The parameter is incorrect (0x80070057)” на версии cades “2. 13642”
  95. Реализация CoSign планируется?
  96. Подписание в формате XADES
  97. XADES формат подписи
  98. Вычисление hash
  99. При попытке запустить билд приложения в ie, приложение крашится
  100. Ошибка при проверке подписи
  101. Отделенная подпись не создается.
  102. Почему подписать можно только base64
  103. Ошибка “Плагин недоступен” в консоли IE 11 и Chrome
  104. Проверка подписи
  105. Зачем мне этот пакет?
  106. Установка
  107. Примеры
  108. Тэг script (UMD)
  109. Angular (ES Modules + Typescript)
  110. React (ES Modules + JavaScript)
  111. Хуже уже наверное некуда
  112. Установка
  113. API
  114. Методы объекта cryptoPro
  115. Методы объекта сертификата
  116. Установка КриптоПРО CSP в Linux / OSX
  117. CryptoPro
  118. Проверка пакета перед публикацией в NPM
  119. Установка сертификатов в Linux

cryptopro-node-cades

Модуль Node.js, используемый для работы с КриптоПро библиотекой.
Данный модуль на текущий момент был протестирован только на Node.Js версии 14.17 и на операционной системе Ubuntu 20.04. Версия Node.Js должна поддерживать Node-API.

Установка

    • lsb-cprocsp-base;
    • lsb-cprocsp-rdr-64;
    • lsb-cprocsp-kc1-64;
    • lsb-cprocsp-pkcs11-64;
    • lsb-cprocsp-capilite-64;
    • lsb-cprocsp-devel – требуется только для сборки node модуля из исходников;
    • lsb-cprocsp-ca-certs – корневые сертификаты и сертификаты промежуточных УЦ. Требуются для теста;
  1. В стандартных пакетах отсутствуют некоторые файлы, которые нужно взять из архива pycades по ссылке.
    Инструкия по установке pycades со всеми необходимым ссылками, указанными выше, находится по ссылке.
    Саму pycades собирать не нужно!

  2. В проект cryptopro-node-cades в папку src скопировать из архива pycades:

    • файл cpstldll.h;
    • каталог cplib;
  3. В каталог /opt/cprocsp/include/pki/atl скопировать папку /opt/cprocsp/include/reader

Сборка

В каталоге проекта выполнить npm install
В случае успешной сборки появится файл build/Release/NodeCades.node

Использование модуля

Пример использования модуля находится в файле test/index.js.
Для его корректной работы необходимо прописать отпечаток предварительно установенного сертификата в переменной testCertificateThumbprint

Для использования модуля в других проектах достаточно скопировать файл NodeCades.node в нужный проект и подключить его директивой require(‘./NodeCades.node’);

nodeCryptopro

Node.js package to use Cryptopro.ru functionality

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

На данный момент используется версия КриптоПро CSP 4.0 R2.

Ubuntu

npm install node-cryptopro

Windows

npm install –global –production windows-build-tools

npm install node-cryptopro

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

Ubuntu

  1. Создание контейнера и генерация пары закрытого/открытого ключа в хранилище:

/opt/cprocsp/bin/amd64/csptest -keyset -newkeyset -cont ‘\.\HDIMAGE\containerName’ -provtype 75 -provider “Crypto-Pro GOST R 34.10-2012 KC1 CSP”

  1. Создание запроса на получение сертификата:
  1. Отправить запрос:

/opt/cprocsp/bin/amd64/certmgr -inst -store umy -file containerName.cer -cont ‘\.\HDIMAGE\containerName’

Компиляция. so/. dll библиотеки

Ubuntu

sudo dpkg -i lsb-cprocsp-devel_4.0.0-4_all.deb

  1. Установить переменные окружения:

eval `./setenv.sh –64`

  1. Скомпилировать:

make -f MakeNodeCryptopro

Windows

  1. Установить переменные окружения:

set PATH=%PATH%C:\Program Files (x86)\Crypto Pro\SDK\include

set INCLUDE=%INCLUDE%C:\Program Files (x86)\Crypto Pro\SDK\include

set LIBPATH=%LIBPATH%C:\Program Files (x86)\Crypto Pro\SDK\lib\amd64

set LIBPATH=%LIBPATH%C:\Program Files (x86)\Crypto Pro\SDK\lib

  1. Скомпилировать:

cl.exe /D_USRDLL /D_WINDLL nodeCryptopro.c /link /DLL /OUT:nodeCryptopro.dll

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

Вниманию пользователей браузеров на основе ChromiumДля стабильной работы браузерного расширения рекомендуется обновить браузер до последней версии (104+). Причина описана на форуме.

Для работы плагина выполните следующие шаги

1 Установите криптопровайдер

Для создания и проверки электронных подписей по алгоритмам ГОСТ требуется обязательная установка криптопровайдера, поддерживающего ГОСТ (мы рекомендуем КриптоПро CSP).

Скачать КриптоПро CSP

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

Приложение осуществляет взаимодействие веб-страниц в вашем браузере с криптопровайдером в операционной системе и предназначено для создания и проверки электронной подписи на веб-страницах. Рекомендуем воспользоваться инструкцией по установке

Скачать КриптоПро ЭЦП Browser plug-in

3 Проверьте работу установленного плагина

Чтобы убедиться, что всё установлено верно и все элементы системы надёжно взаимодействуют, мы создали специальную площадку для тестирования и проверки создания электронной подписи.

Проверить работу плагина

Описание принципов работы плагина

node js криптопро

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

  • Яндекс.Браузер
  • Internet Explorer
  • Microsoft Edge (на базе Chromium версии 104+)
  • Mozilla Firefox
  • Google Chrome (в том числе Chromium-Gost. На базе Chromium версии 104+)
  • Apple Safari
  • Opera

node js криптопро

Поддерживаемые операционные системы:

  • Microsoft Windows (инструкция по установке);
  • Linux (инструкция по установке);
  • Apple MacOS (инструкция по установке).

КриптоПро ЭЦП Browser plug-in позволяет подписывать различные типы данных:

  • электронный документ;
  • данные веб-формы;
  • файл, загруженный с компьютера пользователя;
  • текстовое сообщение и т.п.

С точки зрения бизнес-функций, плагин позволяет использовать ЭП:

  • на клиентских порталах;
  • в системах интернет-банкинга;
  • в электронных офисах с доступом через web и т.п.

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

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

  • доказательство момента подписи документа и действительности сертификата ключа подписи на этот момент;
  • отсутствие необходимости сетевых (онлайн) обращений при проверке подписи;
  • архивное хранение электронных документов.

Создание и проверка подписи происходят на стороне пользователя. При создании подписи с помощью КриптоПро ЭЦП Browser plug-in, электронная подпись может быть либо добавлена к подписываемым данным (присоединенная ЭП), либо создана отдельно (отделенная ЭП).

КриптоПро ЭЦП Browser plug-in распространяется бесплатно (лицензионное соглашение).


На нашем сайте доступна демо-страница для пробной работы с КриптоПро ЭЦП Browser plug-in. Полная инструкция по установке доступна по ссылке.

Скачать актуальную версию КриптоПро ЭЦП Browser plug-in:

  • версия 2.0 для пользователей (автоматическая загрузка версии плагина, соответствующей Вашей ОС)
    • Актуальная, развивающаяся версия.
    • Поддерживает работу с алгоритмами ГОСТ Р 34.10/11-2012 (при использовании с КриптоПро CSP 4.0 и выше).
    • Для Microsoft Windows совместима с КриптоПро CSP версии 3.6 R4 и выше, для других ОС – с КриптоПро CSP версии 4.0 и выше.
    • Компоненты КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0, входящие в данную версию, не принимают лицензию от версий 1.x.
    • Для работы в Firefox версии 52 и выше требуется дополнительно установить расширение для браузера.
  • все версии для разработчиков (полный комплект дистрибутивов КриптоПро ЭЦП Browser plug-in).

Подробное описание КриптоПро ЭЦП Browser plug-in приведено в Руководстве разработчика КриптоПро ЭЦП SDK.

    • Printer-friendly versionPrinter-friendly version

    License
    NPM version
    NPM downloads
    Build Status

    cryptoPro

    Асинхронный JavaScript API для работы с КриптоПРО ЭЦП Browser Plug-In

    Это форк проекта vgoma/crypto-pro

    API форка отличается от оригинала: внимательно читайте README

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

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

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

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

    Установка

    npm install crypto-pro-js
    bower install webmasterskaya/crypto-pro-js

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

    <div dir="auto" data-snippet-clipboard-copy-content="

    window.cryptoPro.getUserCertificates()
    .then(function (certificates) {
    //…
    })
    .catch(function (error) {
    //…
    });
    “>

     =""
    
    
        
        
      
        
        
      
    

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

    {
    let certificates: Certificate[];

    try {
    certificates = await getUserCertificates();
    } catch(error) {
    // …
    }
    })();”>

          
    
       
       : 
    
       
           
        
        
      
    

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

    • Promise
    • Array.prototype.find

    API

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

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

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

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

    Поддерживаемые СКЗИ

    КриптоПРО CSP (v4.0+)

    Примеры

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

    Тэг script (UMD)

     examples/script-tag
    npm i
    npm start

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

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

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

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

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

     examples/script-tag
    npm i
    npm link ../../
    npm start

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

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

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

    Читайте также:  Подписать документ или файл электронной подписью - как поставить ЭЦП

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

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

    npm run package
    mv package ..

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

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

     examples/script-tag
    npm link ../../../package

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

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

     ../../../package
    npm unlink

    Лицензия

    Поддерживаемые СКЗИ

    КриптоПРО CSP (v4.0+) рекомендуется использование только сертифицированных версий. Инструкция по установке:

    • Linux / OSX
    • (в Windows следуйте указаниям программы-установщика)

    КриптоПРО ЭЦП browser plug-in (v2.0.12438+).

    Инструкция по установке плагина в Linux. В Windows и OSX следуйте указаниям программы-установщика.

    Инструкция по установке сертификатов в систему для Linux / OSX.

    Поддерживаемые СКЗИ

    КриптоПРО CSP (v4.0+) рекомендуется использование только сертифицированных версий. Инструкция по установке:

    • Linux / OSX
    • (в Windows следуйте указаниям программы-установщика)

    КриптоПРО ЭЦП browser plug-in (v2.0.12438+).

    Инструкция по установке плагина в Linux. В Windows и OSX следуйте указаниям программы-установщика.

    Инструкция по установке сертификатов в систему для Linux / OSX.

    На самом деле всё куда хуже

    Публичная кадастровая карта, точнее её бэкенд, работает на каком то по мировым меркам ноунеймовом сервере “GIS WebService SE” (на Эльбрусах ещё поди запущен) от КБ Панорама – разработчики всей отечественной картографии, на софте которых и делается ЕЭКО.

    Сервер этот (ну насколько я помню, ПКК то лежит опять) генерирует растровые тайлы самой кадастровой карты, ЕЭКО и других слоёв. И все юзеры просто берут ссылки на эти растровые тайлы и подгружают их в свои ГИС, чтобы работать над своими проектами. Либо массово качают их на свои сервера – по традиции – поэтому мощности инфраструктуры не хватает и часто ПКК не работает.

    И это вместо того чтобы сделать нормальные открытые всем общепринятые векторные тайлы через нормальные API. Кстати, API у них есть, но отродясь не работало, точнее они вроде дают доступ только государственным сервисам, по IP наверное.

    Кстати о тайлах – экскурс в историю – 10 лет назад предыдущая версия обновленных карт Генштаба (до того работали с их сканами) опять же в виде растровых тайлов была выложена на сайте maps.ggc.ru – оттуда она была быстро удалена, но до того успешно скачана энтузиастами и выложена на торрент-трекеры и личные сервера энтузиастов – так и жили.

    Это чтобы не связываться с государственными бюрократами – они для заказа векторных листов (!) карт использовали сервис, генерировавший PDF заявления, которые нужно было слать им на мейл – и это происходило до недавнего времени! А как сейчас не знаю, я не хочу покупать “КриптоПро”.

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

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

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

      В версии 1:

      .CryptoPro.call();
      

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

      .cryptoPro.getSystemInfo();
      

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

       { getSystemInfo }  ;
      
      getSystemInfo();
      

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

      dpkg -l | grep cprocsp-rdr
      

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

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

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

      Начну с того, что всё плохо

      В конце прошлого года была наконец введена в эксплуатацию государственная информационная система ведения Единой электронной картографической основы (ЕЭКО) – нормальные современные актуальные карты.

      Также Публичная кадастровая карта (ПКК) получила государственную электронную картографическую подложку – с тех пор их сайт редко работает.

      Параллельно появился еще вот этот неясный сервис типа магазина открытых данных, его подложку можно спутать с ЕЭКО, однако это не она, здесь карты не обновлены и (умышленно) куда менее детальны.

      Однако, для получения информации в векторном виде оператор ЕЭКО – “Центр геодезии, картографии и инфраструктуры пространственных данных”, ссылаясь на законодательство, требует использовать дорогостоящие средства криптозащиты “КриптоПро” – вот полюбуйтесь:

      В рамках реализации требований по защите информации в соответствии с Федеральными законами № 149-ФЗ от 27.07.2010 г. «Об информации, информационных технологиях и о защите информации», № 152-ФЗ от 27.07.2006 г. «О персональных данных» и приказа ФСТЭК России от 11 февраля 2013 г. № 17 «Об утверждении Требований о защите информации, не составляющей государственную тайну, содержащейся в государственных информационных системах», для защиты передачи конфиденциальной информации, в том числе персональных данных, необходимо для подключения к ресурсам ГИС ФППД и ГИС ЕЭКО необходимо использовать защищенное подключение.

      Но в приведенных законах нет такой строчки, а в приказе ФСТЭК написано прямо противоположное:

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

      ЕЭКО создаётся и предоставляется на основе следующего закона. И кто мешает использовать общедоступную криптографию? Для меня здесь очевиден преступный сговор “Центра геодезии, картографии и ИПД” с “КриптоПро”.

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

      Ubuntu

      1) Создание контейнера и генерация пары закрытого/открытого ключа в хранилище:

      /opt/cprocsp/bin/amd64/csptest -keyset -newkeyset -cont ‘\.\HDIMAGE\containerName’ -provtype 75 -provider “Crypto-Pro GOST R 34.10-2012 KC1 CSP”

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

      /opt/cprocsp/bin/amd64/cryptcp -creatrqst -dn “E=requesteremail@mail.ru, C=RU, CN=localhost, SN=company” -nokeygen -both -ku -cont ‘\.\HDIMAGE\containerName’ containerName.req

      3) Отправить запрос:

      http://www.cryptopro.ru/certsrv/

      4) Получить сертификат

      5) Установить сертификат:

      /opt/cprocsp/bin/amd64/certmgr -inst -store umy -file containerName.cer -cont ‘\.\HDIMAGE\containerName’

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

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

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

      /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
      
          CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
              AcquireContext: OK. HCRYPTPROV: 16188003
              \\.\FLASH\ivanov
              \\.\FLASH\petrov
              \\.\FLASH\sidorov
              \\.\FLASH\vasiliev
              \\.\FLASH\smirnov
              OK.
              Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec
      

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

      /opt/cprocsp/bin/amd64/csptest -keycopy -contsrc  -contdest 
      
          CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
          CryptAcquireContext succeeded.HCRYPTPROV: 38556259
          CryptAcquireContext succeeded.HCRYPTPROV: 38770755
          Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
          [ErrorCode: 0x00000000]
      

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

      /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
      
          CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
          AcquireContext: OK. HCRYPTPROV: 34554467
          \\.\FLASH\ivanov
          \\.\FLASH\petrov
          \\.\FLASH\sidorov
          \\.\FLASH\vasiliev
          \\.\FLASH\smirnov
          \\.\HDIMAGE\sidor
          OK.
          Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
          [ErrorCode: 0x00000000]
      

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

      /opt/cprocsp/bin/amd64/certmgr -inst -cont 
      

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

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

      /opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file <файл сертификата>.crt
      

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

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

      CryptoPro

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

      ChromeFirefoxIEOpera
      v45+ с расширением CryptoPro Extension for CAdES Browser Plug-inv43+. Начиная с версии 52, с расширениемv9+ с установленным КриптоПро ЭЦП Browser plug-inv40+ с расширением CryptoPro Extension for CAdES Browser Plug-in

      demo.gif
      gosuslugi-demo-result.png
      gosuslugi-signature-types.png

      • cryptoPro
      • Тем, кто хочет помочь
      • Полезная информация
      • Лицензия

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

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

      npm run package
      mv package ..
      

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

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

       examples/script-tag
      npm link ../../../package
      

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

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

       ../../../package
      npm unlink
      

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

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

      npm i
      

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

      npm start
      

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

       examples/script-tag
      npm i
      npm link ../../
      npm start
      

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

      .

      Надеюсь, не сильно наврал, я ведь просто энтузиаст, хз чего молчат картографы и прочие инженеры. Будет прекрасно, если кто-нибудь раздует это в СМИ.

      Only registered users can participate in poll. Log in, please.

      Ну что, распирает гордость за державу?

      60 users voted.

      33 users abstained.

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

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

      npm i
      

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

      npm start
      

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

       examples/script-tag
      npm i
      npm link ../../
      npm start
      

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

      Установка КриптоПРО ЭЦП browser plugin в Linux

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

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

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

      apt-get update && apt-get install alien
       cades_linux_amd64
      alien *
      

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

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

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

      ls -la /opt/cprocsp/lib/amd64 | grep libnpcades
      
          lrwxrwxrwx 1 root root      19 Окт 21 12:33 libnpcades.so -> libnpcades.so.2.0.0
          lrwxrwxrwx 1 root root      19 Окт 21 12:33 libnpcades.so.2 -> libnpcades.so.2.0.0
          -rwxr-xr-x 1 root root 2727236 Июн  8 14:33 libnpcades.so.2.0.0
      

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

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

       /usr/lib/mozilla/plugins
      
      cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./
      ldd libnpcades.so.2.0.0
      
      cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./libnpcades.so
      ldd libnpcades.so
      

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

      Читайте также:  Некоторые сайты не включают плагин Cryptopro

      Компиляция. so/. dll библиотеки

      Ubuntu

      1) Установить lsb-cprocsp-devel из дистрибутива КриптоПро CSP или КриптоПро OCSP SDK (https://www.cryptopro.ru/products/pki/ocsp/sdk/downloads), например так:

      cd linux-amd64_deb

      sudo dpkg -i lsb-cprocsp-devel_4.0.0-4_all.deb

      2) Установить переменные окружения:

      eval `./setenv.sh –64`

      3) Скомпилировать:

      make -f MakeNodeCryptopro

      Windows

      1) Установить КриптоПро OCSP SDK (https://www.cryptopro.ru/products/pki/ocsp/sdk/downloads).

      2) Установить переменные окружения:

      set PATH=%PATH%C:\Program Files (x86)\Crypto Pro\SDK\include

      set INCLUDE=%INCLUDE%C:\Program Files (x86)\Crypto Pro\SDK\include

      set LIBPATH=%LIBPATH%C:\Program Files (x86)\Crypto Pro\SDK\lib\amd64

      set LIBPATH=%LIBPATH%C:\Program Files (x86)\Crypto Pro\SDK\lib

      3) Скомпилировать:

      cl.exe /D_USRDLL /D_WINDLL nodeCryptopro.c /link /DLL /OUT:nodeCryptopro.dll

      API

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

      • getUserCertificates – возвращает список сертификатов, доступных пользователю в системе
      • getCertificate – возвращает сертификат по отпечатку
      • createAttachedSignature – создает совмещенную (присоединенную) подпись сообщения
      • createDetachedSignature – создает отсоединенную (открепленную) подпись сообщения
      • createXMLSignature – создает XML подпись для документа в формате XML
      • createHash – создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
      • createSignature – создает подпись сообщения

        Является устаревшим и будет убран из будущих версий.
        Используйте “createAttachedSignature” и “createDetachedSignature”.

      • getSystemInfo – возвращает информацию о CSP и плагине
      • isValidSystemSetup – возвращает флаг корректности настроек ЭП на машине
      • execute – компилирует и выполняет переданную функцию для доступной браузерной среды (синхронной/асинхронной)

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

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

      • isValid – возвращает флаг действительности сертификата
      • getCadesProp – возвращает указанное внутренее свойство у сертификата в формате Cades
      • exportBase64 – возвращает сертификат в формате base64
      • getAlgorithm – возвращает информацию об алгоритме сертификата
      • getOwnerInfo – возвращает расшифрованную информацию о владельце сертификата
      • getIssuerInfo – возвращает расшифрованную информацию об издателе сертификата
      • getExtendedKeyUsage – возвращает ОИД’ы сертификата
      • getDecodedExtendedKeyUsage – возвращает расшифрованные ОИД’ы
      • hasExtendedKeyUsage – проверяет наличие ОИД’а (ОИД’ов) у сертификата

      Примеры

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

      Тэг script (UMD)

       examples/script-tag
      npm i
      npm start
      

      Angular (ES Modules + Typescript)

       examples/angular
      npm i
      

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

      npm start
      

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

      npm run build
      npm run serve
      

      React (ES Modules + JavaScript)

       examples/react
      npm i
      

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

      npm start
      

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

      npm run build
      npm run serve
      

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

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

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

        В версии 1:

        .CryptoPro.call();
        

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

        .cryptoPro.getSystemInfo();
        

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

         { getSystemInfo }  ;
        
        getSystemInfo();
        

        Установка КриптоПРО ЭЦП browser plugin в Linux

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

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

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

        apt-get update && apt-get install alien
         cades_linux_amd64
        alien *
        

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

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

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

        ls -la /opt/cprocsp/lib/amd64 | grep libnpcades
        
            lrwxrwxrwx 1 root root      19 Окт 21 12:33 libnpcades.so -> libnpcades.so.2.0.0
            lrwxrwxrwx 1 root root      19 Окт 21 12:33 libnpcades.so.2 -> libnpcades.so.2.0.0
            -rwxr-xr-x 1 root root 2727236 Июн  8 14:33 libnpcades.so.2.0.0
        

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

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

         /usr/lib/mozilla/plugins
        
        cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./
        ldd libnpcades.so.2.0.0
        
        cp /opt/cprocsp/lib/amd64/libnpcades.so.2.0.0 ./libnpcades.so
        ldd libnpcades.so
        

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

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

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

        example-umd.gif

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

        example-esm.gif

        Проверка работы примеров с React и Angular

        React и Angular используют версию сборки пакета в формате ES модулей из директории lib/.
        Для их запуска необходимо сначала собрать пакет выполнив:

        npm run build
        

        После этого из папки examples/angular или examples/react залинковать пакет:

         examples/angular
        npm i
        npm link ../../
        

        И запустить пример в одном из двух режимов. В режиме разработки:

        npm start
        

        или в режиме продакшн:

        npm run build
        npm run serve
        

        Проверка работы примеров с React и Angular

        React и Angular используют версию сборки пакета в формате ES модулей из директории lib/.
        Для их запуска необходимо сначала собрать пакет выполнив:

        npm run build
        

        После этого из папки examples/angular или examples/react залинковать пакет:

         examples/angular
        npm i
        npm link ../../
        

        И запустить пример в одном из двух режимов. В режиме разработки:

        npm start
        

        или в режиме продакшн:

        npm run build
        npm run serve
        

        Crypto-pro’s People

        crypto-pro’s Issues

        Неверный тип возвращаемого значения getAlgorithm

        Дублирую для пул реквеста, а то потерялся.

        Поддержка установки через Bower

        Хорошая библиотека, но если было бы неплохо иметь возможность установки через Bower, т.к. нужно просто получить готовую версию и подключить её через тег script.

        Проверка открепленной подписи и подписанного файла.

        Добрый день.
        Подскажите пожалуйста, я так понял в реализации для Angular нет функционала проверки открепленнойподписи. Планируется ли добавление данного функционала?
        Заранее спасибо.

        Есть ли возможность подписать XML

        Добрый день. Я хотел бы узнать, возможно ли на данный момент подписать XML текущей версией библиотеки?
        Судя по README, функция для подписания XML была удалена

        Не видит сертификаты с USB накопителя

        Тогда как на оф сайте просто:
        cadesStore.Open()

        Что можете посоветовать?

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

        Добрый день, Виталий.

        Изучаю Вашу библиотеку. Отличная библиотека, очень удобная в использовании.
        Подскажите пожалуйста, можно ли при помощи Вашей библиотеки создавать открепленную подпись для файла?

        Я такую возможность, к сожалению, не нашел в описанных методах объекта cryptoPro. И если такая возможность есть, то как ее можно реализовать?

        За ранее спасибо.

        переход с createSignature на createAttachedSignature

        сейчас на проекте использую createSignature (версия 2.3.0), метод отмечен устаревшим , нужно использовать createAttachedSignature или createDetachedSignature
        при работе с createSignature в качестве второго параметра messageHash передаю base64 (сделанный из pdf-файла), третий параметр detachedSignature – true
        при изменении на createDetachedSignature и использовании теже данных параметров thumprint, messageHash получаю “Ошибка при установке хеша”
        что делаю не так? спасибо

        Планируются ли новые методы?

        • Планируется ли добавление новых методов для получения сертификатов что находятся на носителях\токенах\контейнерах по аналогии с методом getUserCertificates?

        Например

        • getContainerCertificates или getSmartCardUserCertificates

        Или отсутствие их реализации имеет причины?

        Возвращать сообщения об ошибках с кодом

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

        Экспорт сертификата с приватным ключом

        Есть ли какой-нибудь способ экспортировать сертификат вместе с приватным ключом? Метод exportBase64 экспортирует только публичную часть сертификата, верно?
        Мне необходимо сделать экспорт приватного ключа для последующего импорта на сервер.

        Возможно ли декодировать dataBase64 c помощью подписи?

        Спасибо за проект!

        Скажите, есть ли возможность декодировать данные в dataBase64, используя подпись? Или можно ли вытащить приватный ключ сертификата и декодировать сообщение самому?

        Uncatched Exception in Promice (“The operation was canceled by the user. (0x000004C7)”)

        Привет, спасибо за вашу обертку над cadesplugin.

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

        dialog

        Если в этом диалоговом окне кликнуть нет, то вылетает исключение, вот такое:

        Stacktrace screenshot

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

        Пример (утрированный) в котором эксепшн упорно вылетает наружу:

        console.log(list), e =>console.log(e))
        .catch(e => console.log(”));
        } catch (e) {
        console.log(e)
        }”>
        try {
          CryptoPro.call('getCertsList')
            .then(list =>console.log(list), e =>console.log(e))
            .catch(e => console.log(''));
        } catch (e) {
          console.log(e)
        }
        

        при использовании async/await результат тот же самый

        Можно ли в клиентском коде обработать ситуацию когда пользователь не разрешил действия с сертификатами?

        Ошибка на production (Ошибка обработки сертификатов: t. Item is not a function)

        На dev все работает, как надо. На проде вылетает ошибка при попытке получить список сертификатов:

        Uncaught (in promise) Ошибка обработки сертификатов: t.Item is not a function

        Подскажите, что можно сделать с этим
        Спасибо

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

        Здравствуйте. При создании прикрепленной подписи и при ее верификации через cryptcp -verify -nochain ‘файл_подписи’ ‘выходной_файл’ на выходе получаем пустой файл, хотя через cryptcp проверка подписи происходит успешно. Можете ли Вы подтвердить такое поведение или это ошибка на нашей стороне? Спасибо.

        метод getCertList не работает после минификации с помощью UglifyJs

        При вызове getCertList падает с ошибкой: t.Item is not a function. По факту Item при этом является промисом.

        Окружение:
        Node: 8.11.1
        Webpack: 2.7.0
        UglifyJs: 2.8.29

        КриптоПРО ЭЦП Browser Plug-In не доступен

        Здравствуйте. Скачал папку “example”, в Google Chrome 56.0.2924.87, при локальном запуске получаю такую ошибку:

        В IE 11 работает.

        Запуск Angular примера в IE 11

        Склонировал проект. Запустил по readme пример на ангуляре. В хроме все ок, а в IE 11 ошибка в консоли

        перешел в указанную строку

        IE же не понимает class. Что делать в этой ситуации?

        Ошибка синтаксиса при подключении cryptopro на internet explorer

        Не понимаю в чем проблема в js не очень разбираюсь.
        Не работает только в internet explorer 10-11

        Ошибка создание отсоединенной подписи

               let signature;
                try {
                    signature =
                        yield cadesSignedData.SignHash(cadesHashedData, cadesSigner, cadesplugin.CADESCOM_PKCS7_TYPE);
                }
                catch (error) {
                    console.error(error);
                    throw new Error(_extractMeaningfulErrorMessage_1._extractMeaningfulErrorMessage(error) || 'Ошибка при подписании данных');
                }
        

        По данной ссылке
        Демо плагин создает.

        Установлена последняя версия CSP, на ранних работает.

        реализация подписи в браузере с помощью Angular

        1. В консоли появляется ошибка

        crypto-pro.js:4557 GET chrome-extension://invalid/ net::ERR_FAILED

        Не подскажете причину? В остальном, пакет рабочий.
        2. Есть ли метод для проверки подписи, который идет в оф. документации?

        function Verify(sSignedMessage, dataInBase64) {
                return new Promise(function (resolve, reject) {
                    cadesplugin.async_spawn(function* (args) {
                        var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
                        try {
                            // Значение свойства ContentEncoding должно быть задано
                            // до заполнения свойства Content
                            yield oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
                            yield oSignedData.propset_Content(dataInBase64);
                            yield oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
                        } 
                        catch (err) {
                            var e = cadesplugin.getLastError(err);
                            alert("Failed to verify signature. Error: " + e);
                            return args[1](e);
                        }
                        return args[0]();
                    }, resolve, reject);
                });
            }
        

        Контейнеры с сертификатами на носителях

        Подпись нешифрованных документов

        Подскажите, пожалуйста, есть ли возможность подписывать строки без перевода их в base64?
        Если да, то можно пример. К примеру, мне нужно подписать xml-файл.

        Читайте также:  Как отозвать сертификат ЭЦП и казначейство в 2020 и 2021 году

        Заметил, что проблема появляется, только если в строке есть некоторые символы (например ‘_’ или ‘&lt;’. Ошибка: “Не удалось установить настройки для подписи: Internal error. (0x80092002)”

        Сборка проекта в минифицированной версии в одном файле

        Не получается подписать файл через createDetachedSignature

        Мы хотим подписывать файлы, которые лежат у нас в БД.
        Для этого мы условно сделали readonly textarea, туда из БД вставили в base64 бинарный код файла.
        В createDetachedSignature передаем thumbprint сертификата и хеш, в который мы положили бинарные данные файла после дешифровки из base64 через buffer.from(binaryContent, ‘base64’).toString().

        Вещи типа “hello world” подписать получается, а вот файлы посложнее типа ПДФ файла подписать не получается и приходится отказываться от работы с этой замечательной библиотекой.
        В обычном примере от крипто про если мы передаем этот base64 с работающим параметром CADESCOM_BASE64_TO_BINARY всё работает, а тут почему-то не получается.

        Есть идеи почему так?

        Валидация подписи

        Добрый день. Не увидел в API как сделать валидацию подписи?

        Синтаксическая ошибка internet explorer 10

        Подписание файла в Angular

        Здравствуйте!
        Подскажите как реализовать создание отделённой подписи для файла? Надо весь файл в message записать и далее как в примере!?

        Для чего здесь вычисляется hash по ГОСТ Р 34. 11-94 для строки: “abc” ?

        Привет! Подскажи пожалуйста, для чего нам этот вычисленный хеш на 13стр ? Почему мы просто не передаем “abc” в window.btoa(hash);

        Ошибка CSP “The parameter is incorrect (0x80070057)” на версии cades “2. 13642”

        Есть проблемы с подписанием XML отделенной подписью.

        Окружение:
        OS Astra Linux (Smolensk) 1.6 64bit
        Browser Firefox 72.0.1 (64bit)
        cadesVersion 2.0.13642
        cspVersion 5.0.11998

        1. Получаем ArrayBuffer из XML файла
        2. Передаем ArrayBuffer в функцию createHash
        3. Полученный хеш и отпечаток ЭЦП передаем в функцию createDetachedSignature

        Результат:
        Подпись не создана, в консоли браузера ошибка:
        “The parameter is incorrect (0x80070057)”

        Ожидаемый результат:
        Получаем подпись в формате PKCS7

        Дополнительная информация:
        Пробовали подписывать на MacOS 10.15.4 на cadesVersion 2.0.13642 (сертифицированная), получаем ошибку.
        Пробовали подписывать на MacOS 10.15.4 на cadesVersion 2.0.14071, ошибки нет, подпись работает.
        Версии CSP на MacOS и на Astra Linux идентичные.

        Возможно Вы сталкивались с похожими проблемами, что можно предпринять в данном случае ? Не уверен что мы можем использовать версию 2.0.14071 т.к. она не сертифицирована.

        Готов предоставить любую дополнительную информацию которая может потребоваться для разрешения данной проблемы.

        UPD:
        Пробовали на версии CSP “5.0.11944”, тоже получаем ошибку.

        Реализация CoSign планируется?

        Подписание в формате XADES

        Возможно ли сейчас?

        XADES формат подписи

        Могу ли я переиспользовать метод createXMLSignature с прокидыванием флага CADESCOM_XADES_BES?

        Вычисление hash

        Виталий, здравствуйте.
        Подскажите, можно ли, используя, Вашу библиотеку получить хэш файла?

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

        Если установить пакет как обычную зависимость в проект npm i crypto-pro, а потом попытаться собрать проект при помощи вебпака 4 + бабеля 7, в билд попадают нотации es6 – это class и yield. Думается мне, это можно пофиксить, если в package.json вместо “main”: “./lib/crypto-pro.js” и “types”: “./lib/crypto-pro.d.ts” записать “main”: “./dist/crypto-pro.js” и “types”: “./dist/crypto-pro.d.ts”, потому что при копировании файлов из dist в lib, проект собирается без ошибок и запускается в ie

        Ошибка при проверке подписи

        Отделенная подпись не создается.

        Пробую библиотеку на Ubuntu, Chrome.
        Пробую пример script-tag.
        Отделенная подпись не создается. Хэш создается.

        Информация о системе:

        Почему подписать можно только base64

        Не могли бы вы мне подсказать по поводу подписи данных. На сколько я понял, метод createSignature ожидает данные для подписи только в base64 формате. А можно как-то подписать просто строку, полученную, например, через JSON.stringify(data)?

        Ошибка “Плагин недоступен” в консоли IE 11 и Chrome

        • версии криптопровайдера: 4.0.9963, 5.0.11823
        • версии КриптоПро ЭЦП Browser plug-in: 2.0.13642, 2.0.14071

        Подключал по UMD из папки dist. Пробовал с разными полифилами, которые требуются, включая те, что в папке examples.
        В IE после открытия страницы никаких окон с Подтверждением доступа не всплывает. В консоли при обновлении страницы ошибка “Плагин недоступен”. Ничего не происходит.
        Информация о расширении:

        В Chrome при открытии страницы все ок: всплывает Подтверждения доступа, можно получить сертификаты (остальные методы не пробовал) после инициализации. Но при обновлении страницы окна не всплывают. В консоли ошибка “Плагин недоступен”.
        В консоли:

        1

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

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

        Реализация функции проверки ЭЦП.

        Из документации cadesplugin

            function VerifySignature(oHashedData, sSignedMessage) {
                // Создаем объект CAdESCOM.CadesSignedData
                var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
        
                // Проверяем подпись
                try {
                    oSignedData.VerifyHash(oHashedData, sSignedMessage, CADESCOM_CADES_BES);
                } catch (err) {
                    alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
                    return false;
                }
        
                return true;
            }
        
        

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

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

        example-umd.gif

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

        example-esm.gif

        Установка

        Для NPM:

        npm install crypto-pro
        

        Для Yarn:

        yarn add crypto-pro
        

        Для Bower:

        bower install crypto-pro
        

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

        
        
        

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

         { getUserCertificates, Certificate }  ;
        
        ( () => {
           certificates: Certificate[];
        
           {
            certificates =  getUserCertificates();
          } (error) {
            
          }
        })();
        

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

        • Promise
        • Array.prototype.find

        Примеры

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

        Тэг script (UMD)

         examples/script-tag
        npm i
        npm start
        

        Angular (ES Modules + Typescript)

         examples/angular
        npm i
        

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

        npm start
        

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

        npm run build
        npm run serve
        

        React (ES Modules + JavaScript)

         examples/react
        npm i
        

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

        npm start
        

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

        npm run build
        npm run serve
        

        Хуже уже наверное некуда

        Кроме того, в конце прошлого года Правительство РФ утвердило государственную программу «Национальная система пространственных данных». Премьером подписано, губернаторы там выступают, вице-премьер аж припёрся.

        Подрядчиком по проекту выбрана “PARMA Technologies Group” – новость. Эти же ребята делали картографические сервисы-мешапы по поиску дальневосточных и арктических гектаров – надальнийвосток.рф – а эта хрень вообще никогда нормально не работала. Сами они, видимо, не особо понимают как система должна выглядеть и работать, поэтому сейчас нанимают армию бизнес-аналитиков.

        Они, кстати, говорят, выходцы из одной местной мутной конторы PROGNOZ, и на них уже наезжает прокуратура – новость – большие СМИ почему-то вообще молчат об этой истории, хотя деньги вроде вертятся вполне приличные.

        Установка

        Для NPM:

        npm install crypto-pro
        

        Для Yarn:

        yarn add crypto-pro
        

        Для Bower:

        bower install crypto-pro
        

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

        
        
        

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

         { getUserCertificates, Certificate }  ;
        
        ( () => {
           certificates: Certificate[];
        
           {
            certificates =  getUserCertificates();
          } (error) {
            
          }
        })();
        

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

        • Promise
        • Array.prototype.find

        API

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

        • getUserCertificates – возвращает список сертификатов, доступных пользователю в системе
        • getCertificate – возвращает сертификат по отпечатку
        • createAttachedSignature – создает совмещенную (присоединенную) подпись сообщения
        • createDetachedSignature – создает отсоединенную (открепленную) подпись сообщения
        • createXMLSignature – создает XML подпись для документа в формате XML
        • createHash – создает хеш сообщения по ГОСТ Р 34.11-2012 256 бит
        • createSignature – создает подпись сообщения

          Является устаревшим и будет убран из будущих версий.
          Используйте “createAttachedSignature” и “createDetachedSignature”.

        • getSystemInfo – возвращает информацию о CSP и плагине
        • isValidSystemSetup – возвращает флаг корректности настроек ЭП на машине
        • execute – компилирует и выполняет переданную функцию для доступной браузерной среды (синхронной/асинхронной)

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

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

        • isValid – возвращает флаг действительности сертификата
        • getCadesProp – возвращает указанное внутренее свойство у сертификата в формате Cades
        • exportBase64 – возвращает сертификат в формате base64
        • getAlgorithm – возвращает информацию об алгоритме сертификата
        • getOwnerInfo – возвращает расшифрованную информацию о владельце сертификата
        • getIssuerInfo – возвращает расшифрованную информацию об издателе сертификата
        • getExtendedKeyUsage – возвращает ОИД’ы сертификата
        • getDecodedExtendedKeyUsage – возвращает расшифрованные ОИД’ы
        • hasExtendedKeyUsage – проверяет наличие ОИД’а (ОИД’ов) у сертификата

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

        dpkg -l | grep cprocsp-rdr
        

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

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

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

        CryptoPro

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

        ChromeFirefoxIEOpera
        v45+ с расширением CryptoPro Extension for CAdES Browser Plug-inv43+. Начиная с версии 52, с расширениемv9+ с установленным КриптоПро ЭЦП Browser plug-inv40+ с расширением CryptoPro Extension for CAdES Browser Plug-in

        demo.gif
        gosuslugi-demo-result.png
        gosuslugi-signature-types.png

        • cryptoPro
        • Тем, кто хочет помочь
        • Полезная информация
        • Лицензия

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

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

        npm run package
        mv package ..
        

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

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

         examples/script-tag
        npm link ../../../package
        

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

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

         ../../../package
        npm unlink
        

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

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

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

        /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
        
            CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
                AcquireContext: OK. HCRYPTPROV: 16188003
                \\.\FLASH\ivanov
                \\.\FLASH\petrov
                \\.\FLASH\sidorov
                \\.\FLASH\vasiliev
                \\.\FLASH\smirnov
                OK.
                Total: SYS: 0,020 sec USR: 0,060 sec UTC: 0,180 sec
        

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

        /opt/cprocsp/bin/amd64/csptest -keycopy -contsrc  -contdest 
        
            CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
            CryptAcquireContext succeeded.HCRYPTPROV: 38556259
            CryptAcquireContext succeeded.HCRYPTPROV: 38770755
            Total: SYS: 0,000 sec USR: 0,100 sec UTC: 14,920 sec
            [ErrorCode: 0x00000000]
        

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

        /opt/cprocsp/bin/amd64/csptest -keyset -enum_cont -fqcn -verifyc
        
            CSP (Type:80) v4.0.9009 KC1 Release Ver:4.0.9797 OS:Linux CPU:AMD64 FastCode:READY:AVX.
            AcquireContext: OK. HCRYPTPROV: 34554467
            \\.\FLASH\ivanov
            \\.\FLASH\petrov
            \\.\FLASH\sidorov
            \\.\FLASH\vasiliev
            \\.\FLASH\smirnov
            \\.\HDIMAGE\sidor
            OK.
            Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
            [ErrorCode: 0x00000000]
        

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

        /opt/cprocsp/bin/amd64/certmgr -inst -cont 
        

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

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

        /opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file <файл сертификата>.crt
        

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

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

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