Привиты к криптопро и CryptoPro

Привиты к криптопро и CryptoPro Электронная цифровая подпись


Offline

prostomav

 

Оставлено
:

1 февраля 2021 г. 12:34:40(UTC)

Добрый день
Возникла проблема при верификации подписи к файлу после срока действия сертификата. На момент подписания сертификат был действующим.
В поставленной мне задаче требуется проверять исходный файл и файл подписи на предмет их соответствия и получать данные из этой подписи.

Проверку осуществляем функцией VerifyCades, которая возвращает следующую ошибку: “-2146762495 – Истек/не наступил срок действия требуемого сертификата при проверке по системным часам или по отметке времени в подписанном файле.”.

При попытки игнорирования данной ошибки и последующем получении данных из подписи – ничего не возвращается.

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


Offline

Санчир Момолдаев

 

Оставлено
:

1 февраля 2021 г. 15:02:49(UTC)

Добрый день
Все корректно.
Ведь пользователь может перевести время назад у себя на компьютере и получить подпись «задним числом»
Рассмотрите возможность использования cades x long type 1


Offline

Artem Vasilev

 

Оставлено
:

25 ноября 2021 г. 17:27:01(UTC)

Собрал модуль для php 7.4 с последним сертифицированым дитрибутивом КриптоПРО 5 (5.0.12000)
Получил тестовый сертификат, поставил в контейнер, подтянул цепочки, запускаю скрипт test_extension.php, получаю ошибку

Цитата:

Aborted (core dumped)

Захожу и удаляю в коде установку штампа времени.

Запускаю снова – подписалось, хэш на экране есть, а следом

Цитата:

munmap_chunk(): invalid pointer
Aborted (core dumped)

Ошибка возникает в месте вызова метода VerifyCades();

Операционная система:

Цитата:

LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID: AlmaLinux
Description: AlmaLinux release 8.5 (Arctic Sphynx)
Release: 8.5
Codename: ArcticSphynx


Offline

Artem Vasilev

 

Оставлено
:

25 ноября 2021 г. 17:59:22(UTC)

Добавлю информации

Удалил все корневые и промежуточные сертификаты, которые ставил

Поставил сертификаты отсюда: http://q20.cryptopro.ru/

Дополнительно поставил сертификат CRYPTO-PRO Test Center 2

В результате перестал получать даже подпись. Скрипт проверки падает в ошибку

Segmentation fault (core dumped)

или

munmap_chunk(): invalid pointer
Aborted (core dumped)

Через раз

UPD: Не хватало одного сертификата. Поставил и ошибка “Segmentation fault (core dumped)” вернулась

Попробовал включить лог

Код:


sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel сades -mask 0xF
sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel tsp -mask 0xF
sudo /opt/cprocsp/sbin/amd64/cpconfig -loglevel ocsp -mask 0xF

Вывод journalctl -f:

Отредактировано пользователем 25 ноября 2021 г. 18:23:47(UTC)
 | Причина: Не указана


Offline

Санчир Момолдаев

 

Оставлено
:

25 ноября 2021 г. 18:30:41(UTC)

thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.


Offline

Artem Vasilev

 

Оставлено
:

26 ноября 2021 г. 11:29:46(UTC)

Автор: Санчир Момолдаев Перейти к цитате

Спасибо!

Да, действительно, “подсунуть” системный libcurl помогло

Для потомков:

В Almalinux нужно проверить наличие libcurl, в принципе

Код:

ls -lah /usr/lib64/libcurl*

Если в выдаче есть /usr/lib64/libcurl.so, то всё “ок”
Если нет – делайте софтлинк

Код:

ln -s /usr/lib64/libcurl.so.4 /usr/lib64/libcurl.so

Дальше прописываем в конфиг КриптоПро путь к этой библиотеке

Код:

/opt/cprocsp/sbin/amd64/cpconfig -ini '\cryptography\apppath' -add string 'libcurl.so' '/usr/lib64/libcurl.so'

Подозреваю, что данный метод будет работать на всех RHEL 8 совместимых системах


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 9:54:10(UTC)

Доброго времени суток!

Как правильно проверить отделенную подпись с использованием библиотеки pycades?
Для проверки имею файл формата .pdf и .sig к нему. SignedData в качестве атрибута Content принимает только строковое значение, VerifyCades в качестве строки также принимает строку. Каким образом корректно использовать этот функционал при работе с потоком байтов?

Отредактировано пользователем 26 июля 2022 г. 9:56:36(UTC)
 | Причина: Не указана


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 10:06:00(UTC)

Здравствуйте.

Указать, что данные закодированы в base64,
передать в контент pdf в base64, вызвать проверку.


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 10:09:41(UTC)


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 10:56:27(UTC)

