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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline MikhailSSS  
#1 Оставлено : 12 декабря 2022 г. 16:18:51(UTC)
MikhailSSS

Статус: Участник

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

Добрый день.
Подскажите примеры для JavaScript lkz cadesplugin_api.js - шифрования файла!
Не надо мне тыкать мол смотри в C# или в Microsoft мол как там и что куда передаётся.
Беру ваш пример и нифига не понимаю, что в функцию run() НАДО ПЕРЕДАТЬ!!! ЧТО БЫ ЗАРАБОТАЛО.
ДАЙТЕ РАБОЧИЙ ПРИМЕР ГОСПОДА... ИНАЧЕ СПРАВОЧНИК НИОЧЁМ.
(Все типы подписаний я уже сделал и всё работает на AJAX-PHP связке прекрасно как часы)


По ссылке: https://docs.cryptopro.ru/cades/plugin/plugin-samples/plugin-samples-enveloped-data

Вот код примера:

var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;

function run() {
// Задаем SubjectName для используемых сертификатов
var certSignatureSubjectName = "SignCert";
var certEncryptSubjectName = "EncryptCert";

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_SUBJECT_NAME, certSignatureSubjectName);
if (oCertificates.Count === 0) {
alert("Certificate not found: " + certSubjectName);
return;
}
var oCertSignature = oCertificates.Item(1);

oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certEncryptSubjectName);
if (oCertificates.Count === 0) {
alert("Certificate not found: " + certSubjectName);
return;
}
var oCertEncrypt = oCertificates.Item(1);
oStore.Close();

// Задание свойства Content сбрасывает состояние объекта, поэтому сначала заполняем его
var oEnvelopedData = cadesplugin.CreateObject("CAdESCOM.CPEnvelopedData");
var expectedContent = "Message to encrypt с русскими буквами";
oEnvelopedData.Content = expectedContent;

oEnvelopedData.Recipients.Add(oCertSignature);
oEnvelopedData.Recipients.Add(oCertEncrypt);

var encMessage = oEnvelopedData.Encrypt(cadesplugin.CADESCOM_ENCODE_BASE64);
if ("" === encMessage) {
alert("oEnvelopedData.Encrypt failed");
}

// Проверяем, что полученное расшифрованное сообщение соответствует исходному
var oEnvelopedData2 = cadesplugin.CreateObject("CAdESCOM.CPEnvelopedData");
oEnvelopedData2.Decrypt(encMessage);
var content = oEnvelopedData2.Content;
if (expectedContent !== content) {
alert("oEnvelopedData.Decrypt failed");
}
}
Offline MikhailSSS  
#2 Оставлено : 12 декабря 2022 г. 16:21:44(UTC)
MikhailSSS

Статус: Участник

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

И главное!!!! Надо ли ДО шифрования подписывать файл или нет? И его уже вложанный туда передавать...
И почему там ДВА сертификата, если CriptoPRO 5.0 установленная на локальном компьбтере шифрует одним....
Как всё сложно БЛИН!!! Дай те кнонить расжёванный пример для JAvAScript.

d'oh! Ну как же, вы не знаете что такое KakES-БЕЗ-74 да это же каждый школьник знает, кого не спроси...
Только я не в дугу и не в тую... пардон, никогда этим не занимался.

Отредактировано пользователем 12 декабря 2022 г. 16:27:47(UTC)  | Причина: Не указана

Offline Андрей *  
#3 Оставлено : 12 декабря 2022 г. 16:46:17(UTC)
Андрей *

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

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

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

1. Обычно ещё шифруют, указывая сертификат отправителя, чтобы потом можно было расшифровать своим ключом

2. Насчёт подписывать или нет - требования у ИС какие?

3. в Content указывать данные для шифрования, предварительно указав ContentEncoding.


yield oEnvelopedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
yield oEnvelopedData.propset_Content(sBase64Data);

sBase64Data - данные, закодированные в base64.
Прочитать из файла - пример есть при подписании с использованием FileAPI.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#4 Оставлено : 12 декабря 2022 г. 17:03:19(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
4. По сертификатам - можно расширить функцию, передавая массив сертификатов (строки в base64), далее использовать в цикле
oCertEncrypt[i].import( сертификат в base64 ), сейчас в примере показано как работать с сертификатами из личного хранилища, обычно сертификаты получателей в хранилище AddessBook, а не My.
Техническую поддержку оказываем тут
Наша база знаний
Offline MikhailSSS  
#5 Оставлено : 12 декабря 2022 г. 17:19:07(UTC)
MikhailSSS

