wawada Ответов: 1

C# не может создать https/ssl соединение!


я не могу установить https/ssl соединение со стандартным веб-запросом C#

Что я уже пробовал:

So i am using this code, to login on steam's website to use the "registerkey" function the have made so i dont need to do it manually, anyways it have been working long time now but now i cant make https/ssl connection  i dont know why? i have change anything. Post data i sent is not wrong and neither is the cookies and its work to make login when i switch "steampowered.com" to steamcommunity.com but then i can't access the  "Steampowered.com" part which i need, and its only to steampowered.com i cant make https/ssl request.

<pre> LoginRequest("https://store.steampowered.com/login/getrsakey/", "POST", postdata, cookies, headers);



public string LoginRequest(string url, string method, NameValueCollection data = null, CookieContainer cookies = null, NameValueCollection headers = null, string referer = APIEndpoints.COMMUNITY_BASE,bool allowredirect = false,string host = "")
            {
                string query = (data == null ? string.Empty : string.Join("&", Array.ConvertAll(data.AllKeys, key => String.Format("{0}={1}", WebUtility.UrlEncode(key), WebUtility.UrlEncode(data[key])))));
                if (method == "GET")
                {
                    url += (url.Contains("?") ? "&" : "?") + query;
                }

                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                request.Method = method;
                request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36";
                request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
                request.Referer = referer;
                if (host.Length > 0)
                {
                    request.Host = host;
                }
                if (allowredirect)
                {
                    request.AllowAutoRedirect = true;
                }
                if (headers != null)
                {
                    request.Headers.Add(headers);
                }

                if (cookies != null)
                {
                    request.CookieContainer = cookies;
                }

                if (method == "POST")
                {
                    request.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
                    request.ContentLength = query.Length;

                    StreamWriter requestStream = new StreamWriter(request.GetRequestStream()); //Breaks here
                    requestStream.Write(query);
                    requestStream.Close();
                }

                try
                {
                    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                    {
                        if (response.StatusCode != HttpStatusCode.OK)
                        {
                            return null;
                        }

                        using (StreamReader responseStream = new StreamReader(response.GetResponseStream()))
                        {
                            string responseData = responseStream.ReadToEnd();
                            return responseData;
                        }
                    }
                }
                catch (WebException)
                {
                    return null;
                }
            }

Richard MacCutchan

Похоже, что - то изменилось на этом сайте. Обратитесь за помощью к их администратору.

1 Ответов

Рейтинг:
11

Richard Deeming

Что сайт поддерживает только TLS 1.1 или 1.2. По умолчанию .Net использует только SSL3 и TLS 1.0.

Вы можете добавить код для запуска вашего приложения, чтобы включить TLS 1.1 и 1.2:
c# - включены ли TLS 1.1 и TLS 1.2 по умолчанию для .NET 4.5 и .NET 4.5.1 - переполнение стека[^]

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;

Кроме того, если вы используете .NET Framework 4.5 или выше, вы можете внести изменения в реестр на каждой машине, где выполняется ваш код, чтобы включить эти протоколы по умолчанию:
Включение строгой криптографии в .NET Framework 4.5 или выше | Microsoft Docs[^]
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\.NETFramework\\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001


wawada

Я собираюсь это проверить. раньше это работало, чтобы сделать ssl-соединение, но я думаю, что они изменились