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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline KuzyXD  
#1 Оставлено : 7 августа 2020 г. 7:37:15(UTC)
KuzyXD

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

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

Сказал(а) «Спасибо»: 7 раз
Здравствуйте. Работаю со стеком Js, Vuejs и использую браузерный плагин Крипто Про. Воссоздать пример по этому адрессу у меня получилось наполовину.

UserPostedImage

Цитата:
Uncaught TypeError: oHashedData.Hash is not a function


Тут и вопрос. Что за функцию пытается вызвать тестовый код и где он находится?
Offline Ситдиков Денис  
#2 Оставлено : 7 августа 2020 г. 15:31:50(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 29 раз в 20 постах
Добрый день!
В браузерах, поддерживающих Promise, плагин используется по-другому.
В вашем случае нужно делать по аналогии с этим примером.
thanks 1 пользователь поблагодарил Ситдиков Денис за этот пост.
KuzyXD оставлено 10.08.2020(UTC)
Offline KuzyXD  
#3 Оставлено : 10 августа 2020 г. 11:59:38(UTC)
KuzyXD

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: Ситдиков Денис Перейти к цитате
Добрый день!
В браузерах, поддерживающих Promise, плагин используется по-другому.
В вашем случае нужно делать по аналогии с этим примером.


Спасибо вам. Я продвинулся дальше и с примером Создания подписи CADES_BES с использованием асинхронной версии у меня все получилось, но с Созданием запроса на выпуск сертификата проблема вернулась, но уже с другой функцией.

Цитата:
Uncaught (in promise) TypeError: CertificateRequestPkcs10.X509Extensions.Add is not a function


Мой асинхронный код с промисами выглядит так:
Цитата:
var CERT_DATA_ENCIPHERMENT_KEY_USAGE = 0x10;
var CERT_KEY_ENCIPHERMENT_KEY_USAGE = 0x20;
var CERT_DIGITAL_SIGNATURE_KEY_USAGE = 0x80;
var CERT_NON_REPUDIATION_KEY_USAGE = 0x40;

return new Promise(function(resolve, reject) {
window.cadesplugin.async_spawn(function *(args) {

var PKey = yield window.cadesplugin.CreateObjectAsync("X509Enrollment.CX509PrivateKey");

yield PKey.propset_ProviderName("Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider");
yield PKey.propset_ProviderType(75);
yield PKey.propset_KeySpec(1); // XCN_AT_KEYEXCHANGE

var CertificateRequestPkcs10 = yield window.cadesplugin.CreateObjectAsync("X509Enrollment.CX509CertificateRequestPkcs10");
yield CertificateRequestPkcs10.InitializeFromPrivateKey(0x1, PKey, "");

var DistinguishedName = yield window.cadesplugin.CreateObjectAsync("X509Enrollment.CX500DistinguishedName");
yield DistinguishedName.Encode("CN=\"TestName\";");
yield CertificateRequestPkcs10.propset_Subject(DistinguishedName);

var KeyUsageExtension = yield window.cadesplugin.CreateObjectAsync("X509Enrollment.CX509ExtensionKeyUsage");

yield KeyUsageExtension.InitializeEncode(CERT_KEY_ENCIPHERMENT_KEY_USAGE|CERT_DATA_ENCIPHERMENT_KEY_USAGE|CERT_DIGITAL_SIGNATURE_KEY_USAGE|CERT_NON_REPUDIATION_KEY_USAGE);

console.log(CertificateRequestPkcs10);
yield CertificateRequestPkcs10.X509Extensions.Add(KeyUsageExtension);

var Enroll = yield window.cadesplugin.CreateObjectAsync("X509Enrollment.CX509Enrollment");
yield Enroll.InitializeFromRequest(CertificateRequestPkcs10);

var certReq = yield Enroll.CreateRequest(cadesplugin.XCN_CRYPT_STRING_BASE64HEADER);
}, resolve, reject);
});
Offline Ситдиков Денис  
#4 Оставлено : 10 августа 2020 г. 16:11:42(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 29 раз в 20 постах
Попробуйте сделать через 2 вызова:

Код:

...
var extensions = yield CertificateRequestPkcs10.X509Extensions;
yield extensions.Add(KeyUsageExtension);
...
thanks 1 пользователь поблагодарил Ситдиков Денис за этот пост.
KuzyXD оставлено 11.08.2020(UTC)
Offline KuzyXD  
#5 Оставлено : 11 августа 2020 г. 7:35:49(UTC)
KuzyXD

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

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

Сказал(а) «Спасибо»: 7 раз
Автор: Ситдиков Денис Перейти к цитате
Попробуйте сделать через 2 вызова:

Код:

...
var extensions = yield CertificateRequestPkcs10.X509Extensions;
yield extensions.Add(KeyUsageExtension);
...


Здравствуйте. Спасибо, все получилось.
Offline KuzyXD  
#6 Оставлено : 12 августа 2020 г. 13:55:55(UTC)
KuzyXD

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

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

Сказал(а) «Спасибо»: 7 раз
Здравствуйте. Пишу снова здесь, дабы не размножить мои темы. Встретился с ошибкой
Цитата:
"Группа или ресурс не находятся в нужном состоянии для выполнения требуемой операции. (0x8007139F)"
при вызове фугкции SignCades.

Мой код:
Цитата:
return new Promise(function(resolve, reject) {
window.cadesplugin.async_spawn(function *(args) {
var oStore = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.Store");
yield oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

var CertFinder = yield oStore.Certificates;
var oCertificates = yield CertFinder.Find(
CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);

if (oCertificates.Count === 0) {
alert("Certificate not found: " + certSubjectName);
return;
}

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

var oSignedData = yield window.cadesplugin.CreateObjectAsync("CAdESCOM.CadesSignedData");
oSignedData.propset_ContentEncoding = yield CADESCOM_BASE64_TO_BINARY;
oSignedData.propset_Content = yield dataToSign;

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

oStore.Close();

return sSignedMessage;
}, resolve, reject);
Offline Ситдиков Денис  
#7 Оставлено : 12 августа 2020 г. 14:53:05(UTC)
Ситдиков Денис

Статус: Администратор

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

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 29 раз в 20 постах
Добрый день!
Код:
oSigner.propset_Certificate = yield oCertificate;

Так вызывать некорректно, должно быть так:
Код:
yield oSigner.propset_Certificate(oCertificate);



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