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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline MARK_M  
#1 Оставлено : 3 октября 2016 г. 16:39:32(UTC)
MARK_M

Статус: Новичок

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

Доброго времени суток.

Смотрю в сторону ЭЦП Browser plug-in,тестовая страницы подписи файлов(cades-bes).

Пытаюсь воспроизвести всё это дело у себя на локальных ресурсах.

1.Удалось открыть хранилище сертификатов и выбрать необходимый аналогично тестовой странице.
2.Выбираю необходимый файл для подписи,файл выбирается успешно.

При попытке подписать получаю ошибку Error setting property on NPObject!

Так же прикладываю исходник моего кода sign.html.log (10kb) загружен 13 раз(а).

Буду очень признателен если подскажете как решить данную проблему,укажите на ошибки.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>

</head>
<body>
<p id='ProviderName'></p>
<p id='ProviderType'></p>
<p id='ProviderVersion'></p>
<script language="javascript" src="cadesplugin_api.js"></script>
<button onclick=' get_version(ProviderName, ProviderType) ; FillCertList(lstId); ' >open store</button>

<button onclick='get_option();'>look for a sert</button>

<button onclick='getMySerts(lstId);'>another button</button>

<script type="text/javascript">



var fileContent;

function get_version(ProviderName, ProviderType)
{
var oVersion;
try
{
var oAbout = cadesplugin.CreateObject("CAdESCOM.About");
//console.log(oAbout);
oVersion= oAbout.CSPVersion(ProviderName, parseInt(ProviderType, 10));
//console.log(oVersion);
var Minor = oVersion.MinorVersion;
var Major = oVersion.MajorVersion;
var Build = oVersion.BuildVersion;
var Version = oVersion.toString();

return Version;

}
catch(er)
{
if(er.message.indexOf("0x80090019")+1)
return "CRYPTO PRO ne ustanovlen";
else
return er.message;
return false;
}
// console.log(Version);
}


function FillCertList(lstId) {

var oStore = cadesplugin.CreateObject("CADESCOM.store");

alert("storage open");
if (!oStore) {
alert("store failed");
return;
}

try {
oStore.Open();
}
catch (e) {
alert("failed to oprn storage: " + GetErrorMessage(e));
return;
//console.log(oStore);
}

var certCnt = oStore.Certificates.Count;
//console.log(certCnt);
// var lst = document.getElementById(lstId);
//console.log(lst);
for (var i = 1; i <= certCnt; i++) {
var cert;
// console.log(cert);
try {
cert = oStore.Certificates.Item(i);
}
catch (ex) {
alert("fail to count certificars " + GetErrorMessage(ex));
return;
}

var oOpt = document.createElement("OPTION");
try {
oOpt.text = cert.SubjectName + cert.ValidToDate + cert.IssuerName;
}
catch (e) {
alert("miss SubjectName: " + GetErrorMessage(e));
}
try {
oOpt.value = cert.Thumbprint;
}
catch (e) {
alert("miss Thumbprint: " + GetErrorMessage(e));
}

lstId.options.add(oOpt);
}

oStore.Close();
}


//------------------------------------------------

function MakeCadesBesSign_NPAPI(dataToSign, certObject, setDisplayData) {

var errormes = "";

try {
var oSigner = cadesplugin.CreateObject("CAdESCOM.CPSigner");
} catch (err) {
errormes = "Failed to create CAdESCOM.CPSigner: " + err.number;
alert(errormes);
throw errormes;
}

if (oSigner) {
oSigner.Certificate = certObject;
}
else {
errormes = "Failed to create CAdESCOM.CPSigner";
alert(errormes);
throw errormes;
}

try {
var oSignedData = cadesplugin.CreateObject("CAdESCOM.CadesSignedData");
} catch (err) {
alert('Failed to create CAdESCOM.CadesSignedData: ' + err.number);
return;
}

var CADES_BES = 1;
var Signature;

if (dataToSign) {

oSignedData.ContentEncoding = 1; //CADESCOM_BASE64_TO_BINARY
if(typeof(setDisplayData) != 'undefined_test')
{
//Set display data flag flag for devices like Rutoken PinPad
oSignedData.DisplayData = 1;
}
oSignedData.Content = Base64.encode(dataToSign);
oSigner.Options = 1; //CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN
try {
Signature = oSignedData.SignCades(oSigner, CADES_BES);
}
catch (err) {
errormes = "ဠІŠ`̠ϡ?ῠ†ϠȠŠa?ῠᐠϠŠРɡ?ῠበǭሠ Ꮱ?በ ˠȺ " + GetErrorMessage(err);
alert(errormes);
throw errormes;
}
}
return Signature;

}
//------------------------------------------------


