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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline chainik  
#1 Оставлено : 30 апреля 2015 г. 15:45:06(UTC)
chainik

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Помогите пожалуйста разобраться.
Создаю и проверяю подпись таки кодом взятым из примера (модификация только добавлена function ObjCreator)
Html страничка вызывающая тестовый код тоже ниже.
По идее, как понимаю, подпись должна проверяться локально при отсутствии соединения с Интернет.
Сертификат УЦ установлен в доверенные корневые центры.
По факту подпись проверяется при наличии подключения к Интерент.
Выдергиваем вилку из сетевой карты и повторяю тест.
Выдается ошибка :
Failed to verify signature. Error: Процесс отмены не может быть продолжен -
проверка сертификатов недоступна. (-2146782482)
Что нужно сделать чтобы plugin при проверке не лез в Интернет?
Код:
   
var CADESCOM_CADES_BES = 1;
    var CAPICOM_CURRENT_USER_STORE = 2;
    var CAPICOM_MY_STORE = "My";
    var CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED = 2;
    var CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME = 1;
    var CADESCOM_BASE64_TO_BINARY = 1; 
	
function ObjCreator(name) {
    switch (navigator.appName) {
        case 'Microsoft Internet Explorer':
            return new ActiveXObject(name);
        default:
            var userAgent = navigator.userAgent;
            if (userAgent.match(/Trident\/./i)) { // IE10, 11
                return new ActiveXObject(name);
            }
            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);
    }

} 

    function GetErrorMessage(e) {
        var err = e.message;
        if (!err) {
            err = e;
        } else if (e.number) {
            err += " (" + e.number + ")";
        }
        return err;
    }
    
    function SignCreate(certSubjectName, dataToSign) {
        var oStore = ObjCreator("CAPICOM.Store");
        oStore.Open(CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE,
        CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED);

        var oCertificates = oStore.Certificates.Find(
        CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME, certSubjectName);
        if (oCertificates.Count == 0) {
            alert("Certificate not found: " + certSubjectName);
            return;
        }
        var oCertificate = oCertificates.Item(1);
        var oSigner = ObjCreator("CAdESCOM.CPSigner");
        oSigner.Certificate = oCertificate;

        var oSignedData = ObjCreator("CAdESCOM.CadesSignedData");
        // Значение свойства ContentEncoding должно быть задано
        // до заполнения свойства Content
        oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
        oSignedData.Content = dataToSign;
        
        var sSignedMessage = "";
        try {
            sSignedMessage = oSignedData.SignCades(oSigner, CADESCOM_CADES_BES, true);
        } catch (err) {
            alert("Failed to create signature. Error: " + GetErrorMessage(err));
            return;
        }

        oStore.Close();

        return sSignedMessage;
    }

    function Verify(sSignedMessage, dataToVerify) {
        var oSignedData = ObjCreator("CAdESCOM.CadesSignedData");
        try {
            // Значение свойства ContentEncoding должно быть задано
            // до заполнения свойства Content
            oSignedData.ContentEncoding = CADESCOM_BASE64_TO_BINARY;
            oSignedData.Content = dataToVerify;
            oSignedData.VerifyCades(sSignedMessage, CADESCOM_CADES_BES, true);
        } catch (err) {
            alert("Failed to verify signature. Error: " + GetErrorMessage(err));
            return false;
        }

        return true;
    }

    function run() {
        var oCertName = document.getElementById("CertName");
        var sCertName = oCertName.value; // Здесь следует заполнить SubjectName сертификата
        if ("" == sCertName) {
            alert("Введите имя сертификата (CN).");
            return;
        }
        // Предварительно закодированные в BASE64 бинарные данные
        // В данном случае закодирована строка "Some Data."
        var dataInBase64 = "U29tZSBEYXRhLg==";

        // Подписаны будут исходные бинарные данные (в данном случае - "Some Data.")
        // Такая подпись должна проверяться в КриптоАРМ и cryptcp.exe
        var signedMessage = SignCreate(sCertName, dataInBase64);

        document.getElementById("signature").innerHTML = signedMessage;

        var verifyResult = Verify(signedMessage, dataInBase64);
        if (verifyResult) {
            alert("Signature verified");
        }
    }


вызывающий html файл:
Код:
  
<html>
<head>
<object id="cadesplugin" type="application/x-cades" class="hiddenObject"></object>
<script language="javascript" src="testcode.js"></script>
</head>
<body>

Имя сертификата:<input id="CertName"/></br>
Подписаны будут исходные бинарные данные (в данном случае - "Some Data.")</br>
Такая подпись должна проверяться в КриптоАРМ и cryptcp.exe</br>
<button onclick="run()">test</button></br>
подпись:<textarea id="signature" rows=15 cols=50></textarea>

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