Статус: Новичок
Группы: Участники
Зарегистрирован: 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, не использующий криптопро также успешен. Служба поддержки контент-провайдера помочь не может, переадресовала на вас для решения вопроса.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.02.2014(UTC) Сообщений: 5 Откуда: Kirov
|
Дополню. Данная проблема проявляется только на ресурсах, которые требуют авторизацию на сертификатах. Если протестировать на ресурсе без авторизации, но использующих SSL на ГОСТах (пример https://icrs.nbki.ru/main/), то все ок.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 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
}
}
Браузер сам предложит Вам выбрать клиентский сертификат.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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. Неужели под эту ОС нет возможности использовать данный компонент?
|
|
|
|
Статус: Сотрудник
Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC) Сообщений: 6,393 Откуда: КРИПТО-ПРО Сказал «Спасибо»: 37 раз Поблагодарили: 717 раз в 621 постах
|
в 64-х битах нет CAPIcom, на аналогичный интерфейс предоставляет наш browser плагин. Отредактировано пользователем 6 февраля 2014 г. 19:02:26(UTC)
| Причина: Не указана |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,322 Сказал «Спасибо»: 549 раз Поблагодарили: 2208 раз в 1723 постах
|
Автор: YuryL
Ругается что компонент не найден. Устанавливал по инструкции с вашего сайта. У меня Windows 7 x64. Неужели под эту ОС нет возможности использовать данный компонент?
И браузер IE используется х64? |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 06.02.2014(UTC) Сообщений: 5 Откуда: Kirov
|
Автор: Андрей * Автор: YuryL
Ругается что компонент не найден. Устанавливал по инструкции с вашего сайта. У меня Windows 7 x64. Неужели под эту ОС нет возможности использовать данный компонент?
И браузер IE используется х64? Андрей, я использую данные компоненты не в браузере, а в автономных скриптах. Т.е. фактически вызываются они console-mode.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 (Криптографическое сообщение не содержит всех запрошенных атрибутов). Что я делаю не так?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close