Статус: Участник

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

ОК, с этим понятно.
То есть, я уже ПОДПИСАННЫЙ ФАЙЛ *.sig (по средством XMSDSid или CADESBES) - передаю тело как переменную в expectedContent.
Дальше, я шифрую base64_encode пару сертификатов. а) Свой - подставляю в переменную certSignatureSubjectName и б) и например ФНС - в переменную certEncryptSubjectName

Это oCertSignature = oCertificates.Item(1); // уже "кликнутый" из массива?
И "финалочка" должно получиться в переменной encMessage;

Вопросы:
1) Как на компьютере подписывает сама программа CriptoPRO CPS 5.0 - однима сертификатом. Это случай из этого примера или из другой жизни?
2) Получим тут encMessage; файл из кроказябриков, а как например быть с СЭДО ПРОКАТОИВ ФСС v.2 - надо под неё свой шаблон разборщик писать и где-то дёргать переменные, это есть в cadesplugin_api.js?
Offline MikhailSSS  
#6 Оставлено : 12 декабря 2022 г. 17:24:11(UTC)
MikhailSSS

Статус: Участник

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

Автор: MikhailSSS Перейти к цитате
ОК, с этим понятно.
То есть, я уже ПОДПИСАННЫЙ ФАЙЛ *.sig (по средством XMSDSid или CADESBES) - передаю тело как переменную в expectedContent.
Дальше, я шифрую base64_encode пару сертификатов. а) Свой - подставляю в переменную certSignatureSubjectName и б) и например ФНС - в переменную certEncryptSubjectName

Это oCertSignature = oCertificates.Item(1); // уже "кликнутый" из массива?
И "финалочка" должно получиться в переменной encMessage;

Вопросы:
1) Как на компьютере подписывает сама программа CriptoPRO CPS 5.0 - однима сертификатом. Это случай из этого примера или из другой жизни?
2) Получим тут encMessage; файл из кроказябриков, а как например быть с СЭДО ПРОКАТОИВ ФСС v.2 - надо под неё свой шаблон разборщик писать и где-то дёргать переменные, это есть в cadesplugin_api.js?


И ещё меня адски напрягягает название CADESCOM_BASE64_TO_BINARY!
По идее если тело файла UTF-8 XMSDSid или CADESBES - прекрасно его в Base64_Encode переводят,
Также я научился делать с телом и тегами Windows-1251 - что бы "получатель" имел на выходе что сам и хотел, то есть Винду в чистогане.
Или CADESCOM_BASE64_TO_BINARY относится к предфинальной части..., когда уже все тела собраны до финала?
Offline MikhailSSS  
#7 Оставлено : 12 декабря 2022 г. 17:27:18(UTC)
MikhailSSS

Статус: Участник

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

Brick wall
var oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSignatureSubjectName);
if (oCertificates.Count === 0) {
alert("Certificate not found: " + certSubjectName);
return;
}
var oCertSignature = oCertificates.Item(1);

oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certEncryptSubjectName);
if (oCertificates.Count === 0) {
alert("Certificate not found: " + certSubjectName);
return;
}
var oCertEncrypt = oCertificates.Item(1);


Опять 2 сертификата

Отредактировано пользователем 12 декабря 2022 г. 17:28:25(UTC)  | Причина: Не указана

Offline MikhailSSS  
#8 Оставлено : 12 декабря 2022 г. 17:32:17(UTC)
MikhailSSS

Статус: Участник

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