// vivod dannih po sertificatu
function get_option() {
//var o =document.getElementById('lsId');
var b = (document.getElementById('lstId').options[document.getElementById('lstId').selectedIndex].innerHTML);
document.getElementById('cert_infos').innerHTML = b;
//console.log(b);

}

//
function getMySerts(lstId) {
var go = document.getElementById('lstId');

var selectedCertID = go.selectedIndex;
if (selectedCertID == -1) {
alert("Select cert");
return;


}

var thumbprint = go.options[go.selectedIndex].value.split(" ").reverse().join("").replace(/\s/g, "").toUpperCase();

try {
var oStore = cadesplugin.CreateObject("CAdESCOM.Store");
oStore.Open();
} catch (err) {
alert('Failed to create CAdESCOM.Store: ' + GetErrorMessage(err));
return;

}

var CAPICOM_CERTIFICATE_FIND_SHA1_HASH = 0;
var oCerts = oStore.Certificates.Find(CAPICOM_CERTIFICATE_FIND_SHA1_HASH, thumbprint);
//console.log(oCerts);
if (oCerts.Count == 0) {
alert("Certificate not found");
return;
}
var oCert = oCerts.Item(1);
return oCert;
//console.log(oCerts);
}

//console.log(getMySerts());


function SignCadesBES_File(lstId) {
var certificate = getMySerts(lstId);
//console.log(certificate);
var dataToSign = fileContent;
//console.log(dataToSign);
var x = GetSignatureTitleElement();
//console.log(x);
try {
getMySerts(certificate);//(certificate);
// var StartTime = Date.now();
var signature = MakeCadesBesSign_NPAPI(dataToSign, certificate);
console.log(signature);
// var EndTime = Date.now();
// document.getElementsByName('TimeTitle')[0].innerHTML = "အ?ᆠ͡? ს?ᐠϠ̠ΠƠΠɡ?: " + (EndTime - StartTime) + " ፡?";
document.getElementById("text1").innerHTML = signature;


if (x != null) {
x.innerHTML = "Succes";
}
}
catch (err) {
if (x != null) {
x.innerTEXT = "error";
}
document.getElementById("text").innerHTML = err;

}
}

function checkFile() {
if ('' == openFileButton.value)
{ alert('Файл не выбран.'); return; }
else
if ('' == fileContent || undefined == fileContent)
{ alert('Выбран пустой файл'); return; }
else
SignCadesBES_File(lstId);
}

/*function Common_SignCadesBES_File(id) {
var canAsync = !!cadesplugin.CreateObjectAsync;
if (canAsync) {
include_async_code().then(function () {
return SignCadesBES_Async_File(id);
});
} else {
return SignCadesBES_NPAPI_File(id);
}

console.log(Common_SignCadesBES_File(id));
}
*/
//title podpisi//
function GetSignatureTitleElement()
{
var elementSignatureTitle = null;
var x = document.getElementsByName("SignatureTitle");

if(x.length == 0)
{
elementSignatureTitle = document.getElementById("text1").parentNode.previousSibling;

if(elementSignatureTitle.nodeName == "P")
{
return elementSignatureTitle;
}
}
else
{
elementSignatureTitle = x[0];
}

return elementSignatureTitle;
//console.log(elementSignatureTitle);
}




</script>
<div>
<select style='width:400px;' size=5 id='lstId'>

</select>
</div>
<div id="cert_info" style="display:none">
<h2>EBA ETO TI</h2>
<p class="info_field" id="subject"></p>
<p class="info_field" id="issuer"></p>
<p class="info_field" id="from"></p>
<p class="info_field" id="till"></p>
<p class="info_field" id="provname"></p>
<p class="info_field" id="algorithm"></p>
</div>

<div id='cert_infos'></div>

<div id="item_border">
<input id="openFileButton" type='file' onchange="openFile(event)" style="width:100%">
<script>
var openFile = function (event) {
fileContent = undefined;
var input = event.target;
var reader = new FileReader();
reader.readAsDataURL(input.files[0]);
reader.onload = function () {
var header = ";base64,";
var fileData = reader.result;
fileContent = fileData.substr(fileData.indexOf(header) + header.length);

};

};

</script>
</div>

<div><input type='button' id='podpis' value='sign on' onclick="checkFile()"></div>
<p name='SignatureTitle'><p>
<div id='text'></div>
<div id='text1'></div>




</body>
</html>

Отредактировано пользователем 3 октября 2016 г. 16:42:22(UTC)  | Причина: Не указана

Offline MARK_M  
#2 Оставлено : 4 октября 2016 г. 9:48:16(UTC)
MARK_M

Статус: Новичок

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

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