Пробовал передавать значения в base64. При валидации получаю ошибку Exception: Internal error. (0x8009200E)

Вот такой код:

import pycades
import base64

signedata = pycades.SignedData()
signedata.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY

data = open(“report.pdf”,”rb”).read()
encd = base64.b64encode(data)

sgn = open(“report.pdf.sig”,”rb”).read()
encs = base64.b64encode(sgn)

signedata.Content = encd.decode(‘utf-8’)

signedata.VerifyCades(encs.decode(‘utf-8’), pycades.CADESCOM_CADES_DEFAULT, True)


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 11:44:12(UTC)

Насолько я понимаю, ошибка имеет расшифровку The signed cryptographic message does not have a signer for the specified signer index.
В чём может быть причина такой ошибки?


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 11:48:55(UTC)

Автор: Kokosjan Перейти к цитате

Насолько я понимаю, ошибка имеет расшифровку The signed cryptographic message does not have a signer for the specified signer index.
В чём может быть причина такой ошибки?

Перечисление CADESCOM_CADES_TYPE

Если указать CADESCOM_CADES_BES – ошибка есть?


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 11:49:43(UTC)

encs.decode(‘utf-8’) – зачем?


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 11:50:47(UTC)

+ проверить, что report.pdf.sig – бинарный, вероятно, он уже закодирован в base64? Если закодирован – не нужно повторно кодировать…


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 12:04:09(UTC)

Цитата:

Если указать CADESCOM_CADES_BES – ошибка есть?

Да, ошибка та же самая

Цитата:

encs.decode(‘utf-8’) – зачем?

VerifyCades в качестве первого аргумента принимает только строку, таким образом массив в base64 из типа bytes перевожу в str

Цитата:

+ проверить, что report.pdf.sig – бинарный, вероятно, он уже закодирован в base64? Если закодирован – не нужно повторно кодировать…

Не похоже на base64 Привиты к криптопро и CryptoPro report.pdf.sig (3kb) загружен 4 раз(а).


Offline

Андрей *

 

Оставлено
:

26 июля 2022 г. 12:17:16(UTC)

b64encode разве не строку возвращает?


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 12:28:46(UTC)


Offline

Санчир Момолдаев

 

Оставлено
:

26 июля 2022 г. 14:38:41(UTC)

код правильный. проблема в самой подписи.
создайте обращение на портале тп, там разберемся


Offline

Kokosjan

 

Оставлено
:

26 июля 2022 г. 15:28:09(UTC)

Автор: Санчир Момолдаев Перейти к цитате

код правильный. проблема в самой подписи.
создайте обращение на портале тп, там разберемся

Создал заявку – #58398

<?php

namespace

CProCSP

/**

* Глобальные константы тип усовершенствованной подписи, например для CPSignedData::VerifyHash

* @var int CADES_BES Тип подписи CAdES BES

* @var int CADES_DEFAULT Тип подписи по умолчанию (CAdES-X Long Type 1)

* @var int CADES_T Тип подписи CAdES T

* @var int CADES_X_LONG_TYPE_1 Тип подписи CAdES-X Long Type 1

*/

const

CADES_BES

0x01

const

CADES_DEFAULT

0x00

const

CADES_T

0x05

const

CADES_X_LONG_TYPE_1

0x5D

/**

* Глобальные константы тип кодировки контента, например для CPSignedData::Sign

* @var int ENCODE_ANY Data is saved as a base64-encoded string or a pure binary sequence.

* This encoding type is used only for input data that has an unknown encoding type. Introduced in CAPICOM 2.0.

* @var int ENCODE_BASE64 Data is saved as a base64-encoded string.

* @var int ENCODE_BINARY Data is saved as a pure binary sequence.

*/

/*const ENCODE_ANY = 0xffffffff;

const ENCODE_BASE64 = 0;

const ENCODE_BINARY = 1;*/

/**

* Глобальные константы тип проверки подписи, например для CPSignedData::Verify

* @see https://msdn.microsoft.com/en-us/library/aa375740.aspx

* @var int VERIFY_SIGNATURE_ONLY Проверка только подписи.

* @var int VERIFY_SIGNATURE_AND_CERTIFICATE Проверка подписи и сертификата на основании которого создана подпись.

*/

const

VERIFY_SIGNATURE_ONLY

0

const

VERIFY_SIGNATURE_AND_CERTIFICATE

1

