Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2020(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 5 раз
|
Добрый день. Пишу вэб приложение с функцией подписи документов пользователями при помощи Крипто Про Browser plug-in. Беру код из примеров - подпись ставится. Сейчас есть задача проставить и штамп времени (у меня на ПК установлены все необходимые лицензии) и при генерации подписи через КриптоАРМ - все отрабатывает и штамп проставляется (после запроса адреса Службы штампов времени). Но в коде из примеров не нашел получение подписи со штампов времени. Подскажите что нужно вставить в код чтобы осуществить простановку штампа времени Используемый код для создания подписи Код:var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;
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;
function SignCreate(certSubjectName, dataToSign) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
var oStoreCerts = yield oStore.Certificates;
var oCertificates = yield oStoreCerts.Find(
CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
var certsCount = yield oCertificates.Count;
if (certsCount === 0) {
err = "Certificate not found: " + certSubjectName;
alert(err);
args[1](err);
}
var oCertificate = yield oCertificates.Item(1);
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(oCertificate);
yield oSigner.propset_CheckCertificate(true);
yield oSigner.propset_TSAAddress("http://cryptopro.ru/tsp/");
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
yield oSignedData.propset_Content(dataToSign);
try {
var sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_X_LONG_TYPE_1);
}
catch (e) {
err = cadesplugin.getLastError(e);
alert("Failed to create signature. Error: " + err);
args[1](err);
}
yield oStore.Close();
return args[0](sSignedMessage);
}, resolve, reject);
});
}
function Verify(sSignedMessage) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
try {
yield oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_X_LONG_TYPE_1);
}
catch (e) {
err = cadesplugin.getLastError(e);
alert("Failed to verify signature. Error: " + err);
return args[1](err);
}
return args[0]();
}, resolve, reject);
});
}
function run() {
var oCertName = document.getElementById("CertName");
var sCertName = oCertName.value; // Здесь следует заполнить SubjectName сертификата
if ("" === sCertName) {
alert("Введите имя сертификата (CN).");
return;
}
SignCreate(sCertName, "Message").then(
function (signedMessage) {
document.getElementById("signature").innerHTML = signedMessage;
Verify(signedMessage).then(
function () {
alert("Signature verified");
},
function (err) {
document.getElementById("signature").innerHTML = err;
});
},
function (err) {
document.getElementById("signature").innerHTML = err;
}
);
Подскажите как быть с данным примером: Код:
var CADESCOM_CADES_BES = 1;
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 CADESCOM_BASE64_TO_BINARY = 1;
function SignCreate(certSubjectName, dataInBase64) {
return new Promise(function (resolve, reject) {
cadesplugin.async_spawn(function* (args) {
var oStore = yield cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);
var oStoreCerts = yield oStore.Certificates;
var oCertificates = yield oStoreCerts.Find(
CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
var certsCount = yield oCertificates.Count;
if (certsCount === 0) {
err = "Certificate not found: " + certSubjectName;
alert(err);
return args[1](err);
}
var oCertificate = yield oCertificates.Item(1);
var oSigner = yield cadesplugin.CreateObjectAsync("CAdESCOM.CPSigner");
yield oSigner.propset_Certificate(oCertificate);
yield oSigner.propset_CheckCertificate(true);
var oSignedData = yield cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
// Значение свойства ContentEncoding должно быть задано
// до заполнения свойства Content
yield oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY);
yield oSignedData.propset_Content(dataInBase64);
var sSignedMessage = "";
try {
sSignedMessage = yield oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);
} catch (err) {
e = cadesplugin.getLastError(err);
alert("Failed to create signature. Error: " + e);
return args[1](e);
}
yield oStore.Close();
return args[0](sSignedMessage);
}, resolve, reject);
});
}
Отредактировано пользователем 21 июля 2022 г. 19:47:56(UTC)
| Причина: Расширил вопрос
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,161   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
hooper оставлено 21.07.2022(UTC)
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 12.03.2020(UTC) Сообщений: 6  Сказал(а) «Спасибо»: 5 раз
|
Спасибо больше!
Подскажите пожалуйста при подписании данных в base64 принцип простановки штампа не меняется?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,161   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
Принцип не меняется, в коде выше указано (из примера в документации) Цитата: // Значение свойства ContentEncoding должно быть задано до заполнения свойства Content yield oSignedData.propset_ContentEncoding(CADESCOM_BASE64_TO_BINARY); yield oSignedData.propset_Content(dataInBase64);
Для штампа времени - указать TSAAddress и тип подписи (CAdES-T или CAdES XLongType1) |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
hooper оставлено 22.07.2022(UTC)
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close