Код:
    var CAPICOM_CURRENT_USER_STORE = 2;
    var CAPICOM_MY_STORE = "My";
    var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;

    function run() {
        // Задаем SubjectName для используемых сертификатов
        var certSignatureSubjectName = "SignCert";
        var certEncryptSubjectName = "EncryptCert";

        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_SUBJECT_NAME, certSignatureSubjectName);
        if (oCertificates.Count === 0) {
            alert("Certificate not found: " + certSubjectName);
            return;
        }
        var oCertSignature = oCertificates.Item(1);

        oCertificates = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certEncryptSubjectName);
        if (oCertificates.Count === 0) {
            alert("Certificate not found: " + certSubjectName);
            return;
        }
        var oCertEncrypt = oCertificates.Item(1);
        oStore.Close();

        // Задание свойства Content сбрасывает состояние объекта, поэтому сначала заполняем его
        var oEnvelopedData = cadesplugin.CreateObject("CAdESCOM.CPEnvelopedData");
        var expectedContent = "Message to encrypt с русскими буквами";
        oEnvelopedData.Content = expectedContent;

        oEnvelopedData.Recipients.Add(oCertSignature);
        oEnvelopedData.Recipients.Add(oCertEncrypt);

        var encMessage = oEnvelopedData.Encrypt(cadesplugin.CADESCOM_ENCODE_BASE64);
        if ("" === encMessage) {
            alert("oEnvelopedData.Encrypt failed");
        }

        // Проверяем, что полученное расшифрованное сообщение соответствует исходному
        var oEnvelopedData2 = cadesplugin.CreateObject("CAdESCOM.CPEnvelopedData");
        oEnvelopedData2.Decrypt(encMessage);
        var content = oEnvelopedData2.Content;
        if (expectedContent !== content) {
            alert("oEnvelopedData.Decrypt failed");
        }
    }


запускаю сие в консоли: run();

Пишет: Uncaught TypeError: cadesplugin.CreateObject is not a function
run debugger eval code:10
<anonymous> debugger eval code:50
Shame on you


Все плагины загружены, как положено.
Что не так... почему не читает сертификаты?

Отредактировано пользователем 12 декабря 2022 г. 17:32:51(UTC)  | Причина: Не указана

Offline MikhailSSS  
#9 Оставлено : 12 декабря 2022 г. 17:44:35(UTC)
MikhailSSS

Статус: Участник

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

Автор: Андрей * Перейти к цитате
4. По сертификатам - можно расширить функцию, передавая массив сертификатов (строки в base64), далее использовать в цикле
oCertEncrypt[i].import( сертификат в base64 ), сейчас в примере показано как работать с сертификатами из личного хранилища, обычно сертификаты получателей в хранилище AddessBook, а не My.


А где я возьму: AddessBook, а не My если в API уже задекларировано: var CAPICOM_MY_STORE = "My";
Или: var CAPICOM_CURRENT_USER_STORE = 2; // Это и есть "AddessBook" где валяются сертификаты: ФСС, ФНС, МЧС, Минцифры, Рос...?

СПАСИБО, БУДУ РАЗБИРАТЬСЯ Brick wall С ЭТОЙ ВСЕЙ НЕПОНЯТНОЙ ШЛЯПОЙ Boo hoo!
Offline Андрей *  
#10 Оставлено : 12 декабря 2022 г. 20:35:54(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Цитата:
А где я возьму: AddessBook, а не My если в API уже задекларировано: var CAPICOM_MY_STORE = "My";


это в примере указана константа строкой, равной My.
Вместо My можно писать другие имена хранилищ.
Root, CA, AddessBook

Цитата:
CADESCOM_BASE64_TO_BINARY

необходимо использовать, чтобы корректно передавать данные между приложением (код в браузере) и библиотекой.
Более подробно описано в разделе Особенности представления данных... на примере с подписанием.


Цитата:

Это oCertSignature = oCertificates.Item(1); // уже "кликнутый" из массива?

это из примера поиска в хранилище, первый подходящий по условиям поиска сертификат.

Цитата:

Вопросы:
1) Как на компьютере подписывает сама программа CriptoPRO CPS 5.0 - однима сертификатом. Это случай из этого примера или из другой жизни?
2) Получим тут encMessage; файл из кроказябриков, а как например быть с СЭДО ПРОКАТОИВ ФСС v.2 - надо под неё свой шаблон разборщик писать и где-то дёргать переменные, это есть в cadesplugin_api.js?


Подписывается в коде - одним сертификатом (который указан для подписания),
при шифровании можно использовать множество сертификатов, для них будет обеспечена возможность расшифровки с использованием соответствующего закрытого ключа.


файл из кроказябриков - это бинарные данные, их можно закодировать в base64, если требуется для какой-то ИС.

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