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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline Андрей Писарев  
#21 Оставлено : 9 января 2017 г. 17:35:34(UTC)
Андрей *

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

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

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


UPD: при попытке decode BASE64 example.doc.p7s файла подпись проверяется, но содержимое все равно остается нечитабельным.


Во вложененном архиве подписанный файл с помощью плагина.

получается:после проверки в КриптоАРМ, извлекается файл, декодируется из base64 и только тогда читается средствами MS Word.

test.docx.p7s.zip (15kb) загружен 9 раз(а).

Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
SirSudo оставлено 09.01.2017(UTC)
Offline SirSudo  
#22 Оставлено : 9 января 2017 г. 17:40:54(UTC)
SirSudo

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

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

Сказал(а) «Спасибо»: 10 раз
А что, этот вариант тоже нужно рассмотреть. Где можно найти пример для создания отсоединенной подписи файла?

Правильно ли я понимаю, что это невозможно с помощью Browser Plugin создать присоединенную подпись так, чтобы подписанный файл был не в BASE64 кодировке?
Я думал, что на определенном этапе в коде можно добавить decode_base64(), присоединить подпись и отправить на сохранения. Такой вариант невозможен?

UPD: Возникает ошибка архива, странно.
UPD2: Глуплю, 7zip архив же. Открыл. Содержимое: "Привет"

