Статус: Новичок
Группы: Участники
Зарегистрирован: 19.07.2018(UTC) Сообщений: 6 Откуда: Москва
|
Столкнулись с трудностью кэширования ПИНа для приватного ключа. Асинхронная версия работает, а в IE11, где синхронная есть проблема. В асинхронной версии имеем код для кэширования ПИНа: var oCertificatePrivateKey = yield oCertificate.PrivateKey; yield oCertificatePrivateKey.propset_CachePin(true); где oCertificatePrivateKey - глобальная переменная. Как сделать аналогично в синхронной версии, если var oCertificatePrivateKey = oCertificate.PrivateKey; oCertificatePrivateKey.CachePin = true; - не работает oCertificatePrivateKey.ChangePin(true); - не работает Собственно код для IE: Код:
var CADESCOM_CADES_BES = 1;
var CAPICOM_CURRENT_USER_STORE = 2;
var CAPICOM_CERTIFICATE_FIND_ISSUER_NAME = 2;
var CAPICOM_MY_STORE = "My";
var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
function SignCreate(oCertificate, hashAlg, sHashValue) {
var oHashedData = cadesplugin.CreateObject(
"CAdESCOM.HashedData"
);
// Инициализируем объект заранее вычисленным хэш-значением
// Алгоритм хэширования нужно указать до того, как будет передано хэш-значение
oHashedData.Algorithm = hashAlg;
oHashedData.SetHashValue(sHashValue);
var oRawSignature = cadesplugin.CreateObject(
"CAdESCOM.RawSignature"
);
// Вычисляем значение подписи
var oCertificatePrivateKey = oCertificate.PrivateKey;
oCertificatePrivateKey.CachePin = true;
var sRawSignature = oRawSignature.SignHash(
oHashedData,
oCertificate
);
}
function getCertificatesBySubjectName(certSubjectName) {
var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
oStore.Open(
CAPICOM_CURRENT_USER_STORE,
CAPICOM_MY_STORE,
CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED
);
var oCertificates = oStore.Certificates.Find(
CAPICOM_CERTIFICATE_FIND_ISSUER_NAME,
certSubjectName
);
if (oCertificates.Count == 0) {
sap.m.MessageToast.show("Certificate not found: " + certSubjectName);
return;
}
var aCertificates = [];
for (var i = 0; i < oCertificates.Count; i++) {
var oCertificate = oCertificates.Item(i + 1);
var oCertificateSubjectName = oCertificate.SubjectName;
var oCertificateIssuerName = oCertificate.IssuerName;
var oCertificateSerialNumber = oCertificate.SerialNumber;
var oCertificateValidFromDate = oCertificate.ValidFromDate;
var oCertificateValidToDate = oCertificate.ValidToDate;
var oCertificatePrivateKey = oCertificate.PrivateKey;
// oCertificatePrivateKey.propset_CachePin(true);
aCertificates.push({
oCertificate: oCertificate,
SubjectName: oCertificateSubjectName,
IssuerName: oCertificateIssuerName,
SerialNumber: oCertificateSerialNumber,
ValidFromDate: new Date(oCertificateValidFromDate),
ValidToDate: new Date(oCertificateValidToDate),
PrivateKey: oCertificatePrivateKey
});
}
return aCertificates;
}
Отредактировано пользователем 19 июля 2018 г. 17:39:08(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
А что значит "не работает"? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.07.2018(UTC) Сообщений: 6 Откуда: Москва
|
Автор: cross А что значит "не работает"? Вот так выглядит: err kriptopro.jpg (51kb) загружен 17 раз(а).В данном варианте я делаю - oCertificatePrivateKey.CachePin = true; Вот, что имею по итогу: error kriptopro2.jpg (42kb) загружен 11 раз(а).Отредактировано пользователем 19 июля 2018 г. 17:23:07(UTC)
| Причина: Не указана
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.07.2018(UTC) Сообщений: 6 Откуда: Москва
|
Автор: cross А что значит "не работает"? Добрый день. Никто не может подсказать по данной проблеме?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 24.11.2009(UTC) Сообщений: 965 Откуда: Crypto-Pro
Сказал(а) «Спасибо»: 3 раз Поблагодарили: 174 раз в 152 постах
|
А вы можете еще показать код как вы вызываете SignCreate, хочется увидеть весь путь обьекта Certificate из которого вы получаете PrivateKey, а так же какой алгоритм открытого ключа у данного сертификата? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 19.07.2018(UTC) Сообщений: 6 Откуда: Москва
|
Автор: cross А вы можете еще показать код как вы вызываете SignCreate, хочется увидеть весь путь обьекта Certificate из которого вы получаете PrivateKey, а так же какой алгоритм открытого ключа у данного сертификата? Код:
create: function(oDocument, oCertificate) {
var CADESCOM_HASH_ALGORITHM_CP_GOST_3411 = 100;
var sHash = oDocument.hash;
var sGuid = oDocument.guid_c;
var sIssuerName = oCertificate.IssuerName;
var sSerialNumber = oCertificate.SerialNumber;
oCertificate = oCertificate.oCertificate;
var oDfd = jQuery.Deferred();
if (cadesplugin.CreateObjectAsync) {
SignCreate(oCertificate, CADESCOM_HASH_ALGORITHM_CP_GOST_3411, sHash).then(function(sSign) {
oDfd.resolve({
sign: sSign,
guid: sGuid,
signed: 0,
issuer: sIssuerName,
serno: sSerialNumber
});
},
function(error) {
oDfd.resolve({
sign: error,
guid: sGuid,
signed: 1,
issuer: sIssuerName,
serno: sSerialNumber
});
// oDfd.reject(error);
// sap.m.MessageToast.show(error);
});
} else {
try {
var sSign = SignCreate(oCertificate, CADESCOM_HASH_ALGORITHM_CP_GOST_3411, sHash);
oDfd.resolve({
sign: sSign,
guid: sGuid,
signed: 0,
issuer: sIssuerName,
serno: sSerialNumber
});
} catch (e) {
oDfd.resolve({
sign: e,
guid: sGuid,
signed: 1,
issuer: sIssuerName,
serno: sSerialNumber
});
}
}
return oDfd;
}
Цитата:алгоритм открытого ключа Думаю имеете ввиду вот это: open key.jpg (29kb) загружен 5 раз(а).
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close