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

Уведомление

Icon
Error

23 Страницы«<45678>»
Опции
К последнему сообщению К первому непрочитанному
Offline VoimiX  
#51 Оставлено : 27 августа 2015 г. 16:22:34(UTC)
VoimiX

Статус: Активный участник

Группы: Участники
Зарегистрирован: 07.12.2011(UTC)
Сообщений: 78

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 5 раз в 2 постах
У меня ещё вопрос:

В старой версии плагина был возможен следующий код
Код:
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;

Есть ли возможность указать способ кодирования данных в новом плагине?
Или там по дефолту ContentEncoding = CADESCOM_BASE64_TO_BINARY?
Offline cross  
#52 Оставлено : 27 августа 2015 г. 17:53:56(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Автор: VoimiX Перейти к цитате
У меня ещё вопрос:

В старой версии плагина был возможен следующий код
Код:
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;

Есть ли возможность указать способ кодирования данных в новом плагине?
Или там по дефолту ContentEncoding = CADESCOM_BASE64_TO_BINARY?


oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY)
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Павел Смирнов  
#53 Оставлено : 28 августа 2015 г. 9:28:22(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Автор: pp00578 Перейти к цитате
Вы имеете ввиду, если сайт был разработан с использованием архитектуры NPAPI

Да.

Техническую поддержку оказываем тут.
Наша база знаний.
Offline ve2  
#54 Оставлено : 28 августа 2015 г. 16:31:16(UTC)
ve2

Статус: Активный участник

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

Поблагодарили: 3 раз в 3 постах
Спасибо. У меня на Windows всё получилось. Приложение переделал на новый API, на первый взгляд работает нормально.
Есть небольшие замечания, скорее придирки, не критичные.

1) Расширение может быть установлено, но отключено в chrome://extensions
тогда в консоль выпадает ошибка

cadesplugin_api.js:143
GET chrome-extension://iifchhfnnmpdbibifmljnfjhpififfog/nmcades_plugin_api.js net::ERR_FAILED

после таймаута работа продолжится, но возможно, имеет смысл как-то обрабатывать эту ошибку в cadesplugin_api.


2) В примере async_cades_bes_sample.html при загрузке страницы в консоли ошибка

async_cades_bes_sample.html:1
Uncaught (in promise) Object {message: "Provider type not defined. (0x80090017)", requestid: 19, type: "error"}

в нашем приложении такая проблема нигде не проявляется, но мне не понятен её источник поэтому немного напрягает.








Offline VoimiX  
#55 Оставлено : 28 августа 2015 г. 18:01:16(UTC)
VoimiX

Статус: Активный участник

Группы: Участники
Зарегистрирован: 07.12.2011(UTC)
Сообщений: 78

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 5 раз в 2 постах
Исправьте ещё грамматические ошибки в cadesplugin_api.js

"Не доступен" пишется слитно в данном контексте.

Offline cross  
#56 Оставлено : 28 августа 2015 г. 18:22:17(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Автор: ve2 Перейти к цитате

2) В примере async_cades_bes_sample.html при загрузке страницы в консоли ошибка

async_cades_bes_sample.html:1
Uncaught (in promise) Object {message: "Provider type not defined. (0x80090017)", requestid: 19, type: "error"}

в нашем приложении такая проблема нигде не проявляется, но мне не понятен её источник поэтому немного напрягает.

У вас нет провайдеров 75 типа, тестовая страница еще выводит версию провайдера если он установлен.
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline cross  
#57 Оставлено : 28 августа 2015 г. 18:22:34(UTC)
Анатолий Беляев

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

Группы: Администраторы, Участники
Зарегистрирован: 24.11.2009(UTC)
Сообщений: 965
Откуда: Crypto-Pro

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
Автор: VoimiX Перейти к цитате
Исправьте ещё грамматические ошибки в cadesplugin_api.js

"Не доступен" пишется слитно в данном контексте.



Исправим. Спасибо!
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline VoimiX  
#58 Оставлено : 28 августа 2015 г. 18:36:46(UTC)
VoimiX

Статус: Активный участник

Группы: Участники
Зарегистрирован: 07.12.2011(UTC)
Сообщений: 78

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 5 раз в 2 постах
Ещё вопрос:

По асинхронному вызову.

Я написал ф-ию sign, которая подписывает данные используя новый асинхронный api.
Но как вызывать её, чтоб получить значение подписи на выходе?

В старом api всё было синхронно, и я в коде везде писал
var signatureBase64 = sign('hello world');

Но если внутри ф-ии асинхронные вызовы, то такой подход не работает.

Как в данном случае можно возвратить значение? Необязательно, чтоб это было именно возвращаемое значение.
Может существуют уже асинхронные механизмы? Может можно подписаться на какой-нибудь callback?
Как узнать что ф-ия sign() уже завершилась из вне?

Что-нибудь типа

Код:
sign('hello', function (data)
{
alert('signature from sign()=' + data)
}
 );


Прикладываю свою ф-ию
Как передать значение переменной Signature наружу?

Код:

function sign(dataToSign, thumbprint) {
    cadesplugin.async_spawn(function*(arg) {

        if (thumbprint == null) {
            thumbprint = 'a145929a81885726e8ddfe73d6ae4fd5429b734d';
            // thumbprint = $('#CertificateThumbprint').val();
        }
           
        if (thumbprint == null || thumbprint == '') {
            alert('Отпечаток не задан');
            return "";
        }

        try {
            var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.store");
            yield oStore.Open();
        } catch (err) {
            alert('Failed to create CAPICOM.store: ' + err.number);
            return "";
        }

        var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
        var all_certs = yield oStore.Certificates;
        var oCerts = yield all_certs.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);

        if (yield oCerts.Count == 0) {
            alert("Certificate not found");
            return ;
        }
        var certificate = yield oCerts.Item(1);

         
            
        var Signature;
        try
        {
            var errormes = "";
            try {
                var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
            } catch (err) {
                errormes = "Failed to create CAdESCOM.CPSigner: " + err.number;
                throw errormes;
            }
            var oSigningTimeAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");

            var CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME = 0;
            yield oSigningTimeAttr.propset_Name(CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME);
            var oTimeNow = new Date();
            yield oSigningTimeAttr.propset_Value(oTimeNow);
            var attr = yield oSigner.AuthenticatedAttributes2;
            yield attr.Add(oSigningTimeAttr);


            var oDocumentNameAttr = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
            var CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME = 1;
            oDocumentNameAttr.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME);
            oDocumentNameAttr.propset_Value("Document Name");
            yield attr.Add(oDocumentNameAttr);

            if (oSigner) {
                oSigner.propset_Certificate(certificate);
            }
            else {
                errormes = "Failed to create CAdESCOM.CPSigner";
                throw errormes;
            }


            var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
            var CADES_BES = 1;
            var CADESCOM_BASE64_TO_BINARY = 1;

            if (dataToSign) {

                oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
                oSignedData.propset_Content(dataToSign);
                oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
                try {
                    Signature = yield oSignedData.SignCades(oSigner, CADES_BES);
                    alert('Signature OK-' + Signature);
                    return Signature;
                }
                catch (err) {
                    errormes = "Не удалось создать подпись из-за ошибки: " + GetErrorMessage(err);
                    throw errormes;
                }
            }
            // document.getElementById("SignatureTxtBox").innerHTML = Signature;
            //SignatureFieldTitle[0].innerHTML = "Подпись сформирована успешно:";

            
        }
        catch(err)
        {
            //SignatureFieldTitle[0].innerHTML = "Возникла ошибка:";
            //document.getElementById("SignatureTxtBox").innerHTML = err;
            alert('Signature Error:' + err);
        }
    }); //cadesplugin.async_spawn
    }

Отредактировано пользователем 28 августа 2015 г. 22:06:55(UTC)  | Причина: Не указана

Offline Павел Смирнов  
#59 Оставлено : 28 августа 2015 г. 23:27:57(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Автор: VoimiX Перейти к цитате
Я написал ф-ию sign, которая подписывает данные используя новый асинхронный api.
Но как вызывать её, чтоб получить значение подписи на выходе?


Например, с помощью того же Promise:

Код:
sign('hello').then(function (data)
{
alert('signature from sign()=' + data)
}
 );


Код:

function sign(dataToSign, thumbprint) {

    var sign_resolve;
    var sign_reject;
    var result = new Promise(function(resolve, reject)
    {
        sign_resolve = resolve;
        sign_reject = reject;
    });

    cadesplugin.async_spawn(function*(arg) {
                   ...
                    alert('Signature OK-' + Signature);
                    //return Signature;
                    return sign_resolve(Signature);
                   ...
    }); //cadesplugin.async_spawn

    return result;
}


Только по-хорошему надо ещё с reject разобраться.
Техническую поддержку оказываем тут.
Наша база знаний.
thanks 1 пользователь поблагодарил Павел Смирнов за этот пост.
IOFeed оставлено 31.08.2015(UTC)
Offline ve2  
#60 Оставлено : 29 августа 2015 г. 11:54:17(UTC)
ve2

Статус: Активный участник

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

Поблагодарили: 3 раз в 3 постах
Не уверен, что в эту ветку, но обнаружилась эта проблема при тестировании нового плагина.
Берем условный код

var oStore = yield cadesplugin.CreateObjectAsync("CAPICOM.store");
yield oStore.Open();
var certs = yield oStore.Certificates; /* здесь */
var certCnt = yield certs.Count;

если нет ни одного сертификата при получении списка происходит исключение
Cannot find object or property при получении списка
то есть объект certs не возвращается.
В версии NPAPI на Firefox поведение аналогично.

Но в Explorer, при использовании объекта ActiveXObject("CAPICOM.store"),
который является прототипом для функции вашего плагина,
в аналогичном коде объект списка возвращается, а вот его свойство Count равно нулю.
И это поведение представляется логичным, поскольку пустой список
это не то же самое, что его отсутствие или ошибка доступа к списку.

Отредактировано пользователем 29 августа 2015 г. 12:48:19(UTC)  | Причина: дополнительно проверял в разных браузерах

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