Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
Делаю глобальную переменную linkPrivateKey
Делаю мультиподписание, при первом проходе сохраняю Приватный ключ.
linkPrivateKey = yield certificate.PrivateKey; linkPrivateKey.propset_CachePin(true);
Мульти-подписание проходит на УРА, и под конец выставляю null для linkPrivateKey, но если я без перезагрузки еще раз пытаюсь подписать, то уже пароль не спрашивается. Может кто сможет подсказать как правильно сбрасывать
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Для асинхронного плагина можно принудительно удалить все обьекты вызвав метод ReleasePluginObjects у обьекта cadesplugin. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
cpcsp_chrome_nmcades && cpcsp_chrome_nmcades.ReleasePluginObjects(); Я вызываю данную функцию, она сбрасывает, но при повторном вызове и подписании опять вызывая ReleasePluginObjects вылетает виндовая ошибка Автор: cross Для асинхронного плагина можно принудительно удалить все обьекты вызвав метод ReleasePluginObjects у обьекта cadesplugin.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
У меня сам объект cadesplugin не содержит данную функцию ReleasePluginObjects.
Я использую cadesplugin_api.js....ранее монтирую её на страницу. Поэтому ReleasePluginObjects вызываю через cpcsp_chrome_nmcades
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Вам нужно обновить cadesplugin_api.js. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
https://www.cryptopro.ru...0/cadesplugin_api.js.zipОбновил, ReleasePluginObjects появился, но проблему не решил, всё также падает виндовая ошибка В логах всё чисто, точнее для последней reset команды ответ не пришел, из-за этого и ошибка виндовая. При первой очистки всё норм проходило 2017-11-07_14-53-23.png (20kb) загружен 14 раз(а). 2017-11-07_14-53-46.png (18kb) загружен 14 раз(а).Автор: cross Вам нужно обновить cadesplugin_api.js.
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
Можно пример кода который вызывает такое поведение? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
Автор: cross Можно пример кода который вызывает такое поведение? Функция подписания выглядит таким образом Код:function signXML_async(data) {
return cadesplugin.async_spawn(function* (args) {
var data = args[0];
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_XML_SIGNATURE_TYPE_ENVELOPED = 0;
var XmlDsigGost3410Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102001-gostr3411";
var XmlDsigGost3411Url = "urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr3411";
var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
//get all certificates
var all_certs = yield oStore.Certificates;
var fio = [ws[0].card.fio1, ws[0].card.fio2, ws[0].card.fio3].join(' ');
var fio = 'XXXX XXXX XXXX';//todo need delete line
//get necessary certificate by name
var oCerts = yield all_certs.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, fio, true);
//get count of certificates
var cnt = yield oCerts.Count;
//todo check cnt
var certificate = yield oCerts.Item(1);
//get certificate name
var nameCert = yield certificate.SubjectName;
if (!linkPrivateKey) {
linkPrivateKey = yield certificate.PrivateKey;
linkPrivateKey.propset_CachePin(true);
}
// Создаем объект CAdESCOM.CPSigner
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(certificate);
var oSignedXML = yield cadesplugin.CreateObjectAsync("CAdESCOM.SignedXML");
var sContent =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!-- \n" +
" Original XML doc file for sign example. \n" +
"-->\n" +
"<Envelope xmlns=\"urn:envelope\">\n" +
" <Data>\n" +
` ${JSON.stringify(data)}\n` +
" </Data>\n" +
" <Node xml:id=\"nodeID\">\n" +
" Hello, Node!\n" +
" </Node>\n" +
" \n" +
"</Envelope>";
yield oSignedXML.propset_Content(sContent);
yield oSignedXML.propset_SignatureType(CADESCOM_XML_SIGNATURE_TYPE_ENVELOPED);
yield oSignedXML.propset_SignatureMethod(XmlDsigGost3410Url);
yield oSignedXML.propset_DigestMethod(XmlDsigGost3411Url);
try {
sSignedMessage = yield oSignedXML.Sign(oSigner);
} catch (err) {
alert("Failed to create signature. Error: " + cadesplugin.getLastError(err));
resolve('');
}
yield oStore.Close();
return ({id: data.id, signature: sSignedMessage});
}, data);
}
Здесь глобальная переменная linkPrivateKeyfunction* resetCadesPlugin() { yield cadesplugin.ReleasePluginObjects(); return true }Вызываю функция подписи таким вот образом примерно. Т.е. при первом массовой подписи всё норм, но если не перезагружия страницу... еще раз попробовать массово подписывать другой стек данных, то валится при сбросе ( resetCadesPlugin();) Код:
promise = Promise.resolve();
$.each(store.milk_statistics, function (index, milk_stat) {
promise = promise.then(function () {
return signXML_async(milk_stat);
}).then(function (result) {
return doPostSignatureReleased({id: result.id, signature: result.signature, releaseddt:today(2)});
}).then(function (result) {
console.log("Signed!");
});
});
promise.then(function () {
linkPrivateKey.propset_CachePin(false);
linkPrivateKey = null;
delete linkPrivateKey;
resetCadesPlugin();
mask.unmask();
b.hide();
renderBody(releasedDate)
});
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.11.2017(UTC) Сообщений: 12 Сказал(а) «Спасибо»: 1 раз
|
Коллеги, есть вариант решения данной проблемы?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
К сожалению при двойном вызове метода удаления обьектов есть ошибка. Будет исправлена в след версии. Но если вы вызываете его однократно и потом не используете ранее созданных обьектов, по идее должно работать. Проверял на нашей тестовой странице https://www.cryptopro.ru...ge/cades_bes_sample.html . Нажимаю кнопку подписать, после этого в console выполняю cadesplugin.ReleasePluginObjects(), после этого еще раз нажимаю кнопку подписать и все подписывается. |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close