/**

* Только описание! Для автокомплитов IDE и справки

* CPSigners класс плагина предоставляет свойства и методы для работы с подписанным сообщением.

* Расширяет интерфейс объекта CAPICOM.SignedData .

*

* @see http://cpdn.cryptopro.ru/default.asp?url=content/cades/interface_c_ad_e_s_c_o_m_1_1_i_c_p_signed_data.html

* @see http://cpdn.cryptopro.ru/default.asp?url=content/cades/interface_c_ad_e_s_c_o_m_1_1_i_c_p_signed_data2.html

* @see http://cpdn.cryptopro.ru/default.asp?url=content/cades/interface_c_ad_e_s_c_o_m_1_1_i_c_p_signed_data3.html

* @see http://cpdn.cryptopro.ru/default.asp?url=content/cades/interface_c_ad_e_s_c_o_m_1_1_i_c_p_signed_data4.html

* @see http://cpdn.cryptopro.ru/default.asp?url=content/cades/interface_c_ad_e_s_c_o_m_1_1_i_c_p_signed_data5.html

*

* @package CProCSP

*/

class

CPSignedData

public

function

SignCades

/**

* Добавляет к сообщению усовершенствованную подпись.

*/

public

function

SignHash

/**

*

*/

public

function

CoSignHash

/**

* Создает подпись

* Creates a digital signature on the content to be signed.

* @see https://msdn.microsoft.com/en-us/library/aa387726.aspx

*

* @param CPSigner $signer

* @param boolean $bDetached If True, the data to be signed is detached;

* @param int $encodingType A value of the ENCODING_TYPE

*/

public

function

Sign

$signer

null

$bDetached

false

$encodingType

ENCODE_BASE64

/**

* Cosigns an already signed message.

* @see https://msdn.microsoft.com/en-us/library/aa387725.aspx

*

* @param CPSigner $signer

* @param int $encodingType A value of the CAPICOM_ENCODING_TYPE

*/

public

function

CoSign

$signer

null

$encodingType

ENCODE_BASE64

/**

*

*/

public

function

CoSignCades

/**

*

*/

public

function

EnhanceCades

/**

* Determines the validity of a signature or signatures.

* @param string $signedMessage A string that contains the signed message to be verified.

* @param boolean $bDetached If True, the data to be signed is detached

* @param int $verifyFlag A value of the CAPICOM_SIGNED_DATA_VERIFY_FLAG

*/

public

function

Verify

$signedMessage

$bDetached

false

$verifyFlag

/**

*

*/

public

function

VerifyCades

/**

* Проверяет усовершенствованную подпись на основе переданного хэш-значения.

*

* Метод VerifyHash позволяет проверить усовершенствованную подпись,

* в том числе и на соответствие заданому типу подписи.

* В отличие от метода VerifyCades, данный метод не проверяет соответствие хэш-значения каким-либо данным.

* Если в переданном сообщении присутствует подписанный атрибут messageDigest, то данный метод проверяет только

* соответствие хэш-значения в параметре Hash тому хэш-значению, которое содержится в атрибуте messageDigest.

*

* @param CPHashedData $hash

* @param string $signedMessage Проверяемое подписанное сообщение.

* @param int $cadesType Тип усовершенствованной подписи

*

* @throws \Exception Генерирует Ошибки в любом случае кроме успешной проверки

*/

public

function

VerifyHash

$hash

$signedMessage

$cadesType

CADES_DEFAULT

/**

*

*/

public

function

set_ContentEncoding

/**

* Данные которые будем подписывать

* Data to be signed. This property must be initialized before the Sign method is called.

* When the value of this property is reset, directly or indirectly, the whole state of the object is reset,

* and any signature that was associated with the object before the property was changed is lost.

*

* @param string $content данные

*/

public

function

set_Content

$content

/**

* Возвращает коллекцию подписантов подписи

* Retrieves the Signers collection that represents the signature creators of the data.

*

* @return \CProCSP\CPSigners

*/

public

function

get_Signers

/**

* Retrieves the Certificates collection of the signed data.

*/

public

function

get_Certificates


Offline

Pavel Bell

 

Оставлено
:

26 апреля 2022 г. 20:51:05(UTC)

Добрый день, у меня есть необходимость программно проверять присланные документы от Гос организации.
Приходят письма в которых содержится RTF документ и отсоединенная подпись.
Подписывать ничего не надо, надо только проверять.

Целевая ОС Ubuntu 20.04, язык Python.

Установил и собрал все по инструкции https://docs.cryptopro.r…es/pycades/pycades-build
Модуль импортируется.

Теперь как я понимаю нужно установить корневой сертификат? Если да, где его можно взять?
В онлайн сервисах есть возможность проверить подпись, там же можно получить информацию о сертификате, его надо установить в качестве корневого?


Offline

Pavel Bell

 

Оставлено
:

27 апреля 2022 г. 20:38:34(UTC)

Установил необходимые сертификаты и проверил.
/opt/cprocsp/bin/amd64/cryptcp -verify -detached -fext sig -thumbprint … file_name.rtf
Госы шлют подпись с расширение sig, у вас по умолчанию sgn.