Отредактировано пользователем 9 января 2017 г. 17:47:46(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#23 Оставлено : 9 января 2017 г. 17:48:50(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Автор: SirSudo Перейти к цитате
А что, этот вариант тоже нужно рассмотреть. Где можно найти пример для создания отсоединенной подписи файла?

Правильно ли я понимаю, что это невозможно с помощью Browser Plugin создать присоединенную подпись так, чтобы подписанный файл был не в BASE64 кодировке?
Я думал, что на определенном этапе в коде можно добавить decode_base64(), присоединить подпись и отправить на сохранения. Такой вариант невозможен?

UPD: Возникает ошибка архива, странно.


Что мешает начать смотреть документацию, особенно по параметрам при подписании?

Цитата:

bDetached
[in, optional] Вид подписи: отделенная (true) или совмещенная (false). По умолчанию совмещенная.


И потом внести правки в пример.
Техническую поддержку оказываем тут
Наша база знаний
Offline SirSudo  
#24 Оставлено : 9 января 2017 г. 17:50:28(UTC)
SirSudo

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

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

Сказал(а) «Спасибо»: 10 раз
Стыдно, сейчас попробую. Прощу прощения, Андрей d'oh!
Offline basid  
#25 Оставлено : 9 января 2017 г. 17:55:11(UTC)
basid

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

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

Сказал(а) «Спасибо»: 8 раз
Поблагодарили: 163 раз в 148 постах
Автор: SirSudo Перейти к цитате
Или я Вас не совсем правильно услышал? d'oh!
Вы упёрлись в то, во что вообще не надо упираться.
Электронная подпись решает, как минимум, две задачи:
1. Позволяет удостоверить отправителя подписанного "сообщения";
2. Позволяет удостоверить целостность (отсутствие искажений) подписанного сообщения.
Очевидно, что как только вы начинаете редактировать "сообщение", то его целостность будет нарушена, а значит можно будет утверждать, что "ничего такого" отправитель не отправлял.
Соответственно, или забыли про редактирование или рассматриваем редактирование в рамках совершенно другой задачи, где ЭП участвовать не будет.

Дальше возникает вопрос использования отсоединённой или присоединённой подписи.
У обоих вариантов есть свои плюсы и минусы. Превратить присоединённую подпись в отсоединённую и наоборот - задача вполне тривиальная.

Вот только непонятно - какую задачу вы решаете. Не какие примеры смотрите или сервисы используете.
Цель, а не средства.
thanks 1 пользователь поблагодарил basid за этот пост.
SirSudo оставлено 09.01.2017(UTC)
Offline SirSudo  
#26 Оставлено : 9 января 2017 г. 18:20:13(UTC)
SirSudo

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

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

Сказал(а) «Спасибо»: 10 раз
Код:
function SignCadesBES_Async_File(certListBoxId) {
    cadesplugin.async_spawn(function*(arg) {
        var e = document.getElementById(arg[0]);
        var selectedCertID = e.selectedIndex;
        if (selectedCertID == -1) {
            alert("Select certificate");
            return;
        }

        var thumbprint = e.options[selectedCertID].value.split(" ").reverse().join("").replace(/\s/g, "").toUpperCase();
        try {
            var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
            yield oStore.Open();
        } catch (err) {
            alert('Failed to create CAdESCOM.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 SignatureFieldTitle = document.getElementsByName("SignatureTitle");
        var Signature;
        try
        {
            FillCertInfo_Async(certificate);
            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;
            yield oDocumentNameAttr.propset_Name(CADESCOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME);
            yield oDocumentNameAttr.propset_Value("Document Name");
            yield attr.Add(oDocumentNameAttr);

            if (oSigner) {
                yield 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 dataToSign = Base64.encode(fileContent); // fileContent - объявлен в Code.js
            if (dataToSign) {
                // Данные на подпись ввели
                yield oSignedData.propset_ContentEncoding(cadesplugin.CADESCOM_STRING_TO_UCS2LE); //CADESCOM_BASE64_TO_BINARY
                yield oSignedData.propset_Content(dataToSign);
                yield oSigner.propset_Options(1); //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
                try {
                    var StartTime = Date.now();
                    Signature = yield oSignedData.SignCades(oSigner, CADES_BES, true);
                    var EndTime = Date.now();
                    document.getElementsByName('TimeTitle')[0].innerHTML = "Время выполнения: " + (EndTime - StartTime) + " мс";
                }
                catch (err) {
                    errormes = "Не удалось создать подпись из-за ошибки: " + cadesplugin.getLastError(err);
                    throw errormes;
                }
            }
            document.getElementById("SignatureTxtBox").innerHTML = Signature;
            sendPostToPHP(Signature);
            SignatureFieldTitle[0].innerHTML = "Подпись сформирована успешно:";
        }
        catch(err)
        {
            SignatureFieldTitle[0].innerHTML = "Возникла ошибка:";
            document.getElementById("SignatureTxtBox").innerHTML = err;
        }
    }, certListBoxId); //cadesplugin.async_spawn
}


Цитата:
Почему моя отделённая подпись из плагина не проверяется в КриптоАРМ/cryptcp
При использовании КриптоПро ЭЦП browser plug-in данные, переданные при создании подписи, будут перекодированы в UCS-2 little endian и именно в таком виде данные будут подписаны. См. Особенности работы с бинарными данными. Это сделано для совместимости с теми ЭП, которые были созданы в Internet Explorer с использованием CAPICOM.
В КриптоАРМ и в cryptcp никакое перекодирование данных при создании подписи не производится.


отсоединенная подпись не проверяется в КриптоАРМ, прочитал то, что написано в документации. Попробовал следующее:
CADESCOM_BASE64_TO_BINARY заменил на CADESCOM_STRING_TO_UCS2LE;
И теперь уже очевидную замену в этой строке Signature = yield oSignedData.SignCades(oSigner, CADES_BES, true);

Изменений никаких. Не могу разобраться.
Offline SirSudo  
#27 Оставлено : 9 января 2017 г. 18:27:11(UTC)
SirSudo

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

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

Сказал(а) «Спасибо»: 10 раз
Автор: basid Перейти к цитате
Вы упёрлись в то, во что вообще не надо упираться.
Электронная подпись решает, как минимум, две задачи:
1. Позволяет удостоверить отправителя подписанного "сообщения";
2. Позволяет удостоверить целостность (отсутствие искажений) подписанного сообщения.
Очевидно, что как только вы начинаете редактировать "сообщение", то его целостность будет нарушена, а значит можно будет утверждать, что "ничего такого" отправитель не отправлял.
Соответственно, или забыли про редактирование или рассматриваем редактирование в рамках совершенно другой задачи, где ЭП участвовать не будет.

Дальше возникает вопрос использования отсоединённой или присоединённой подписи.
У обоих вариантов есть свои плюсы и минусы. Превратить присоединённую подпись в отсоединённую и наоборот - задача вполне тривиальная.

Вот только непонятно - какую задачу вы решаете. Не какие примеры смотрите или сервисы используете.
Цель, а не средства.


Я Вас понял, и правда, выглядит всё это несуразно.
В этом и проблема, что задание было сформулировано именно так: "Добавить возможность подписывать документы ЭЦП на сайт."
Всё, что мне остается - предоставить на рассмотрение оба варианта.
Суть ЭЦП я более менее теперь понял. Спасибо и извините, если причинил Вам какие-то неудобства.
Offline viarim  
#28 Оставлено : 18 января 2022 г. 12:29:01(UTC)
viarim

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

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

Сказал(а) «Спасибо»: 5 раз
Автор: SirSudo Перейти к цитате
Такс, сохранил файл - все прошло успешно. Принцип следующий:

js код, вызов которого вставил перед SignatureFieldTitle[0].innerHTML = "Подпись сформирована успешно:";
Код:

function sendPostToPHP(varName) {
    /*Проба сохранения файла*/
    var postArray = {
        'SAVE_DATA': varName
    };
    $.ajax({
        type: "POST",
        data: postArray,
        url: '/cryptopro/save-file.php',
        success: function(data) {
            alert(varName);
        }
    });
}


В php странице делаю следующее:
Код:

<?
$handle = fopen("test.ext.p7s", "w");
fwrite($handle, $_REQUEST['SAVE_DATA']);
fclose($handle);

Пока с именем test, но это сейчас подправлю.


Сейчас проверку проходит на этом сайте ЛИНК ГосУслуги, но я загружаю полученный файл формата .ext.p7s
Вопрос - у меня будет храниться на диске файл и отдельно подпись к нему? Только так? Кажется, что я что-то опять не знаю, но этот файл теперь недоступен для просмотра, скажем, в том же Word?
Просто отдельный файл с подписью, да?

И еще один вопрос: если я подписываю файл example.doc , то результат я должен сохранить как example.doc.ext.p7s или как example.ext.p7s?


Такой ответ приходит от ГосУслуг, если я загружаю файл example.doc и example.ext.p7s ... Что-то делаю не так?
Выбираю "— электронного документа. ЭП — отсоединенная, в формате PKCS#7"
Цитата:
Подлинность документа НЕ ПОДТВЕРЖДЕНА

ЭП 1: НЕ ВЕРНА
Статус сертификата подписи: Не проверялся
Владелец : RU, Новосибирская область, Новосибирск, *******, ****, *** **** *****, sir.sudo@yandex.ru
Издатель: CRYPTO-PRO Test Center 2, CRYPTO-PRO LLC, Moscow, RU, support@cryptopro.ru
Действителен: с 2017.01.09 по 2017.04.09


Здравствуйте. Не подскажете как сохранять не с названием test, а таким же названием как и загружаемый файл для подписи. То есть, если загружаем "example.docx", то и подпись с названием "example.sig" ? Спасибо.

Offline Андрей *  
#29 Оставлено : 18 января 2022 г. 13:00:42(UTC)
Андрей *

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

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

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

Здравствуйте. Не подскажете как сохранять не с названием test, а таким же названием как и загружаемый файл для подписи. То есть, если загружаем "example.docx", то и подпись с названием "example.sig" ? Спасибо.



Здравствуйте.

Загружаем файл - куда? Выбор в форме для локального подписания?

На клиенте из js или с сервера присылать имя?

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#30 Оставлено : 18 января 2022 г. 13:04:17(UTC)
Андрей *

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

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

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

речь про php?

$_FILES['file']['tmp_name'] - копировать с нужным именем к себе...

читать в память:
$data = file_get_contents($_FILES['file']['tmp_name']);
$sgn = file_get_contents($_FILES['filecms']['tmp_name']);



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