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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline YuryL  
#1 Оставлено : 6 февраля 2014 г. 16:06:29(UTC)
YuryL

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

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

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

На Windows 7 установлено следующее ПО КриптоПро:
Версия ядра - 3.6.5364 KC1
Версия продукта - 3.6.7491

В реестр импортирован личный сертификат, через оснастку установлен в хранилище сертификатов.

Далее js-скриптом пытаемся осуществить запрос к контент-провайдеру:

Код:
function start()
{
    var strRequest = "SomeRequestHere";
         
   WScript.Echo("Sending request...");
   strResult = doRequest(strRequest); 
   WScript.Echo(strResult);   
   WScript.Echo("Done!");   
}
 

function doRequest(sReqBody)
{
 
    var HTTPREQUEST_PROXYSETTING_DEFAULT = 0;
    var HTTPREQUEST_PROXYSETTING_DIRECT = 1;
    var HTTPREQUEST_PROXYSETTING_PROXY = 2;
    var strResult;
 
    try
 {
// Create the WinHTTPRequest ActiveX Object.
     var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
     
//Set Proxy Server if necessary
      WinHttpReq.SetProxy( HTTPREQUEST_PROXYSETTING_PROXY, "proxy.server.ru:3128", "*.e-i.ru");
     
     
//Create an HTTP request
 WinHttpReq.Open("POST", "https://www.rb-ei.com/cpuEnquiry.asp", true);     
    
//Select a client certificate
//CN = Иванов Иван Иванович
 
      WinHttpReq.SetClientCertificate("CURRENT_USER\\My\\Иванов Иван Иванович");
      WScript.Echo("Certificate is: " + "CURRENT_USER\\My\\Иванов Иван Иванович");
      
       
     WinHttpReq.SetRequestHeader("Content-Type","application/x-www-form-urlencoded; Charset=windows-1251");
          
//  Send the HTTP request
     WinHttpReq.Send(sReqBody);
     WinHttpReq.WaitForResponse();
           
     WScript.Echo("Request status: " + WinHttpReq.StatusText);
     strResult = WinHttpReq.ResponseText;
     WScript.Echo(strResult);
 }
    catch (objError)
 {
     var err = objError + "\n";
     err += "WinHTTP returned error: " + (objError.number & 0xFFFF).toString() + "\n\n";
     err += objError.description;
     WScript.Echo(err);
 }
  
//Return the response text
    return strResult;
}
 

//Start the script
 
start();



В ответ получаю ошибку: WinHTTP returned error: 12157. Ошибка поддержки безопасных каналов
Причем заход через IE по адресу https://www.rb-ei.com/cpuEnquiry.asp успешен.
Тот же пример через WinHTTPна любой другой адрес по https, не использующий криптопро также успешен.
Служба поддержки контент-провайдера помочь не может, переадресовала на вас для решения вопроса.
Offline YuryL  
#2 Оставлено : 6 февраля 2014 г. 16:40:33(UTC)
YuryL

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

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

