Статус: Участник
Группы: Участники
Зарегистрирован: 07.08.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 7 раз
|
Здравствуйте. Работаю со стеком Js, Vuejs и использую браузерный плагин Крипто Про. Воссоздать пример по этому адрессу у меня получилось наполовину. Цитата:Uncaught TypeError: oHashedData.Hash is not a function Тут и вопрос. Что за функцию пытается вызвать тестовый код и где он находится?
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 95 Откуда: Москва Сказал(а) «Спасибо»: 4 раз Поблагодарили: 29 раз в 20 постах
|
Добрый день! В браузерах, поддерживающих Promise, плагин используется по-другому. В вашем случае нужно делать по аналогии с этим примером.
|
1 пользователь поблагодарил Ситдиков Денис за этот пост.
|
KuzyXD оставлено 10.08.2020(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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); });
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 95 Откуда: Москва Сказал(а) «Спасибо»: 4 раз Поблагодарили: 29 раз в 20 постах
|
Попробуйте сделать через 2 вызова: Код:
...
var extensions = yield CertificateRequestPkcs10.X509Extensions;
yield extensions.Add(KeyUsageExtension);
...
|
1 пользователь поблагодарил Ситдиков Денис за этот пост.
|
KuzyXD оставлено 11.08.2020(UTC)
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 07.08.2020(UTC) Сообщений: 23
Сказал(а) «Спасибо»: 7 раз
|
Автор: Ситдиков Денис Попробуйте сделать через 2 вызова: Код:
...
var extensions = yield CertificateRequestPkcs10.X509Extensions;
yield extensions.Add(KeyUsageExtension);
...
Здравствуйте. Спасибо, все получилось.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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);
|
|
|
|
Статус: Администратор
Группы: Участники
Зарегистрирован: 01.03.2017(UTC) Сообщений: 95 Откуда: Москва Сказал(а) «Спасибо»: 4 раз Поблагодарили: 29 раз в 20 постах
|
Добрый день! Код:oSigner.propset_Certificate = yield oCertificate;
Так вызывать некорректно, должно быть так: Код:yield oSigner.propset_Certificate(oCertificate);
Пример кода можно посмотреть на тестовой странице.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close