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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Артем (ЦИТ БАРС)  
#1 Оставлено : 7 августа 2020 г. 15:09:28(UTC)
Артем (ЦИТ БАРС)

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

Группы: Участники
Зарегистрирован: 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 раз(а).
Offline Александр Лавник  
#2 Оставлено : 7 августа 2020 г. 15:14:26(UTC)
Александр Лавник

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

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

Сказал «Спасибо»: 53 раз
Поблагодарили: 773 раз в 715 постах
Здравствуйте.

Какой алгоритм открытого ключа в используемом сертификате?
Техническую поддержку оказываем тут
Наша база знаний
Offline Артем (ЦИТ БАРС)  
#3 Оставлено : 7 августа 2020 г. 15:28:33(UTC)
Артем (ЦИТ БАРС)

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

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Анатолий Беляев  
#4 Оставлено : 13 августа 2020 г. 17:00:10(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)  | Причина: Не указана

Техническую поддержку оказываем тут.
Наша база знаний.
Наша страничка в Instagram.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.