Я надеюсь, что для процедуры проверки подписи лицензию не надо покупать?
Что будет когда истечет временная?

Отредактировано пользователем 27 апреля 2022 г. 20:40:13(UTC)
 | Причина: Не указана


Offline

Андрей *

 

Оставлено
:

27 апреля 2022 г. 20:49:19(UTC)

Автор: Pavel Bel Перейти к цитате

Я надеюсь, что для процедуры проверки подписи лицензию не надо покупать?
Что будет когда истечет временная?

Не требуется, после истечения – будет проверять.


Offline

Pavel Bell

 

Оставлено
:

28 апреля 2022 г. 22:06:59(UTC)

Не получается почему то через pycades сделать проверку.

Пока тупо в лоб пытаюсь делать так:

Цитата:

rtf = ‘notification_on.rtf’
file = open(rtf, ‘rb’)
content = file.read().decode(‘ascii’)
file.close()

hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.Hash(content)

sig = open(‘notification_on.rtf.sig’, ‘rb’)
raw_signature = sig.read()
sig.close()
signature = base64.encodebytes(raw_signature).decode(‘ascii’)

_signedData = pycades.SignedData()
_signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)

Exception: Internal error. (0x8009200E)

Судя по коду ошибки это: The signed cryptographic message does not have a signer for the specified signer index.

Что я не так делаю?


Offline

Андрей *

 

Оставлено
:

28 апреля 2022 г. 23:01:58(UTC)


Offline

Андрей *

 

Оставлено
:

28 апреля 2022 г. 23:03:25(UTC)

почему не используется VerifyCades?


Offline

Pavel Bell

 

Оставлено
:

28 апреля 2022 г. 23:37:08(UTC)


Offline

Андрей *

 

Оставлено
:

28 апреля 2022 г. 23:50:19(UTC)

В файле cms в der, там нет кодирования.
Т.е. нужно проверять der\base64(строка\со служебными заголовками).

Убрать декодирование из base64, получится вот так:

Код:

rtf = 'notification_on.rtf'
file = open(rtf, 'rb')
content = file.read().decode('ascii')
file.close()

hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.Hash(content)

sig = open('notification_on.rtf.sig', 'rb')
signature = sig.read()
sig.close() 

_signedData = pycades.SignedData()
_signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)

проверяется?

либо content передать в _signedData.Content
и
_signedData.VerifyCades(signature, pycades.CADESCOM_CADES_BES)

thanks 1 пользователь поблагодарил Андрей * за этот пост.


Offline

Pavel Bell

 

Оставлено
:

29 апреля 2022 г. 10:31:04(UTC)

Спасибо за советы, вот что получается:
signature должна быть строкой, иначе TypeError: argument 2 must be str, not bytes
если сделать:

Цитата:

_signedData.VerifyHash(hashedData, str(signature), pycades.CADESCOM_CADES_BES)

то Exception: Internal error. (0x8009100E)

если через VerifyCades
_signedData.VerifyCades(str(signature), pycades.CADESCOM_CADES_BES)

то Exception: Internal error. (0x8009100E)

Ошибки одинаковые, в обоих случаях, но отличаются от предыдущей
Видимо как то не так передается файл подписи.

Пробовал разные декодирования, но они не проходят.
В чем может быть дело?


Offline

Андрей *

 

Оставлено
:

27 мая 2022 г. 13:56:11(UTC)

str что делает?

Функции или бинарные данные или base64(бинарные данные) принимают.


Offline

Pavel Bell

 

Оставлено
:

19 июня 2022 г. 16:00:15(UTC)

Извините, не видел ответа, горячие дни наступили.

Приведение типа bytes в строку

Цитата:

Функции или бинарные данные или base64(бинарные данные) принимают.

Не принимают, возвращается must be str, not bytes

Вот, что нашел про ошибку 0x8009100E:

Цитата:

При получении штампа времени через tsputil возвращается ошибка:
[0x8009100E] Cannot find the original signer

Для проверки подписи штампа времени нужен сертификат службы штампов времени, которым этот штамп подписан.
Этот сертификат может находиться:
1.В штампе (для этого нужно настроить службу или добавлять –cert-req при использовании tsputil).
2.В хранилище «Другие пользователи»

Пока сделал проверку просто через вызов cryptcp с параметрами.

Для полноты картины — мне надо не просто проверить подпись, а проверить, что документ не был изменен “по дороге” и что подписан тем кем надо.

Отредактировано пользователем 20 июня 2022 г. 8:08:54(UTC)
 | Причина: Не указана

