Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HttpWebRequest GetResponse() и несварение SSL протокола / 21 сообщений из 21, страница 1 из 1
27.10.2020, 10:06
    #40012096
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
                ServicePointManager.Expect100Continue = true;
                ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                                                       | SecurityProtocolType.Tls11
                                                       | SecurityProtocolType.Tls12
                                                       | SecurityProtocolType.Ssl3
                                                       | (SecurityProtocolType)12288; // Tls13 = 12288

                var webRequest       = (HttpWebRequest)WebRequest.Create("https://shop.blackanddecker.ru/yandexmarket/index/bd");
                webRequest.Method    = "GET";
                webRequest.Accept    = "text/html, application/xhtml+xml, application/xml, gzip, deflate, br, application/x-rar-compressed, application/octet-stream, application/zip; q=0.9,image/webp,*/*;q=0.8";
                webRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0";
                webRequest.AddRange(0);

                webResponse = (HttpWebResponse)webRequest.GetResponse();
                responseStream = webResponse.GetResponseStream();





и на последней строке — тадааам:
Error: The request was aborted: Could not create SSL/TLS secure channel.



ЧЯДНТ? Фреймворки пробовал от 4.5 до 4.7.2
...
Рейтинг: 0 / 0
27.10.2020, 11:23
    #40012126
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
WebRequest он, как бы, несколько legacy, хотя формально так в API не помечен. Почему бы не попробовать переделать это на более модно-молодежный HttpClient?
...
Рейтинг: 0 / 0
27.10.2020, 12:07
    #40012141
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat,

Хотелось бы обойтись без смены классов, там до фига такого кода, который стоит поменять но только после запуска легаси версии. Переформулирую вопрос - если на https://shop.blackanddecker.ru/yandexmarket/index/bd зайти, то что там в ответе сайта такого несовместимого с жизнью HttpWebRequest?
...
Рейтинг: 0 / 0
27.10.2020, 15:19
    #40012241
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior
fkthat,

Хотелось бы обойтись без смены классов, там до фига такого кода, который стоит поменять но только после запуска легаси версии. Переформулирую вопрос - если на https://shop.blackanddecker.ru/yandexmarket/index/bd зайти, то что там в ответе сайта такого несовместимого с жизнью HttpWebRequest?

У меня вот так работает:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var webRequest = (HttpWebRequest)WebRequest.Create("https://shop.blackanddecker.ru/yandexmarket/index/bd");
webRequest.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
webRequest.Method = "GET";
webRequest.Accept = "..."
webRequest.UserAgent = "....";
webRequest.AddRange(0);
using var webResponse = (HttpWebResponse)webRequest.GetResponse();
using var responseStream = webResponse.GetResponseStream();
using var tr = new StreamReader(responseStream);
Console.WriteLine(tr.ReadToEnd());


Т.ч. дело тут где-то в ServicePointManager. Надо по нему docs читать. Он, похоже, использует какой-то "особенный" TLS.
...
Рейтинг: 0 / 0
28.10.2020, 00:11
    #40012415
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat,

А Вы под какой .NET собирали пример? Я полпробовал его под 4.7.2 собрать - пофигу, ошибка никуда не делась.
...
Рейтинг: 0 / 0
28.10.2020, 00:28
    #40012418
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior
fkthat,

А Вы под какой .NET собирали пример? Я полпробовал его под 4.7.2 собрать - пофигу, ошибка никуда не делась.


Проверил код fkthat , у мя тоже работает:
...
Рейтинг: 0 / 0
28.10.2020, 03:43
    #40012438
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Очень сильно подозреваю, что дело вот в этом:
https://docs.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager?view=netframework-4.7.2 The .NET Framework 4.6 includes a new security feature that blocks insecure cipher and hashing algorithms for connections. Applications using TLS/SSL through APIs such as HttpClient, HttpWebRequest, FtpWebRequest, SmtpClient, SslStream, etc. and targeting .NET Framework 4.6 get the more-secure behavior by default.

Developers may want to opt out of this behavior in order to maintain interoperability with their existing SSL3 services or TLS w/ RC4 services. This article explains how to modify your code so that the new behavior is disabled.
...
Рейтинг: 0 / 0
28.10.2020, 10:33
    #40012502
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Из статьи
автор С помощью файла AppConfig для приложения: добавьте следующую строку к файлу Appconfig:
< AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=true"/ >



Не совсем ясно куда в моем клиентском app.config добавлять эту строку. Есть идеи?
...
Рейтинг: 0 / 0
28.10.2020, 10:35
    #40012503
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
проблема еще может быть в кривом времени на компьютере автора
...
Рейтинг: 0 / 0
28.10.2020, 10:55
    #40012516
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior
Не совсем ясно куда в моем клиентском app.config добавлять эту строку. Есть идеи?

Я думаю, что если там явно не сказано куда, то сразу же под "<configuration>". Только если у тебя ASP.NET, то, конечно же, нужен не App.Config, а Web.config.
...
Рейтинг: 0 / 0
28.10.2020, 11:03
    #40012526
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Добавил

Код: c#
1.
2.
3.
4.
                const string DisableCachingName = @"TestSwitch.LocalAppContext.DisableCaching";
                const string DontEnableSchUseStrongCryptoName = @"Switch.System.Net.DontEnableSchUseStrongCrypto";
                AppContext.SetSwitch(DisableCachingName, true);
                AppContext.SetSwitch(DontEnableSchUseStrongCryptoName, true);



