Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline sergey.kosta  
#1 Оставлено : 26 ноября 2020 г. 15:30:01(UTC)
sergey.kosta

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.11.2020(UTC)
Сообщений: 4
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Здравствуйте!

Работаю с криптопро через cryptopro browser plugin, необходимо подписать XML открепленной подписью (Сам base64 этой XML находится в скрытом текстовом блоке на странице в браузере т.е. это не файл) . Подписание проходит нормально , но функция Verify говорит
Цитата:
"Неправильное значение хеша. (0x80091007)", requestid: 56
, так же о том что проблема с подписью говорит КриптоАрм (если сохранить данные для подписи и саму подпись в файлы и передать КриптоАрм). Работаю таким образом:

1. Вызываю SignCreate и передаю в dataToSign base64-кодированную XML. Код:

Код:
var CADESCOM_CADES_BES = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
var CADESCOM_BASE64_TO_BINARY = 1;
function SignCreate(certSubjectName, dataToSign, id) {
    certSubjectName = $("#cert_info #subject b").text().replace("CN=", "");
    return new Promise(function (resolve, reject) {
        cadesplugin.async_spawn(function* (args) {
            try {
                if (certSubjectName === "") {
                    alert("Не выбран сертификат");
                    return;
                }
                var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
                yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
                var CertificatesObj = yield oStore.Certificates;
                var oCertificates = yield CertificatesObj.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);

                var Count = yield oCertificates.Count;
                if (Count == 0) {
                    throw ("Certificate not found: " + args[0]);
                }
                var oCertificate = yield oCertificates.Item(1);
                var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
                yield oSigner.propset_Certificate(oCertificate);

                var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
                yield oSignedData.propset_Content(dataToSign);

                var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);

                yield oStore.Close();

                args[2](sSignedMessage);
                Verify(sSignedMessage, dataToSign); //Здесь вызываю проверку
                $("#SignatureTxtBox").html(sSignedMessage);

                SendSigninData(sSignedMessage, id);

            }
            catch (e) {
                args[3]("Failed to create signature. Error: " + cadesplugin.getLastError(err));
            }
        }, certSubjectName, dataToSign, resolve, reject);
    });
}


2.Сама функция Verify
Код:
function Verify(sSignedMessage, dataToVerify) {
    var oSignedData = cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
    try {
        // Значение свойства ContentEncoding должно быть задано
        // до заполнения свойства Content
        oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
        oSignedData.Content = dataToVerify;
                oSignedData.then(function (data) {
            data.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
        });
    } catch (err) {
        alert("Failed to verify signature. Error: " + cadesplugin.getLastError(err));
        return false;
    }

    return true;
}


Её ответ
Цитата:
{message: "Неправильное значение хеша. (0x80091007)", requestid: 56, type: "error"}


Подскажите пожалуйста в чем может быть проблема ?

Файл данных : data.txt (1kb) загружен 1 раз(а). , Файл подписи: sign.txt (3kb) загружен 1 раз(а).

PS если набор подписываемых данных (xml) положить в файл и подписать той же подписью в КриптоАРМ, то проверка подписи в криптоАРМ проходит корректно

Отредактировано пользователем 26 ноября 2020 г. 15:58:50(UTC)  | Причина: Не указана

Offline Андрей *  
#2 Оставлено : 26 ноября 2020 г. 17:26:18(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Здравствуйте.

dataToSign - в base64.
Чтобы подписался именно XML (который был закодирован) - необходимо сообщить об этом до присвоения данных.

Выставить для ContentEncoding - CADESCOM_BASE64_TO_BINARY
и только потом oSignedData.propset_Content(dataToSign);
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
sergey.kosta оставлено 26.11.2020(UTC)
Offline sergey.kosta  
#3 Оставлено : 26 ноября 2020 г. 18:08:22(UTC)
sergey.kosta

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.11.2020(UTC)
Сообщений: 4
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Сделал как Вы сказали, однако ошибка осталась.

Код:
var CADESCOM_CADES_BES = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
var CADESCOM_BASE64_TO_BINARY = 1;

function SignCreate(certSubjectName, dataToSign, id) {
    //dataToSign = $("#DataToSignTxtBox").val();
    certSubjectName = $("#cert_info #subject b").text().replace("CN=", "");
    return new Promise(function (resolve, reject) {
        cadesplugin.async_spawn(function* (args) {
            try {
                if (certSubjectName === "") {
                    alert("Не выбран сертификат");
                    return;
                }
                var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
                yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
                    CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
                var CertificatesObj = yield oStore.Certificates;
                var oCertificates = yield CertificatesObj.Find(
                    CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);

                var Count = yield oCertificates.Count;
                if (Count == 0) {
                    throw ("Certificate not found: " + args[0]);
                }
                var oCertificate = yield oCertificates.Item(1);
                var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
                yield oSigner.propset_Certificate(oCertificate);

                var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
                oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
                yield oSignedData.propset_Content(dataToSign);

                var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);

                yield oStore.Close();

                args[2](sSignedMessage);
                Verify(sSignedMessage, dataToSign);
                $("#SignatureTxtBox").html(sSignedMessage);

                SendSigninData(sSignedMessage, id);

            }
            catch (e) {
                args[3]("Failed to create signature. Error: " + cadesplugin.getLastError(err));
            }
        }, certSubjectName, dataToSign, resolve, reject);
    });
}


Offline Андрей *  
#4 Оставлено : 26 ноября 2020 г. 18:28:18(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
это не правильно:
Цитата:
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;


должно быть так:
yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY);

Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Андрей * за этот пост.
4ebur@shk@ оставлено 26.11.2020(UTC), sergey.kosta оставлено 26.11.2020(UTC)
Offline Андрей *  
#5 Оставлено : 26 ноября 2020 г. 18:30:52(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Андрей * за этот пост.
4ebur@shk@ оставлено 26.11.2020(UTC), sergey.kosta оставлено 26.11.2020(UTC)
Offline sergey.kosta  
#6 Оставлено : 26 ноября 2020 г. 19:03:24(UTC)
sergey.kosta

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.11.2020(UTC)
Сообщений: 4
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Внутри Verify теперь не входит в блок catch, означает ли это что проверка прошла успешно ?

Отредактировано пользователем 26 ноября 2020 г. 19:09:27(UTC)  | Причина: Не указана

Offline Андрей *  
#7 Оставлено : 26 ноября 2020 г. 19:40:27(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 12,630
Мужчина
Российская Федерация

Сказал «Спасибо»: 494 раз
Поблагодарили: 2035 раз в 1579 постах
Автор: sergey.kosta Перейти к цитате
Внутри Verify теперь не входит в блок catch, означает ли это что проверка прошла успешно ?

Да, можете перепроверить ещё в сторонних утилитах
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
sergey.kosta оставлено 26.11.2020(UTC)
Offline sergey.kosta  
#8 Оставлено : 26 ноября 2020 г. 20:15:40(UTC)
sergey.kosta

Статус: Новичок

Группы: Участники
Зарегистрирован: 25.11.2020(UTC)
Сообщений: 4
Российская Федерация

Сказал(а) «Спасибо»: 4 раз
Спасибо. Все работает
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.