Содержание
  1. 1 2015-05-13 08:00:53
  2. Тема: Lotus и КриптоПро
  3. 2 Ответ от admin 2015-05-13 08:02:58
  4. Re: Lotus и КриптоПро
  5. 3 Ответ от admin 2015-11-17 08:47:55
  6. Re: Lotus и КриптоПро
  7. vgoma / crypto-pro Goto Github PK
  8. crypto-pro’s Introduction
  9. cryptoPro
  10. Зачем мне этот пакет?
  11. Установка
  12. API
  13. Методы объекта cryptoPro
  14. Методы объекта сертификата
  15. Поддерживаемые СКЗИ
  16. Примеры
  17. Тэг script (UMD)
  18. Angular (ES Modules + Typescript)
  19. React (ES Modules + JavaScript)
  20. Миграция с версии 1 на 2
  21. Тем, кто хочет помочь
  22. Запуск режима разработки
  23. Запуск тестов
  24. Проверка работы примеров с React и Angular
  25. Проверка пакета перед публикацией в NPM
  26. Полезная информация
  27. Установка КриптоПРО CSP в Linux / OSX
  28. Установка КриптоПРО ЭЦП browser plugin в Linux
  29. Настройка плагина для Firefox (до версии 52)
  30. Установка сертификатов в Linux
  31. Лицензия
  32. Crypto-pro’s People
  33. crypto-pro’s Issues
  34. Поддержка установки через Bower
  35. Подписание файла в Angular
  36. Экспорт сертификата с приватным ключом
  37. XADES формат подписи
  38. Ошибка на production (Ошибка обработки сертификатов: t. Item is not a function)
  39. Пустой файл при извлечении из прикрепленной подписи
  40. Ошибка синтаксиса при подключении cryptopro на internet explorer
  41. Не получается подписать файл через createDetachedSignature
  42. Подпись нешифрованных документов
  43. Для чего здесь вычисляется hash по ГОСТ Р 34. 11-94 для строки: “abc” ?
  44. Синтаксическая ошибка internet explorer 10
  45. Создание открепленной подписи для файла
  46. Ошибка CSP “The parameter is incorrect (0x80070057)” на версии cades “2. 13642”
  47. Ошибка создание отсоединенной подписи
  48. Подписание в формате XADES
  49. Ошибка “Плагин недоступен” в консоли IE 11 и Chrome
  50. Проверка открепленной подписи и подписанного файла.
  51. Реализация CoSign планируется?
  52. Сборка проекта в минифицированной версии в одном файле
  53. Есть ли возможность подписать XML
  54. реализация подписи в браузере с помощью Angular
  55. Не видит сертификаты с USB накопителя
  56. Неверный тип возвращаемого значения getAlgorithm
  57. Почему подписать можно только base64
  58. Возвращать сообщения об ошибках с кодом
  59. Проверка подписи
  60. Вычисление hash
  61. КриптоПРО ЭЦП Browser Plug-In не доступен
  62. Отделенная подпись не создается.
  63. Возможно ли декодировать dataBase64 c помощью подписи?
  64. Контейнеры с сертификатами на носителях
  65. При попытке запустить билд приложения в ie, приложение крашится
  66. Запуск Angular примера в IE 11
  67. Валидация подписи
  68. метод getCertList не работает после минификации с помощью UglifyJs
  69. Планируются ли новые методы?
  70. Например
  71. Uncatched Exception in Promice (“The operation was canceled by the user. (0x000004C7)”)
  72. переход с createSignature на createAttachedSignature
  73. Ошибка при проверке подписи

1 2015-05-13 08:00:53

  • admin
  • Репутация : 0

Тема: Lotus и КриптоПро

Пробуем через COM подписывать в лотусскрипте данные с помощью Криптопро.

На форме:  Что подписываем: – поле “tosign”ЭЦП: –  поле “signpole”

Пример 1.Сначала пробуем получить сертификаты в Lotus через виндовый элемент управления CAPICOM.В этом варианте для юзера есть окошечко выбора сертификата.В конце уже присвоили элементу CAdESCOM сертификат из элемента CAPICOM.В данном примере юзер может выбирать сертификат.

