Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 22
|
В виндовсе ок, подписывает. Где искать причину? Код: Код:
function sign( certificate, document, signature) {
// Создаем объект сертификата
try {
var oCert = ObjCreator("CAPICOM.Certificate");
}
catch (e) {
alert('Не удалось создать CAPICOM.Certificate: ' + e.number);
return false;
}
// Импортируем сертификат в объект
oCert.Import( $('#' + certificate).val() );
// Создаем подписчик
try {
var oSigner = ObjCreator("CAdESCOM.CPSigner");
}
catch (e) {
alert('Не удалось создать CAdESCOM.CPSigner: ' + e.number);
return false;
}
// Помещаем объект сертификата в подписчик
if (oSigner) {
oSigner.Certificate = oCert;
}
else {
alert("Не удалось поместить сертификат в подписчик");
return false;
}
var oSignedData = ObjCreator("CAdESCOM.CadesSignedData");
var data = $('#' + document).val();
// Подписываем документ
if (data) {
oSignedData.ContentEncoding = 1; // CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = data;
oSigner.Options = 1; // CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
try {
//var sSignedData = oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);
var sSignedData = oSignedData.SignCades(oSigner, 1, true);
}
catch (e) {
alert("Не удалось создать подпись. Ошибка: " + GetErrorMessage(e));
return false;
}
$('#' + signature).val(sSignedData); // Помещаем подпись в элемент
}
else {
alert("Отсутствуют данные для подписания.");
return false;
}
return true;
}
function ObjCreator(name) {
switch (navigator.appName) {
case 'Microsoft Internet Explorer':
return new ActiveXObject(name);
default:
var userAgent = navigator.userAgent;
if(userAgent.match(/ipod/i) ||userAgent.match(/ipad/i) || userAgent.match(/iphone/i)) {
return call_ru_cryptopro_npcades_10_native_bridge("CreateObject", [name]);
}
var cadesobject = document.getElementById('cadesplugin');
return cadesobject.CreateObject(name);
}
}
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 22
|
Подпись обычная. Тему по ошибке создал в ветке "Усовершенствованной подписи". Просьба администратору, перенести тему в соответствующий раздел.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 22
|
Почему спустя 24ч нет ответа?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 22
|
Самое удивительное, что с помощью этой функции данные подписываются в Линуксе. Код:
function sign_button_click(select, data, sign, cert) {
var e = document.getElementById(select);
var selectedCertID = e.selectedIndex;
if (selectedCertID == -1) {
alert("Выберите сертификат");
return;
}
var thumbprint = e.options[selectedCertID].value.split(" ").reverse().join("").replace(/\s/g, "").toUpperCase();
try {
var oStore = ObjCreator("CAPICOM.store");
oStore.Open();
} catch (e) {
alert('Failed to create CAPICOM.store: ' + e.number);
return false;
}
var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
var oCerts = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
if (oCerts.Count == 0) {
alert("Сертификат не найден");
return false;
}
var oCert = oCerts.Item(1);
try {
var oSigner = ObjCreator("CAdESCOM.CPSigner");
} catch (e) {
alert('Failed to create CAdESCOM.CPSigner: ' + e.number);
return false;
}
if (oSigner) {
oSigner.Certificate = oCert;
try {
oCPAttribute = ObjCreator("CAdESCOM.CPAttribute");
} catch (e) {
alert('Failed to create CAdESCOM.CPAttribute: ' + e.number);
return false;
}
for (i = 1; i <= oSigner.Certificate.ExtendedKeyUsage().EKUs.Count; i++) {
oCPAttribute.OID.Value = oSigner.Certificate.ExtendedKeyUsage().EKUs.Item(i).OID;
}
}
else {
alert("Failed to create CPSigner");
return false;
}
var oSignedData = ObjCreator("CAdESCOM.CadesSignedData");
var txtDataToSign = document.getElementById(data).value;
var CADES_BES = 1;
var CADESCOM_CADES_DEFAULT = 0;
if (txtDataToSign) {
// Данные на подпись ввели
oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
oSignedData.Content = txtDataToSign;
//document.getElementById(SignTypeId).value = 0;
oSigner.Options = 1; //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
try {
var sSignedData = oSignedData.SignCades(oSigner, CADES_BES, true);
}
catch (e) {
alert("Не удалось создать подпись из-за ошибки: " + GetErrorMessage(e));
return false;
}
$('#' + sign).val(sSignedData);
$('#' + cert).val( oSigner.Certificate.Export(0) );
} else {
alert("Отсутствуют данные для подписания.");
return false;
}
oStore.Close();
return true;
}
То ли дело в платформе? Если да, тогда почему во второй функции подпись работает? Если причина в 1-й функции - почему она работает только в виндусе? Эксперты, что скажете? Отредактировано пользователем 26 марта 2013 г. 11:19:35(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Цитата:Почему спустя 24ч нет ответа? У вас есть сертификат на годовую техническую поддержку "КриптоПро SDK"? В вашем случае причина в том, что для создания подписи необходима ссылка на закрытый ключ сертификата. Понятно, что в сертификате, взятом из файла, этой ссылки нет. На Windows и Linux по разному реализован алгоритм "поиска" данной ссылки: 1. На Windows осуществляется кэширование ссылки на закрытый ключ сертификата при его установке в хранилище с привязкой к закрытому ключу - путем создания KeyIdentifier. 2. Кроме того, даже если на Windows такой сертификат из хранилища "Личные" удалить, то по нашим наблюдениям, ссылка на закрытый ключ в KeyIdentifier останется. Отредактировано пользователем 26 марта 2013 г. 14:33:40(UTC)
| Причина: Не указана
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 18.02.2013(UTC) Сообщений: 22
|
У меня нет сертификата на тех поддержку. Я не компания, а индивидуальный разработчик.
Подскажите, где почитать документацию о формировании ссылки на ключ и передачи ее объекту CAPICOM.Certificate?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 10.12.2008(UTC) Сообщений: 924 Откуда: Крипто-Про Поблагодарили: 99 раз в 95 постах
|
Почитать можно здесь http://msdn.microsoft.co...us/library/aa388162.aspxОбъект CAPICOM.Certificate. Если сертификат получен из хранилища и в хранилище он установлен со ссылкой на закрытый ключ, то никакую ссылку ему дополнительно передавать не нужно. Если сертификат импортирован из файла, то способов создать для него связь с закрытым ключом при помощи плагина в Linux в настоящий момент нет и пока не планируется.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 16.02.2012(UTC) Сообщений: 20
Сказал(а) «Спасибо»: 2 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Новожилова Елена Почитать можно здесь http://msdn.microsoft.co...us/library/aa388162.aspxОбъект CAPICOM.Certificate. Если сертификат получен из хранилища и в хранилище он установлен со ссылкой на закрытый ключ, то никакую ссылку ему дополнительно передавать не нужно. Если сертификат импортирован из файла, то способов создать для него связь с закрытым ключом при помощи плагина в Linux в настоящий момент нет и пока не планируется. Насколько я понимаю, тогда не только на Linux, но и на Windows нельзя сделать ЯВНО ссылку на закрытый ключ в таком случае. Потому что нельзя создать отдельно объект CAPICOM.PrivateKey в плагине (в CAPICOM можно), исходя из SDK. (То что кэшируется ссылка на Windows можно назвать особенностью) Как вариант, попробовать:
- Создать объект CAPICOM.Certificate, импортировать в него открытый ключ.
- Получить из сертификата thumbrint (отпечаток)
- Инициализировать хранилище сертификатов, и найти в хранилище уже этот сертификат по отпечатку с привязкой к закрытому ключу.
Отредактировано пользователем 28 марта 2013 г. 14:09:58(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close