Статус: Новичок
Группы: Участники
Зарегистрирован: 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".
Как можно побороть эту ошибку? Что мы делаем не так? В интернете информация крайне скудная, есть ли готовый пример, либо документация по созданию подписи со своими атрибутами?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
1 пользователь поблагодарил Даниленко Денис за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close