Sub Click(Source As Button)  '   через CAPICOM
    
    
    Dim Signer As Variant ' кто подписывает
    Dim Store As Variant ' хранилище сертификатов
    Dim Certificates As Variant ' все сертификаты
    Dim Certif As Variant ' поиск непросроч. сертификатов для выбора одного сертификата
    Dim Build As Variant
    Dim MySert As Variant ' один выбранный сертификат
    Dim MySert1 As Variant ' один выбранный сертификат (Certificate object)
    Dim privateKey As Variant
    
    
    ProviderName$ = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
    'Set Signer = CreateObject("CAPICOM.Signer") 
    Set Store = CreateObject("CAPICOM.Store")
    Build = Store.Open (2,"MY")
    Set Certificates = Store.Certificates
        'xxx = Certificates.Count
        'xxx = Certificates.Select("123", "ВЫБЕРИ СЕРТИФИКАТ!")    все сертификаты
    
    Set Certif = Certificates.Find(9, Now)
    Set MySert = Certif.Select("123", "ВЫБЕРИ СЕРТИФИКАТ!") ' непросроченные
    Set MySert1 = MySert.Item(1)
    Print "Сертификат  для " + (MySert1.SubjectName)
    Set privateKey = MySert1.PrivateKey
    Print  (privateKey.ProviderName)
    'Set xxx = Signer.Load (MySert1)
    ' -----------------------------------------------------------------------------------------------
    Dim oSigner As Variant
    Set oSigner = CreateObject("CAdESCOM.CPSigner")
    oSigner.TSAAddress = "http://testca.cryptopro.ru/tsp/tsp.srf"
    
    Set oSigner.Certificate = MySert1  '  Присвоили CAdESCOM сертификат из CAPICOM


    Dim oSignedData  As Variant
    Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
    oSignedData.Content =  doc.GetItemValue("tosign")(0) 'ЧТО подписываем
    'sSignedData = oSignedData.Sign(oSigner, False)    
    sSignedData = oSignedData.SignCades(oSigner, 1, False)
        
    Call doc.ReplaceItemValue("signpole",Cstr(sSignedData))
    

    Msgbox "конец"
End Sub

2 Ответ от admin 2015-05-13 08:02:58

  • admin
  • Репутация : 0

Re: Lotus и КриптоПро

Пример 2.Работа с компонентом КриптоПро CADESCOM.Окошка выбора сертификата юзером – нет.

Что подписываем:  на форме текстовое поле tosign.Подпись: поле signpole

Sub Click(Source As Button) ' CAdESCOM
    
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim oAbout As Variant
    Dim oVersion As Variant
    Dim Build As Variant
    Dim Certificates As Variant ' все сертификаты
    Dim Certif As Variant ' поиск непросроч. сертификатов для выбора одного сертификата
    Dim MySert As Variant ' один выбранный сертификат
    Dim MySert1 As Variant ' один выбранный сертификат (Certificate object)
    Dim privateKey As Variant
    
    ProviderName$ = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"
    Set oAbout = CreateObject("CAdESCOM.About")
    Set oVersion= oAbout.CSPVersion(ProviderName$,75)
    Build = oVersion.BuildVersion
    Print Cstr(Build)
    
    Dim Store As Variant ' хранилище сертификатов
    Set Store = CreateObject("CAdESCOM.Store")
    Build = Store.Open (2,"MY")
    Set Certificates = Store.Certificates
    Print Cstr(Certificates.Count) ' всего сертификатов
    Set Certif = Certificates.Find(9, Now)
    Print Cstr(Certif.Count) ' непросроченные сертификаты
    Set MySert = Certif.Item(1)
    Print "Сертификат  для " + (MySert.SubjectName)
    Set privateKey = MySert.PrivateKey
    Print  (privateKey.ProviderName)
    
    Dim oSigner As Variant
    Dim oSignedData  As Variant
    Dim sSignedData
    
    Set oSigner = CreateObject("CAdESCOM.CPSigner")
    Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
    
    oSigner.TSAAddress = "http://testca.cryptopro.ru/tsp/tsp.srf"
    Set oSigner.Certificate = MySert
    oSignedData.Content =  doc.GetItemValue("tosign")(0) 'ЧТО подписываем
    
    sSignedData = oSignedData.Sign(oSigner, False)
    
    
    Call doc.ReplaceItemValue("signpole",Cstr(sSignedData))
    
    Msgbox "конец"
    'Print Cstr(sSignedData)
End Sub

3 Ответ от admin 2015-11-17 08:47:55

  • admin
  • Репутация : 0

Re: Lotus и КриптоПро

Попытки проверить ЭЦП поля “signpole”.

Пример 1:CAdESCOM – проверяем подпись поля в лотус документе.

Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim  SignedMsg As String,  Cont As String
    Dim oSignedData
    Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
    
    Cont = doc.GetItemValue("tosign")(0) 
    SignedMsg = doc.GetItemValue("signpole")(0) 'Текст подписанный
    oSignedData.Content =  Cont$ ' ЭЦП
    
    zzz= oSignedData.VerifyCades(SignedMsg, 0, 1)   '  не работает!
    
    numberSignature=oSignedData.Signers.Count
    'yyy = oSignedData.Display
    
'oSignedData.VerifyCades
    xxx = oSignedData.VerifyCades (SignedMsg)
    
End Sub

Пример 2: проверка XML фала подписанного криптопро  с винта с помошью CAdESCOM

