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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Helidan  
#1 Оставлено : 19 июля 2018 г. 11:32:32(UTC)
Helidan

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

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

Столкнулись с трудностью кэширования ПИНа для приватного ключа.
Асинхронная версия работает, а в IE11, где синхронная есть проблема.

В асинхронной версии имеем код для кэширования ПИНа:

var oCertificatePrivateKey = yield oCertificate.PrivateKey;
yield oCertificatePrivateKey.propset_CachePin(true);

где oCertificatePrivateKey - глобальная переменная.


Как сделать аналогично в синхронной версии, если

var oCertificatePrivateKey = oCertificate.PrivateKey;

oCertificatePrivateKey.CachePin = true; - не работает
oCertificatePrivateKey.ChangePin(true); - не работает

Собственно код для IE:
Код:

var CADESCOM_CADES_BES = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;

function SignCreate(oCertificate, hashAlg, sHashValue) {
    var oHashedData = cadesplugin.CreateObject(
        "CAdESCOM.HashedData"
    );

    // Инициализируем объект заранее вычисленным хэш-значением
    // Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
    oHashedData.Algorithm = hashAlg;
    oHashedData.SetHashValue(sHashValue);
    var oRawSignature = cadesplugin.CreateObject(
        "CAdESCOM.RawSignature"
    );

    // Вычисляем значение подписи
    var oCertificatePrivateKey = oCertificate.PrivateKey;
    oCertificatePrivateKey.CachePin = true;

    var sRawSignature = oRawSignature.SignHash(
        oHashedData,
        oCertificate
    );

}

function getCertificatesBySubjectName(certSubjectName) {
    var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
    oStore.Open(
        CAPICOM_CURRENT_USER_STORE,
        CAPICOM_MY_STORE,
        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
    );

    var oCertificates = oStore.Certificates.Find(
        CAPICOM_CERTIFICATE_FIND_ISSUER_NAME,
        certSubjectName
    );
    if (oCertificates.Count == 0) {
        sap.m.MessageToast.show("Certificate not found: " + certSubjectName);
        return;
    }
    var aCertificates = [];
    for (var i = 0; i < oCertificates.Count; i++) {
        var oCertificate = oCertificates.Item(i + 1);
        var oCertificateSubjectName = oCertificate.SubjectName;
        var oCertificateIssuerName = oCertificate.IssuerName;
        var oCertificateSerialNumber = oCertificate.SerialNumber;
        var oCertificateValidFromDate = oCertificate.ValidFromDate;
        var oCertificateValidToDate = oCertificate.ValidToDate;
        var oCertificatePrivateKey = oCertificate.PrivateKey;

        // oCertificatePrivateKey.propset_CachePin(true);
                        
        aCertificates.push({
            oCertificate: oCertificate,
            SubjectName: oCertificateSubjectName,
            IssuerName: oCertificateIssuerName,
            SerialNumber: oCertificateSerialNumber,
            ValidFromDate: new Date(oCertificateValidFromDate),
            ValidToDate: new Date(oCertificateValidToDate),
            PrivateKey: oCertificatePrivateKey
        });
    }

    return aCertificates;
}

Отредактировано пользователем 19 июля 2018 г. 17:39:08(UTC)  | Причина: Не указана

Offline cross  
#2 Оставлено : 19 июля 2018 г. 14:10:06(UTC)
Анатолий Беляев

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
А что значит "не работает"?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Helidan  
#3 Оставлено : 19 июля 2018 г. 14:33:37(UTC)
Helidan

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

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

Автор: cross Перейти к цитате
А что значит "не работает"?


Вот так выглядит:
err kriptopro.jpg (51kb) загружен 17 раз(а).

В данном варианте я делаю - oCertificatePrivateKey.CachePin = true;


Вот, что имею по итогу:
error kriptopro2.jpg (42kb) загружен 11 раз(а).

Отредактировано пользователем 19 июля 2018 г. 17:23:07(UTC)  | Причина: Не указана

Offline Helidan  
#4 Оставлено : 23 июля 2018 г. 9:08:38(UTC)
Helidan

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

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

Автор: cross Перейти к цитате
А что значит "не работает"?


Добрый день.

Никто не может подсказать по данной проблеме?
Offline cross  
#5 Оставлено : 23 июля 2018 г. 13:29:28(UTC)
Анатолий Беляев

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

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

Сказал(а) «Спасибо»: 3 раз
Поблагодарили: 174 раз в 152 постах
А вы можете еще показать код как вы вызываете SignCreate, хочется увидеть весь путь обьекта Certificate из которого вы получаете PrivateKey, а так же какой алгоритм открытого ключа у данного сертификата?
Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
Offline Helidan  
#6 Оставлено : 23 июля 2018 г. 14:57:53(UTC)
Helidan

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

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

Автор: cross Перейти к цитате
А вы можете еще показать код как вы вызываете SignCreate, хочется увидеть весь путь обьекта Certificate из которого вы получаете PrivateKey, а так же какой алгоритм открытого ключа у данного сертификата?


Код:

create: function(oDocument, oCertificate) {
            var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
            var sHash = oDocument.hash;
            var sGuid = oDocument.guid_c;
            var sIssuerName = oCertificate.IssuerName;
            var sSerialNumber = oCertificate.SerialNumber;
            oCertificate = oCertificate.oCertificate;
            var oDfd = jQuery.Deferred();
            if (cadesplugin.CreateObjectAsync) {
                SignCreate(oCertificate, CADESCOM_HASH_ALGORITHM_CP_GOST_3411, sHash).then(function(sSign) {
                        oDfd.resolve({
                            sign: sSign,
                            guid: sGuid,
                            signed: 0,
                            issuer: sIssuerName,
                            serno: sSerialNumber

                        });
                    },
                    function(error) {
                        oDfd.resolve({
                            sign: error,
                            guid: sGuid,
                            signed: 1,
                            issuer: sIssuerName,
                            serno: sSerialNumber
                        });
                        // oDfd.reject(error);
                        // sap.m.MessageToast.show(error);
                    });

            } else {
                try {
                    var sSign = SignCreate(oCertificate, CADESCOM_HASH_ALGORITHM_CP_GOST_3411, sHash);
                    oDfd.resolve({
                        sign: sSign,
                        guid: sGuid,
                        signed: 0,
                        issuer: sIssuerName,
                        serno: sSerialNumber
                    });
                } catch (e) {
                    oDfd.resolve({
                        sign: e,
                        guid: sGuid,
                        signed: 1,
                        issuer: sIssuerName,
                        serno: sSerialNumber
                    });
                }

            }
            return oDfd;
        }


Цитата:
алгоритм открытого ключа

Думаю имеете ввиду вот это:
open key.jpg (29kb) загружен 5 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.