прямо перед WebRequest.Create() - пофигу, при чтении результата по-прежнему получаю "The request was aborted: Could not create SSL/TLS secure channel." Фреймворк выставил в 4.8, время и дата +-1 минута совпадает с GMT+3
...
Рейтинг: 0 / 0
28.10.2020, 12:03
    #40012555
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior,

У меня работает вот так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
ServicePointManager.Expect100Continue = true;
ServicePointManager.ServerCertificateValidationCallback = (_, _, _, _) => true;

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 |
    SecurityProtocolType.Tls12 | (SecurityProtocolType)12288;

var webRequest = (HttpWebRequest)WebRequest.Create("https://shop.blackanddecker.ru/yandexmarket/index/bd");
webRequest.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
webRequest.Method = "GET";
using var webResponse = (HttpWebResponse)webRequest.GetResponse();
using var responseStream = webResponse.GetResponseStream();
using var tr = new StreamReader(responseStream);
Console.WriteLine(tr.ReadToEnd());


Попробуй убрать SSL3 - оно же даже ворнинг "Obsolete" на него выдает еще в VS и при компиляции.
...
Рейтинг: 0 / 0
28.10.2020, 12:53
    #40012574
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat
У меня работает вот так:


Пофигу, все та же ошибка. У меня OS - Win Server 2012R2 x64, VS2019 v16.7.7
...
Рейтинг: 0 / 0
28.10.2020, 13:09
    #40012593
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Попробовал под Core 3.1 собрать и запустить - ошибка поменялась - "The message received was unexpected or badly formatted."
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System.Net;

namespace ConsoleAppCore1
{
    class Program
    {
        static void Main(string[] args)
        {
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 |
                SecurityProtocolType.Tls12 | (SecurityProtocolType)12288;

            var webRequest = (HttpWebRequest)WebRequest.Create("https://shop.blackanddecker.ru/yandexmarket/index/bd");
            webRequest.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true;
            webRequest.Method = "GET";

            using (var webResponse = (HttpWebResponse)webRequest.GetResponse())
            {
                using (var responseStream = webResponse.GetResponseStream())
                {

                }
            }
        }
    }
}
...
Рейтинг: 0 / 0
28.10.2020, 13:23
    #40012600
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Проверил на dotnetfiddle под Core 3.1 - работает. Под 4.7.2 при запуске там же ловлю

Run-time exception (line 15): Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

Stack Trace:

[System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Net.ServicePointManager.set_ServerCertificateValidationCallback(RemoteCertificateValidationCallback value)
at ConsoleAppCore1.Program.Main(String[] args) :line 15


Только мне это под обычный .NET надо и на моей машине. Как можно понять что МОЕМУ .NET не нравится?
...
Рейтинг: 0 / 0
28.10.2020, 14:40
    #40012638
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior,

Вот же блин. Запустил твой крайний код у себя под 4.7.2 и все работает. Похоже у тебя дело вообще не не в коде и не в дотнет. У тебя просто в браузере вообще этот URL открывается?
...
Рейтинг: 0 / 0
28.10.2020, 17:08
    #40012742
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat,

А то! В ФФ и хроме пулей открывается. Более того, эта проблема не только на моей машине меет место быть, а еще миниммум на 3.
...
Рейтинг: 0 / 0
28.10.2020, 17:30
    #40012756
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
Landwarrior
fkthat,

А то! В ФФ и хроме пулей открывается. Более того, эта проблема не только на моей машине меет место быть, а еще миниммум на 3.

Какие-нибудь прокси и прочие нестандартности сети у вас есть?
...
Рейтинг: 0 / 0
28.10.2020, 17:34
    #40012761
Landwarrior
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat
Landwarrior
fkthat,

А то! В ФФ и хроме пулей открывается. Более того, эта проблема не только на моей машине меет место быть, а еще миниммум на 3.

Какие-нибудь прокси и прочие нестандартности сети у вас есть?


Нет, и моя машина с остальными 3 в разных сетях вообще.
...
Рейтинг: 0 / 0
28.10.2020, 18:01
    #40012778
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
[quot Landwarrior#22222175]Под 4.7.2 при запуске там же ловлю

Run-time exception (line 15): Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.

Stack Trace:

[System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.]
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessSecurityEngine.Check(CodeAccessPermission cap, StackCrawlMark& stackMark)
at System.Security.CodeAccessPermission.Demand()
at System.Net.ServicePointManager.set_ServerCertificateValidationCallback(RemoteCertificateValidationCallback value)
at ConsoleAppCore1.Program.Main(String[] args) :line 15


Ты это ловишь потому что CAS (Code Access Security) . На фиддле оно там, очевидно, выполняет код без full-trust. Т.ч. это никакой информации не даёт - локально ты если и словишь ошибку, то другую.
...
Рейтинг: 0 / 0
29.10.2020, 03:10
    #40012926
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
HttpWebRequest GetResponse() и несварение SSL протокола
fkthat
Похоже у тебя дело вообще не не в коде и не в дотнет.


Дык по-моему с самого начала было очевидно :)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / HttpWebRequest GetResponse() и несварение SSL протокола / 21 сообщений из 21, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]