Sub Click(Source As Button)
    ' берем с xml файла с ЭЦП - localFile$ содержимое konteyner и signaturesxml.
    ' пытаемся с помошью VerifyCades проверить валидность signaturesxml по отношению к konteyner.
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim  SignedMsg
    Dim oSignedData
    
    
    Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
    
    localFile$ = "c:\XML3.xml"
    outputFile$ = "c:\XML
Sub Click(Source As Button)
' берем с xml файла с ЭЦП - localFile$ содержимое konteyner и signaturesxml.
' пытаемся с помошью VerifyCades проверить валидность signaturesxml по отношению к konteyner.
Dim workspace As New NotesUIWorkspace
Dim session As New NotesSession
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.Document
Dim  SignedMsg
Dim oSignedData
Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
localFile$ = "c:\XML\123.xml"
outputFile$ = "c:\XML\0000.xml"
Dim inputStream As NotesStream, outputStream As NotesStream
Set inputStream = session.CreateStream
Set outputStream =session.CreateStream    
Call inputStream.Open(localFile$,"UTF-8")
inputStream.Position = 0
Cont$=    inputStream.ReadText()
Call inputStream.Close ()
Cont$ = Strleftback( Cont$, "</konteyner>" )
Cont$ = Strrightback ( Cont$, "<konteyner>" )
'    Call outputStream.Open (outputFile$)
'    outputStream.Truncate
'    Dim domParser As NotesDOMParser
'    Set domParser=session.CreateDOMParser(inputStream, outputStream)
'    Call domParser.Serialize( )
'    domParser.Process
'    Dim docNode As NotesDOMDocumentNode
'    Set docNode = domParser.Document
'    Dim documentList As NotesDOMNodeList
'    Set documentList = docNode.GetElementsByTagName    ("konteyner")
'    Dim eNode As NotesDOMElementNode
'    Set    eNode  =    documentList.GetItem(1) 'name
'    Cont$  = eNode.lastchild.NodeValue
'oSignedData.Content =  Cont$ ' ЭЦП
'Call inStream.Close
'yyy = oSignedData.Display
Dim xml As XMLProcessor
Set xml = New XMLProcessor("")
Call xml.parseFile(localFile$)
sigXML$ =  xml.selectValue(Nothing, "signaturesxml[id=sigXML]", "-")
Call doc.ReplaceItemValue("tosign",Cont$)
Call doc.ReplaceItemValue("signpole",sigXML$)
'Cont$ =  xml.selectValue(Nothing, "konteyner", "-")
oSignedData.Content =  Cont$ ' ЭЦП
zzz= oSignedData.VerifyCades(sigXML$, 0, 1)
numberSignature=oSignedData.Signers.Count
xxx = oSignedData.Verify (sigXML$)
'oSignedData.VerifyCades
End Sub
00.xml" Dim inputStream As NotesStream, outputStream As NotesStream Set inputStream = session.CreateStream Set outputStream =session.CreateStream Call inputStream.Open(localFile$,"UTF-8") inputStream.Position = 0 Cont$= inputStream.ReadText() Call inputStream.Close () Cont$ = Strleftback( Cont$, "</konteyner>" ) Cont$ = Strrightback ( Cont$, "<konteyner>" ) ' Call outputStream.Open (outputFile$) ' outputStream.Truncate ' Dim domParser As NotesDOMParser ' Set domParser=session.CreateDOMParser(inputStream, outputStream) ' Call domParser.Serialize( ) ' domParser.Process ' Dim docNode As NotesDOMDocumentNode ' Set docNode = domParser.Document ' Dim documentList As NotesDOMNodeList ' Set documentList = docNode.GetElementsByTagName ("konteyner") ' Dim eNode As NotesDOMElementNode ' Set eNode = documentList.GetItem(1) 'name ' Cont$ = eNode.lastchild.NodeValue 'oSignedData.Content = Cont$ ' ЭЦП 'Call inStream.Close 'yyy = oSignedData.Display Dim xml As XMLProcessor Set xml = New XMLProcessor("") Call xml.parseFile(localFile$) sigXML$ = xml.selectValue(Nothing, "signaturesxml[id=sigXML]", "-") Call doc.ReplaceItemValue("tosign",Cont$) Call doc.ReplaceItemValue("signpole",sigXML$) 'Cont$ = xml.selectValue(Nothing, "konteyner", "-") oSignedData.Content = Cont$ ' ЭЦП zzz= oSignedData.VerifyCades(sigXML$, 0, 1) numberSignature=oSignedData.Signers.Count xxx = oSignedData.Verify (sigXML$) 'oSignedData.VerifyCades End Sub

Пример 3. Проверка подписанного с криптопро XML файла на винчестере при помощи Msxml2.

