Начнем с того, что у нас есть уже установленный 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 для того, чтоб они были доступны под суперпользователем.
- cryptopro-node-cades
- Установка
- Сборка
- Использование модуля
- nodeCryptopro
- Установка и настройка пакета
- Ubuntu
- Windows
- Использование
- Ubuntu
- Компиляция. so/. dll библиотеки
- Ubuntu
- Windows
- Для работы плагина выполните следующие шаги
- Описание принципов работы плагина
- cryptoPro
- Ошибка Параметр задан неверно. (0x80070057)
- Зачем мне этот пакет?
- Установка
- API
- Методы объекта cryptoPro
- Методы объекта сертификата
- Поддерживаемые СКЗИ
- Примеры
- Тэг script (UMD)
- Тем, кто хочет помочь
- Запуск режима разработки
- Запуск тестов
- Проверка пакета перед публикацией в NPM
- Лицензия
- Поддерживаемые СКЗИ
- Поддерживаемые СКЗИ
- На самом деле всё куда хуже
- Миграция с версии 1 на 2
- Установка КриптоПРО CSP в Linux / OSX
- Начну с того, что всё плохо
- Использование
- Ubuntu
- Установка сертификатов в Linux
- CryptoPro
- Проверка пакета перед публикацией в NPM
- Запуск режима разработки
- .
- Запуск режима разработки
- Установка КриптоПРО ЭЦП browser plugin в Linux
- Настройка плагина для Firefox (до версии 52)
- Компиляция. so/. dll библиотеки
- Ubuntu
- Windows
- API
- Методы объекта cryptoPro
- Методы объекта сертификата
- Примеры
- Тэг script (UMD)
- Angular (ES Modules + Typescript)
- React (ES Modules + JavaScript)
- Миграция с версии 1 на 2
- Установка КриптоПРО ЭЦП browser plugin в Linux
- Настройка плагина для Firefox (до версии 52)
- Зачем мне этот пакет?
- Проверка работы примеров с React и Angular
- Проверка работы примеров с React и Angular
- Crypto-pro’s People
- crypto-pro’s Issues
- Неверный тип возвращаемого значения getAlgorithm
- Поддержка установки через Bower
- Проверка открепленной подписи и подписанного файла.
- Есть ли возможность подписать XML
- Не видит сертификаты с USB накопителя
- Создание открепленной подписи для файла
- переход с createSignature на createAttachedSignature
- Планируются ли новые методы?
- Например
- Возвращать сообщения об ошибках с кодом
- Экспорт сертификата с приватным ключом
- Возможно ли декодировать dataBase64 c помощью подписи?
- Uncatched Exception in Promice (“The operation was canceled by the user. (0x000004C7)”)
- Ошибка на production (Ошибка обработки сертификатов: t. Item is not a function)
- Пустой файл при извлечении из прикрепленной подписи
- метод getCertList не работает после минификации с помощью UglifyJs
- КриптоПРО ЭЦП Browser Plug-In не доступен
- Запуск Angular примера в IE 11
- Ошибка синтаксиса при подключении cryptopro на internet explorer
- Ошибка создание отсоединенной подписи
- реализация подписи в браузере с помощью Angular
- Контейнеры с сертификатами на носителях
- Подпись нешифрованных документов
- Сборка проекта в минифицированной версии в одном файле
- Не получается подписать файл через createDetachedSignature
- Валидация подписи
- Синтаксическая ошибка internet explorer 10
- Подписание файла в Angular
- Для чего здесь вычисляется hash по ГОСТ Р 34. 11-94 для строки: “abc” ?
- Ошибка CSP “The parameter is incorrect (0x80070057)” на версии cades “2. 13642”
- Реализация CoSign планируется?
- Подписание в формате XADES
- XADES формат подписи
- Вычисление hash
- При попытке запустить билд приложения в ie, приложение крашится
- Ошибка при проверке подписи
- Отделенная подпись не создается.
- Почему подписать можно только base64
- Ошибка “Плагин недоступен” в консоли IE 11 и Chrome
- Проверка подписи
- Зачем мне этот пакет?
- Установка
- Примеры
- Тэг script (UMD)
- Angular (ES Modules + Typescript)
- React (ES Modules + JavaScript)
- Хуже уже наверное некуда
- Установка
- API
- Методы объекта cryptoPro
- Методы объекта сертификата
- Установка КриптоПРО CSP в Linux / OSX
- CryptoPro
- Проверка пакета перед публикацией в NPM
- Установка сертификатов в 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
– корневые сертификаты и сертификаты промежуточных УЦ. Требуются для теста;
В стандартных пакетах отсутствуют некоторые файлы, которые нужно взять из архива pycades по ссылке.
Инструкия по установке pycades со всеми необходимым ссылками, указанными выше, находится по ссылке.
Саму pycades собирать не нужно!В проект cryptopro-node-cades в папку src скопировать из архива pycades:
- файл
cpstldll.h
; - каталог
cplib
;
- файл
В каталог /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
- Создание контейнера и генерация пары закрытого/открытого ключа в хранилище:
/opt/cprocsp/bin/amd64/csptest -keyset -newkeyset -cont ‘\.\HDIMAGE\containerName’ -provtype 75 -provider “Crypto-Pro GOST R 34.10-2012 KC1 CSP”
- Создание запроса на получение сертификата:
- Отправить запрос:
/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
- Установить переменные окружения:
eval `./setenv.sh –64`
- Скомпилировать:
make -f MakeNodeCryptopro
Windows
Установить переменные окружения:
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
- Скомпилировать:
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 Проверьте работу установленного плагина
Чтобы убедиться, что всё установлено верно и все элементы системы надёжно взаимодействуют, мы создали специальную площадку для тестирования и проверки создания электронной подписи.
Проверить работу плагина
Описание принципов работы плагина
КриптоПро ЭЦП Browser plug-in легко встраивается и применим в любом из современных браузеров с поддержкой сценариев JavaScript:
- Яндекс.Браузер
- Internet Explorer
- Microsoft Edge (на базе Chromium версии 104+)
- Mozilla Firefox
- Google Chrome (в том числе Chromium-Gost. На базе Chromium версии 104+)
- Apple Safari
- Opera
Поддерживаемые операционные системы:
- 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 version
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, в папке
- В 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
![]() | ![]() | ![]() | ![]() |
---|---|---|---|
v45+ с расширением CryptoPro Extension for CAdES Browser Plug-in | v43+. Начиная с версии 52, с расширением | v9+ с установленным КриптоПро ЭЦП Browser plug-in | v40+ с расширением CryptoPro Extension for CAdES Browser Plug-in |
- 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 -> Addons).
Компиляция. 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, в папке
- В 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 -> Addons).
Зачем мне этот пакет?
КриптоПРО ЭЦП Browser Plug-In доступен в разных браузерах в двух версиях.
Асинхронной (в современных браузерах) и синхронной (в браузерах постарше).
С помощью этого пакета можно не писать реализацию под каждую версию плагина дважды.
И вместо этого
и этого
написать это (UMD):
или это (ES Modules + Typescript):
Проверка работы примеров с 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.
При использовании столкнулись со следующей проблемой: при обращении к хранилищу сертификатов или попытке подписать что-нибудь появляется диалоговое окно подтверждения доступа:
Если в этом диалоговом окне кликнуть нет, то вылетает исключение, вот такое:
Поймать это исключение не получается, соответственно нет возможности обработать ситуацию, когда пользователь не разрешил выполнение операции и как-то отреагировать на это в приложении.
Пример (утрированный) в котором эксепшн упорно вылетает наружу:
.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
- В консоли появляется ошибка
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-файл.
Заметил, что проблема появляется, только если в строке есть некоторые символы (например ‘_’ или ‘<’. Ошибка: “Не удалось установить настройки для подписи: 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
- Получаем ArrayBuffer из XML файла
- Передаем ArrayBuffer в функцию createHash
- Полученный хеш и отпечаток ЭЦП передаем в функцию 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 при открытии страницы все ок: всплывает Подтверждения доступа, можно получить сертификаты (остальные методы не пробовал) после инициализации. Но при обновлении страницы окна не всплывают. В консоли ошибка “Плагин недоступен”.
В консоли:
Страница Крипто Про для проверки создания электронной подписи корректно открывается и обновляется: с запросом Подтверждения доступа для обоих браузеров. Данные о версии провайдера и плагине корректно отображаются.
Проверка подписи
Реализация функции проверки ЭЦП.
Из документации 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):
или это (ES Modules + Typescript):
Установка
Для 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
![]() | ![]() | ![]() | ![]() |
---|---|---|---|
v45+ с расширением CryptoPro Extension for CAdES Browser Plug-in | v43+. Начиная с версии 52, с расширением | v9+ с установленным КриптоПро ЭЦП Browser plug-in | v40+ с расширением CryptoPro Extension for CAdES Browser Plug-in |
- 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