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

Уведомление

Icon
Error

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

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

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

Сказал(а) «Спасибо»: 2 раз
Добрый день.

Необходимо создать подпись с пользовательскими атрибутами в браузере через плагин, при этом необходимо, чтобы подпись проходила валидацию на стороне сервера.

В десктопном приложении, аналогичная задача решена следующим образом:

var signer = new CmsSigner(data.Certificate);
signer.SignedAttributes.Add(new Pkcs9CustomAttribute());
signedCms.ComputeSignature(signer, false);

где

public class Pkcs9CustomAttribute : Pkcs9AttributeObject
{
// ...
}

В веб приложении делаем следующее:

cadesplugin.async_spawn(function (args) {
try {
var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(2, "My", 2);

var CertificatesObj = yield oStore.Certificates;
var oCertificates = yield CertificatesObj.Find(0, thumbprint); // thumbprint ранее был выбран плагином

var oCertificate = yield oCertificates.Item(1);
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");

var oAttr = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPAttribute");
yield oAttr.propset_ValueEncoding(0);

var oSigningAttrOID = yield oAttr.OID;
yield oSigningAttrOID.propset_Value("1.3.6.1.4.1.xxxx.xx.x.x");
yield oAttr.propset_Name(0); // Пытались задать значение -1, но возникает ошибка The parameter is incorrect. (0x80070057)
yield oAttr.propset_Value(window.btoa("Значение атрибута"));
var attr = yield oSigner.AuthenticatedAttributes2;
yield attr.Add(oAttr);

yield oSigner.propset_Certificate(oCertificate);

var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
yield oSignedData.propset_ContentEncoding(1);
yield oSignedData.propset_Content(base64FileData);
oSigner.propset_Options(1);

var sSignedMessage = yield oSignedData.SignCades(oSigner, 1, true);
oSignedData.VerifyCades(sSignedMessage, 1, true);

yield oStore.Close();
}
catch (e) {
console.log(e.message);
}
});
Возникает ошибка "ASN1 unexpected end of data".

Как можно побороть эту ошибку? Что мы делаем не так? В интернете информация крайне скудная, есть ли готовый пример, либо документация по созданию подписи со своими атрибутами?

Offline Даниленко Денис  
#2 Оставлено : 4 мая 2018 г. 9:53:20(UTC)
Даниленко Денис

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

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

Сказал «Спасибо»: 12 раз
Поблагодарили: 1 раз в 1 постах
Тоже очень долго возился с этим, пока тех.поддержка не помогла.

Нужно делать ASN1 структуру.

Вот рабочий пример:

Код:

                    var SignatureComment = '11!11Наш комментарий для подписи. Eng.Ru!!..';

                    var CommentOBJ = yield cadesplugin.CreateObjectAsync("CADESCOM.CPAttribute");
                    
                    // Размер русских символов = символ * 2.
                    var RussiansSymbolsLength = 0;
                    var RussiansSymbols = SignatureComment.match(/[А-яЁё]/g);
                    if(RussiansSymbols !== null)
                        RussiansSymbolsLength = RussiansSymbols.length;
                    
                    var CommentValue = String.fromCharCode(0x0C) + String.fromCharCode(SignatureComment.length + RussiansSymbolsLength) + SignatureComment;

                    yield CommentOBJ.propset_ValueEncoding(cadesplugin.CADESCOM_ENCODE_BASE64);

                    var CommentOID = yield CommentOBJ.OID;

                    yield CommentOID.propset_Value(cadesplugin.CRYPTOARM_SIGN_OID_ATTRIBUTE_COMMENT);

                    yield CommentOBJ.propset_Value(Base64.encode(CommentValue));

                    var Attr = yield oSigner.AuthenticatedAttributes2;
                    yield Attr.Add(CommentOBJ); 


CRYPTOARM_SIGN_OID_ATTRIBUTE_COMMENT у меня опеределена как:
cadesplugin.CRYPTOARM_SIGN_OID_ATTRIBUTE_COMMENT = "1.2.643.2.45.1.1.1";

Точно также и с другими атрибутами.

Отредактировано пользователем 4 мая 2018 г. 10:59:34(UTC)  | Причина: Не указана

thanks 1 пользователь поблагодарил Даниленко Денис за этот пост.
OlegRus оставлено 07.05.2018(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.