Winhttp winhttprequest ошибка поддержки безопасных каналов

I have a classic ASP website running on a Windows Server 2012 box. One page makes a HTTP request to another application over https using code like this: Sub ShopXML4http(url, inStr, outStr, method,

None of the answers above applies to my situation. Then I hopped on the link here:

https://support.microsoft.com/en-za/help/3140245/update-to-enable-tls-1-1-and-tls-1-2-as-a-default-secure-protocols-in

This update provides support for Transport Layer Security (TLS) 1.1 and TLS 1.2 in Windows Server 2012, Windows 7 Service Pack 1 (SP1), and Windows Server 2008 R2 SP1.

Applications and services that are written by using WinHTTP for Secure Sockets Layer (SSL) connections that use the WINHTTP_OPTION_SECURE_PROTOCOLS flag can’t use TLS 1.1 or TLS 1.2 protocols. This is because the definition of this flag doesn’t include these applications and services.

This update adds support for DefaultSecureProtocols registry entry that allows the system administrator to specify which SSL protocols should be used when the WINHTTP_OPTION_SECURE_PROTOCOLS flag is used.

This can allow certain applications that were built to use the WinHTTP default flag to be able to leverage the newer TLS 1.2 or TLS 1.1 protocols natively without any need for updates to the application.

This is the case for some Microsoft Office applications when they open documents from a SharePoint library or a Web Folder, IP-HTTPS tunnels for DirectAccess connectivity, and other applications by using technologies such as WebClient by using WebDav, WinRM, and others.

This update will not change the behavior of applications that are manually setting the secure protocols instead of pass the default flag.

Client service on Windows 2008 R2 server outbound to server over TLS reciprocated the error in question. I thought it could be cipher suite compatibility. Wireshark trace indicated version in Client Hello request was TLS 1.0 but server requires TLS 1.2. The cipher suites sent to outbound server from client service were fine. The problem is the client service or application on Windows server default employs the system default, which is not TLS 1.2.

The solution is to add a registry subkey named DefaultSecureProtocols with a value corresponding to which TLS version(s) should be supported. Add said registry subkey, with type DWORD, to the following locations:

  • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionInternet SettingsWinHttp
  • HKEY_LOCAL_MACHINESOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionInternet SettingsWinHttp

For Internet Explorer fix, you can add a similar registry subkey titled SecureProtocols, also with type DWORD, to the following locations:

  • HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionInternet Settings
  • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionInternet Settings

Below you can find the table of values for both subkeys:

DefaultSecureProtocols Value         Protocol enabled
0x00000008                           Enable SSL 2.0 by default
0x00000020                           Enable SSL 3.0 by default
0x00000080                           Enable TLS 1.0 by default
0x00000200                           Enable TLS 1.1 by default
0x00000800                           Enable TLS 1.2 by default

For example:

The administrator wants to override the default values for WINHTTP_OPTION_SECURE_PROTOCOLS to specify TLS 1.1 and TLS 1.2.

Take the value for TLS 1.1 (0x00000200) and the value for TLS 1.2 (0x00000800) then add them together in calculator (in programmer mode), the resulting registry value would be 0x00000A00.

I applied 0x00000A00 as the value for both subkeys and it successfully resolved the issue.

There is also an Easy Fix (link is here: https://aka.ms/easyfix51044) available from Microsoft, if you don’t wish to manually enter registry subkeys and values.

При обращении к сервису ОСМИ не происходит соединения и в журнале имеется ошибка:

Ошибка при вызове метода контекста (Send): Произошла исключительная ситуация (WinHttp.WinHttpRequest): Ошибка поддержки безопасных каналов

Эта ошибка связана с тем, на стороне сервера 1С не включена поддержка протокола безопасного соединения TLSv1.2 а включены только устаревшие протоколы TLSv1.0 и TLSv1.1

Встроенная поддержка протокола TLSv1.2 полноценно появилась в 1С с версией платформы 8.3.9. Чтобы разрешить поддержку этого протокола без обновления вашей версии 1С, ознакомьтесь со статьей https://infostart.ru/public/1024217/

Путем добавления пары ключей в регистр Windows проблема исчезнет без обновления платформы.

Метаданные статьи

Дата добавления:

2019-12-22 12:16:42

Назад

Связанные статьи

  • Remove From My Forums

 locked

Ошибка поддержки безопасных каналов

  • Вопрос

  • WinHttp.WinHttpRequest: Ошибка поддержки безопасных каналов

    После очередного обновления перестал работать скрипт отправляющий смски Как починить?

Ответы

  • КриптоПро стоит у Вас? Если да, то удаляем и проверяем

    что вы обновляли?

    • Изменено

      3 марта 2015 г. 13:23

    • Предложено в качестве ответа
      Dmitriy VereshchakMicrosoft contingent staff
      5 марта 2015 г. 11:33
    • Помечено в качестве ответа
      Dmitriy VereshchakMicrosoft contingent staff
      5 марта 2015 г. 13:56

  • Возможно банальная переустановка / обновление крипто про поможет.

    • Предложено в качестве ответа
      Dmitriy VereshchakMicrosoft contingent staff
      5 марта 2015 г. 11:33
    • Помечено в качестве ответа
      Dmitriy VereshchakMicrosoft contingent staff
      5 марта 2015 г. 13:56


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() + "nn";
     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
		}
	}

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


Вверх

WWW


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() + "nn";
	    err += objError.description;
	    WScript.Echo(err);
	}
}

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


Вверх


Offline

Максим Коллегин

 


#5
Оставлено
:

6 февраля 2014 г. 19:01:45(UTC)

Максим Коллегин

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

Группы: Администраторы

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

Сказал «Спасибо»: 21 раз
Поблагодарили: 660 раз в 583 постах

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

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

Знания в базе знаний, поддержка в техподдержке


Вверх

WWW


Offline

Андрей Писарев

 


#6
Оставлено
:

6 февраля 2014 г. 23:35:35(UTC)

Андрей *

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

Группы: Участники

Зарегистрирован: 26.07.2011(UTC)
Сообщений: 11,756
Мужчина
Российская Федерация

Сказал «Спасибо»: 451 раз
Поблагодарили: 1840 раз в 1423 постах

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

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

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

Техническую поддержку оказываем тут
Наша база знаний


Вверх

WWW


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() + "nn";
	    err += objError.description;
	    WScript.Echo(err);
	}
}

Данный код возвращает исключение: 4111 (Криптографическое сообщение не содержит всех запрошенных атрибутов).
Что я делаю не так?


Вверх

Пользователи, просматривающие эту тему

Guest

Быстрый переход
 

Вы не можете создавать новые темы в этом форуме.

Вы не можете отвечать в этом форуме.

Вы не можете удалять Ваши сообщения в этом форуме.

Вы не можете редактировать Ваши сообщения в этом форуме.

Вы не можете создавать опросы в этом форуме.

Вы не можете голосовать в этом форуме.

Понравилась статья? Поделить с друзьями:
  • Winhttp error 12175
  • Winhttp dll ошибка
  • Winhttp callback status flag security channel error
  • Winhex error 3
  • Winerror 1117 ошибка ввода вывода dmde