Статус: Новичок
Группы: Участники
Зарегистрирован: 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) загружен 2 раз(а).PS если набор подписываемых данных (xml) положить в файл и подписать той же подписью в КриптоАРМ, то проверка подписи в криптоАРМ проходит корректно Отредактировано пользователем 26 ноября 2020 г. 15:58:50(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,673   Сказал «Спасибо»: 572 раз Поблагодарили: 2301 раз в 1802 постах
|
Здравствуйте.
dataToSign - в base64. Чтобы подписался именно XML (который был закодирован) - необходимо сообщить об этом до присвоения данных. Выставить для ContentEncoding - CADESCOM_BASE64_TO_BINARY и только потом oSignedData.propset_Content(dataToSign); |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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);
});
}
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,673   Сказал «Спасибо»: 572 раз Поблагодарили: 2301 раз в 1802 постах
|
это не правильно: Цитата: oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY; должно быть так: yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_BASE64_TO_BINARY); |
|
 2 пользователей поблагодарили Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,673   Сказал «Спасибо»: 572 раз Поблагодарили: 2301 раз в 1802 постах
|
|
|
 2 пользователей поблагодарили Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.11.2020(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 4 раз
|
Внутри Verify теперь не входит в блок catch, означает ли это что проверка прошла успешно ? Отредактировано пользователем 26 ноября 2020 г. 19:09:27(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,673   Сказал «Спасибо»: 572 раз Поблагодарили: 2301 раз в 1802 постах
|
Автор: sergey.kosta  Внутри Verify теперь не входит в блок catch, означает ли это что проверка прошла успешно ? Да, можете перепроверить ещё в сторонних утилитах |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 25.11.2020(UTC) Сообщений: 4  Сказал(а) «Спасибо»: 4 раз
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close