Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не удалось создать защищенный канал SSL/TLS 
:(
    Опции темы
dezmand
Дата 8.9.2010, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.9.2010

Репутация: нет
Всего: нет



Есть программа которая сама заходит на сайт и отображает нужную мне информацию в удобном и компактном виде...

В последний день произошла проблема.

Внизу функция для авторизации.
Код

static public List<object> SendRequestCook(string textRequest, string url, string referer, CookieContainer cooks, string metod, string proxy)
        {
            try
            {
                System.Net.ServicePointManager.Expect100Continue = false;
                byte[] byteArray = Encoding.UTF8.GetBytes(textRequest);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
                
                request.Method = "POST";
                request.ReadWriteTimeout = int.MaxValue;
                request.CookieContainer = cooks;
                request.ProtocolVersion = HttpVersion.Version11;
                request.ContentLength = textRequest.Length;
                request.ContentType = "application/x-www-form-urlencoded";
                request.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*";
                request.Headers.Add("Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7");
                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; WebMoney Advisor; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)";
                request.KeepAlive = true;
                request.Referer = referer;
                // Отправляем данные запроса
                Stream requestStream = request.GetRequestStream();            <----------- Здесь вылетает ошибка.
                requestStream.Write(byteArray, 0, textRequest.Length);

                // Получаем класс ответа
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                // Читаем ответ
                Stream responseStream = response.GetResponseStream();
                StreamReader readStream = new StreamReader(responseStream, enc);
                List<object> list = new List<object>();
                list.Add(cooks);
                string currResponse = readStream.ReadToEnd();
                list.Add(currResponse);
                list.Add(metod);
                readStream.Close();
                response.Close();
               
                return list;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
                return SendRequestCook(textRequest, url, referer, cooks, metod, "");
            }
        }


В 21, отмеченной, строке( Stream requestStream = request.GetRequestStream(); )
вылетает ошибка, которая звучит как "Запрос был прерван: Не удалось создать защищенный канал SSL/TLS(System.Net.WebException)"

Это сообщение отредактировал(а) dezmand - 8.9.2010, 20:49
PM MAIL   Вверх
userdab
Дата 9.9.2010, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



А что за url вы пытались открыть, если не секрет?, если https - то смотрите в сторону сертификатов
PM MAIL   Вверх
dezmand
Дата 10.9.2010, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 8.9.2010

Репутация: нет
Всего: нет



Да-да, конечно Https , я знаю что там соединение защищенное SSL , но я не могу понять как с ним работать, проблемную строку менял на 
SslStream requestStream = (SslStream)request.GetRequestStream();
не помогло.

Я думаю дело в каких-то специфических сертификатах на сервере, которые мне надо указать явно...Но как?   

Это сообщение отредактировал(а) dezmand - 10.9.2010, 12:21
PM MAIL   Вверх
verboff
Дата 18.9.2010, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.9.2010

Репутация: нет
Всего: нет



Здравствуйте возникла аналогичная проблема..dezmand, получилось решить?

попробовал использовать различные сторонние компоненты и почти везде стыкается на том, что после отправки сообщения FINISHED закрывается соединение. Пробовал открывать в разных браузерах, они работают отлично (по крайней мере показывают страничку по адресу))

з.ы.: немного почитал спецификацию smile , решил что наверно сервер отвечает не критичной ошибкой, а dotnet валит соединение из-за любой, поэтому вопрос, можно ли где-то проставить уровень ошибок?)

з.ы.ы.: сертификат самоподписанный, добавлял во всевозможные хранилища, эффекта ноль, видно проблема не в нем :(


Цитата(dezmand @  10.9.2010,  12:20 Найти цитируемый пост)
Я думаю дело в каких-то специфических сертификатах на сервере, которые мне надо указать явно...Но как?


System.Net.ServicePointManager.CertificatePolicy присвойте делегат который возвращает true (принимаются все сертификаты), либо добавляйте вручную (добавив сертификат сначала в хранилище), для поиска:

Код

            // Open the X.509 "Current User" store in read only mode.
            X509Store store = new X509Store(StoreLocation.CurrentUser);
            store.Open(OpenFlags.ReadOnly);

            // Place all certificates in an X509Certificate2Collection object.
            X509Certificate2Collection certCollection = store.Certificates;

            X509Certificate2 cert = null;

            // Loop through each certificate and find the certificate 
            // with the appropriate name.
            foreach (X509Certificate2 c in certCollection)
            {
                if (c.Subject == "название сертификата, обычно адрес сайта")
                {
                    cert = c;
                    break;
                }
            }

            if (cert == null)
            {
                throw new CryptographicException("The X.509 certificate could not be found.");
            }

            // Close the store.
            store.Close();

..потом уже добавляйте найденный сертификат cert в соединение (.ClientCertificates)
взято из http://msdn.microsoft.com/ru-ru/library/ms229744.aspx

если поискать можно найти как загружать серт с файла, но смысла особого я не вижу...

Это сообщение отредактировал(а) verboff - 18.9.2010, 11:23
PM MAIL   Вверх
userdab
Дата 22.9.2010, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 3.9.2010

Репутация: нет
Всего: нет



Попробуйте спросить задать свой вопрос здесь, может там ответят..
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0854 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.