Статус: Новичок
Группы: Участники
Зарегистрирован: 06.08.2019(UTC) Сообщений: 8
|
При попытке произвести подпись хэша выходит ошибка Указан неправильный алгоритм. (0x80090008) на oRawSignature.SignHash Код:
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 CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY = 2;
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 = 101;
function SignCreate(certSubjectName, dataToSign) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
try {
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 issuerName = extract(yield oCertificate.IssuerName, 'CN=');
var serialNumber = yield oCertificate.SerialNumber;
var ValidToDate = yield oCertificate.ValidToDate;
var ValidFromDate = yield oCertificate.ValidFromDate;
hiddenStrings.Set("certInfo", certSubjectName + ';' + issuerName + ';' + serialNumber + ';'
+ ValidToDate + ';' + ValidFromDate);
// Подпись по хэшзначению
// Создаем объект CAdESCOM.HashedData
var oHashedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.HashedData");
// Алгоритм хэширования нужно указать до того, как будут переданы данные
oHashedData.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411;
// Передаем данные
oHashedData.Hash(dataToSign);
// Вычисляем подпись
// Создаем объект CAdESCOM.RawSignature
var oRawSignature = yield cadesplugin.CreateObjectAsync("CAdESCOM.RawSignature");
// Вычисляем значение подписи
try {
var sRawSignature = yield oRawSignature.SignHash(oHashedData, oCertificate);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
return;
}
args[2](sRawSignature);
}
catch (e) {
args[3]("Failed to create signature. Error: " + cadesplugin.getLastError(e));
}
}, certSubjectName, dataToSign, resolve, reject);
});
}
При этом на тестовой странице все отрабатывает хорошо, и если я произвожу подпись Cades в том же месте Код:
// Подпись
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(oCertificate);
yield oSigner.propset_Options(CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
yield oSignedData.propset_Content(dataToSign);
var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES);
yield oStore.Close();
args[2](sSignedMessage);
Подпись формируется Скрин реестра: c411565f66.jpg (364kb) загружен 5 раз(а).Скрин проверки плагина на тестовой странице (подпись происходит) 151c03e56e.jpg (37kb) загружен 5 раз(а).Сертификат сгенерирован на Тестовом УЦ 11850fad74.jpg (88kb) загружен 6 раз(а).
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 30.06.2016(UTC) Сообщений: 3,376 Сказал «Спасибо»: 53 раз Поблагодарили: 773 раз в 715 постах
|
Здравствуйте.
Какой алгоритм открытого ключа в используемом сертификате? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.08.2019(UTC) Сообщений: 8
|
Добрый день 1e7feb32c5.jpg (128kb) загружен 7 раз(а). TestArtem.zip (1kb) загружен 4 раз(а).Поменял на CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 - ошибка таже Я вижу что в сертификате указано 34.10 а я передаю 3411, но в перечислении CADESCOM_HASH_ALGORITHM я не нашел 3410, что необходимо указывать в таком случае? И попутно вопрос, как определить алгоритм по сертификату чтобы не задавать его вручную? Отредактировано пользователем 7 августа 2020 г. 15:29:34(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Цитата:// Алгоритм хэширования нужно указать до того, как будут переданы данные oHashedData.Algorithm = CADESCOM_HASH_ALGORITHM_CP_GOST_3411; вот тут нужно задать правильный алгоритм 3411_2012_256 для вашего сертификата и задавать правильно свойства в асинхронном варианте свойства обьектов задаются через propset_*() методы. Отредактировано пользователем 13 августа 2020 г. 17:12:12(UTC)
| Причина: Не указана |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close