Sub Click(Source As Button)
    Dim workspace As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim uidoc As NotesUIDocument
    Dim doc As NotesDocument
    Set uidoc = workspace.CurrentDocument
    Set doc = uidoc.Document
    
    Dim oXml    
    Set oXml = CreateObject("Msxml2.DOMDocument")
    oXml.async = False
    oXml.validateOnParse = True
    localFile$ = "c:\XML3.xml"
    localFile2$ = "c:\XML3.xml"
    oXml.Load(localFile$)
    
    If oXml.parseError.ErrorCode = 0 Then 
        Print( "SUCCESS loading XML File")  
    Else  
        Print("Ошибка: " & oXml.parseError.reason & " в строке: " & oXml.parseError.line & " позиция: " & oXml.parseError.linepos)
    End If
    
    Set objXMLDOMNodeList = oXml.getElementsByTagName ("konteyner")
    Set     Item =    objXMLDOMNodeList.item(0)
    cont$ =  Item.xml
    repl$ = |<konteyner xmlns="http://_.w3.org/1999/xhtml">|
    cont$ = Replace (cont$,repl$,"")
    repl$ = |</konteyner>|
    cont$ = Replace (cont$,repl$,"")
    
    Set objXMLDOMNodeList = oXml.getElementsByTagName ("signaturesxml")
    Set     Item =    objXMLDOMNodeList.item(0)
    sig$ =  Item.xml
    repl$ = |<signaturesxml xmlns="http://_.w3.org/1999/xhtml" id="sigXML">|
    sig$ = Replace (sig$,repl$,"")
    repl$ = |</signaturesxml>|
    sig$ = Replace (sig$,repl$,"")
    Call doc.ReplaceItemValue("tosign",cont$)
    Call doc.ReplaceItemValue("signpole",sig$)
    
    Dim oSignedData
    Set oSignedData = CreateObject("CAdESCOM.CadesSignedData")
    oSignedData.Content =  cont$ ' ЭЦП
    zzz= oSignedData.VerifyCades(sig$, 0, 1)
    
    numberSignature=oSignedData.Signers.Count
    
    'Dim Strm As NotesStream
    'Set Strm = session.CreateStream
    'Call Strm.Open(localFile2$)
    'Strm.WriteText (cont$)
    'Call Strm.Close
End Sub
crypto-pro

vgoma / crypto-pro
Goto Github
PK

View Code? Open in Web Editor

API для взаимодействия с КриптоПро

License: MIT License

crypto-pro’s Introduction

NPM version
NPM downloads
Build Status
Coverage Status
Examples
Donate
Привиты к криптопро и CryptoPro

cryptoPro

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

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

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

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

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

example-umd.gif

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

example-esm.gif

Установка

Подключение пакета как 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

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

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

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

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

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

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

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

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

Примеры

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

Тэг script (UMD)

 examples/script-tag
npm i
npm start

Angular (ES Modules + Typescript)

 examples/angular
npm i

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

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

npm run build
npm run serve

React (ES Modules + JavaScript)

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

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

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:

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

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

         
    
    

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    npm run build
    npm run serve

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

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

    npm run package
    mv package ..

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

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

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

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

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

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

    Полезная информация

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

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

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

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

    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″>
    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).

    Установка сертификатов в 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
            .LASHvanov
            .LASHetrov
            .LASHidorov
            .LASHasiliev
            .LASHmirnov
            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
        .LASHvanov
        .LASHetrov
        .LASHidorov
        .LASHasiliev
        .LASHmirnov
        .DIMAGEidor
        OK.
        Total: SYS: 0,010 sec USR: 0,050 sec UTC: 0,130 sec
        [ErrorCode: 0x00000000]

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

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

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

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

    <div dir="auto" data-snippet-clipboard-copy-content="/opt/cprocsp/bin/amd64/certmgr -inst -store uroot -file .crt”>

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

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

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

    Лицензия

    Crypto-pro’s People

    crypto-pro’s Issues

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Ошибка 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”, тоже получаем ошибку.

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

           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, на ранних работает.

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

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

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

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

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

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

    1

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

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

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

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

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

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

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

    реализация подписи в браузере с помощью 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);
            });
        }
    

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

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

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

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

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

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

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

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

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

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

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

    Из документации 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;
        }
    
    

    Вычисление hash

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

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

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

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

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

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

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

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

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

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

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

    При попытке запустить билд приложения в 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

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

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

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

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

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

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

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

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

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

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

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

    Например

    • getContainerCertificates или getSmartCardUserCertificates

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

    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 результат тот же самый

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

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

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

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

    Читайте также:  Статья 1. Цели регулирования настоящего Федерального закона и отношения, регулируемые настоящим Федеральным законом
    Оцените статью
    ЭЦП Эксперт
    Добавить комментарий