Дополню. Данная проблема проявляется только на ресурсах, которые требуют авторизацию на сертификатах.
Если протестировать на ресурсе без авторизации, но использующих SSL на ГОСТах (пример https://icrs.nbki.ru/main/), то все ок.
Offline Vladislav Osmanov  
#3 Оставлено : 6 февраля 2014 г. 18:18:11(UTC)
Vladislav Osmanov

Статус: Сотрудник

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

Поблагодарили: 4 раз в 4 постах
Юрий, добрый вечер.

Судя по всему, это не совсем js, как Вы пишите, а Windows Script. Как он у вас выполняется?

Попробуйте использовать подключение через XMLHttpRequest с исполнением кода в браузере Internet Explorer.

Примерный код:

Код:
	var request = new XMLHttpRequest();

	request.open("GET", "https://www.rb-ei.com/cpuEnquiry.asp", false);
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=windows-1251");
	request.send(sReqBody);

	if (request.readyState == 4) {
		if (request.status == 200) {
			//Success
			var svcResponse = request.responseText;
		}
		else {
			//Failure
		}
	}


Браузер сам предложит Вам выбрать клиентский сертификат.
Offline YuryL  
#4 Оставлено : 6 февраля 2014 г. 18:58:19(UTC)
YuryL

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

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

Автор: Vladislav Osmanov Перейти к цитате
Юрий, добрый вечер.

Судя по всему, это не совсем js, как Вы пишите, а Windows Script. Как он у вас выполняется?

Попробуйте использовать подключение через XMLHttpRequest с исполнением кода в браузере Internet Explorer.

Примерный код:

Код:
	var request = new XMLHttpRequest();

	request.open("GET", "https://www.rb-ei.com/cpuEnquiry.asp", false);
	request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; Charset=windows-1251");
	request.send(sReqBody);

	if (request.readyState == 4) {
		if (request.status == 200) {
			//Success
			var svcResponse = request.responseText;
		}
		else {
			//Failure
		}
	}


Браузер сам предложит Вам выбрать клиентский сертификат.


Владислав, спасибо за ответ!

Извиняюсь, конечно же WScript. Путем множества экспериментов пришел к такой зависимости:
Если запустить данный скрипт из под Администратора (повышение привилегий), то запрос все таки проходит. Такое ощущение что без повышения прав компонент не может получить клиентский сертификат методом WinHttpReq.SetClientCertificate.

И попутно появилась вторая проблема. Никак не могу использовать компонент для проверки ЭЦП:
Код:
function doVerify(strMessage) {
    try {
        var SignedData = new ActiveXObject("CAPICOM.SignedData");

        SignedData.Verify( strMessage, false, 0);
        return SignedData.Content;
	}
    catch (objError)
	{
	    var err = objError + "\n";
	    err += "CAPICOM returned error: " + (objError.number & 0xFFFF).toString() + "\n\n";
	    err += objError.description;
	    WScript.Echo(err);
	}
}


Ругается что компонент не найден. Устанавливал по инструкции с вашего сайта. У меня Windows 7 x64. Неужели под эту ОС нет возможности использовать данный компонент?
Offline Максим Коллегин  
#5 Оставлено : 6 февраля 2014 г. 19:01:45(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,393
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
в 64-х битах нет CAPIcom, на аналогичный интерфейс предоставляет наш browser плагин.

Отредактировано пользователем 6 февраля 2014 г. 19:02:26(UTC)  | Причина: Не указана

Знания в базе знаний, поддержка в техподдержке
Offline Андрей Писарев  
#6 Оставлено : 6 февраля 2014 г. 23:35:35(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,322
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2208 раз в 1723 постах
Автор: YuryL Перейти к цитате


Ругается что компонент не найден. Устанавливал по инструкции с вашего сайта. У меня Windows 7 x64. Неужели под эту ОС нет возможности использовать данный компонент?


И браузер IE используется х64?
Техническую поддержку оказываем тут
Наша база знаний
Offline YuryL  
#7 Оставлено : 7 февраля 2014 г. 10:21:48(UTC)
YuryL

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

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

Автор: Андрей * Перейти к цитате
Автор: YuryL Перейти к цитате


Ругается что компонент не найден. Устанавливал по инструкции с вашего сайта. У меня Windows 7 x64. Неужели под эту ОС нет возможности использовать данный компонент?


И браузер IE используется х64?


Андрей, я использую данные компоненты не в браузере, а в автономных скриптах. Т.е. фактически вызываются они console-mode.
Offline YuryL  
#8 Оставлено : 7 февраля 2014 г. 11:39:15(UTC)
YuryL

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

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

Автор: maxdm Перейти к цитате
в 64-х битах нет CAPIcom, на аналогичный интерфейс предоставляет наш browser плагин.


Пробую использовать ваш плагин. Контент-провайдер возвращает мне документ подписанные ЭЦП в кодировке BASE64. Сертификат отправителя с открытым ключом для ЭЦП я импортировал в хранилище сертификатов.

Пробую снять ЭЦП так:
Код:
function doVerify(strSignedMessage) {
 
    var CADESCOM_CADES_X_LONG_TYPE_1 = 0x5d;

    try {
        var SignedData = new ActiveXObject("CAdESCOM.CadesSignedData");
         
        SignedData.Verify( strSignedMessage, false, 0);
        return SignedData.Content;
	}
    catch (objError)
	{
	    var err = objError + "\n";
	    err += "CAdESCOM returned error: " + (objError.number & 0xFFFF).toString() + "\n\n";
	    err += objError.description;
	    WScript.Echo(err);
	}
}


Данный код возвращает исключение: 4111 (Криптографическое сообщение не содержит всех запрошенных атрибутов).
Что я делаю не так?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.