Как создать SSL/TLS соединение?
От: losaped  
Дата: 21.02.11 21:33
Оценка:
Подскажите пожалуйста, как создать SSL/TLS соединение?
я нашел много информации по кускам, но никак не получается все это соединить.
Есть сайт: http://atsenergo.ru
от него могу получить нормальный response:

 WebRequest request = WebRequest.Create("http://atsenergo.ru");
 Stream data;
 WebResponse response = request.GetResponse();
 StreamReader reader = new StreamReader(response.GetResponseStream());
 Console.WriteLine(reader.ReadToEnd().ToString());
 Console.ReadLine();


Но мне нужно попасть на страницу: https://www.atsenergo.ru/reporting/personal/eur/sell_norem/20110201
Чтобы попасть на эту страницу нужно заполнить форму авторизации: https://www.atsenergo.ru/auth
на форме есть поля: j_usercode, j_username, j_password, j_region
Сервер не требует сертификата, для входа в нужный мне раздел достаточно просто знать логин, пароль и код участника.

Покажите пример как это делается, желательно с комментариями в местах, которые касаются ssl.
не понимаю где должен применяться SslStream, как используется ServicePointManager?

Вобщем объясните пожалуйста. я уже запутался, столько всего попробовал
Re: Как создать SSL/TLS соединение?
От: matumba  
Дата: 22.02.11 07:32
Оценка:
Здравствуйте, losaped, Вы писали:

L>Подскажите пожалуйста, как создать SSL/TLS соединение?


http://pastebin.com/59hDZ7Db

На СуперСокет не обращай внимание, это тот же сокет. AuthAsClient — строка-сабжект авторизации, для веба это доменное имя сайта.
Я не пользуюсь всякими вебреквестами и другим не советую. Надеюсь, поможет.
Re[2]: Как создать SSL/TLS соединение?
От: losaped  
Дата: 24.02.11 11:11
Оценка:
M>http://pastebin.com/59hDZ7Db

M>На СуперСокет не обращай внимание, это тот же сокет. AuthAsClient — строка-сабжект авторизации, для веба это доменное имя сайта.

M>Я не пользуюсь всякими вебреквестами и другим не советую. Надеюсь, поможет.

            string url = "www.atsenergo.ru";
            SslStream sslStream = null;
            Socket socket = Delivery.ConnectedSocket(url, 80);
            NetworkStream strm = new NetworkStream(socket, true);

            if (!(socket == null))
                try
                {
                    sslStream = new SslStream(strm);
                    sslStream.AuthenticateAsClient(url);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message.ToString());
                }
                Console.ReadLine();


Вот так сделал. Валится с эксепшеном: "Сбой установки соединения из-за неожиданного формата пакета"
Что это может значить?

И до сих пор не понял где и как вводить данные для авторизации
Re: Как создать SSL/TLS соединение?
От: losaped  
Дата: 28.02.11 13:20
Оценка:
Сделал так

string url = "www.atsenergo.ru/auth";
            WebRequest req = WebRequest.Create("Https://" + url);
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3;
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            
            SslStream ssl = new SslStream(resp.GetResponseStream(), false);
            
            StreamReader reader = new StreamReader(ssl);
            Console.WriteLine(reader.ReadToEnd());


теперь при создании sslStream:

SslStream ssl = new SslStream(resp.GetResponseStream(), false);

появляется ошибка:
Поток должен быть доступен для чтения и записи.
Re: Как создать SSL/TLS соединение?
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.03.11 02:52
Оценка: +1
Здравствуйте, losaped, Вы писали:

L>Подскажите пожалуйста, как создать SSL/TLS соединение?

L>я нашел много информации по кускам, но никак не получается все это соединить.

L>не понимаю где должен применяться SslStream, как используется ServicePointManager?

Не надо никаких SslStream. Пользуйтесь WebRequest на здоровье.
Поставьте себе fiddlertool.com, оттрассируйте сессию, и воспроизведите через набор WebRequests. Ничего военного. Работы на полчаса.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Как создать SSL/TLS соединение?
От: Jolly Roger  
Дата: 01.03.11 04:59
Оценка: 5 (1)
Здравствуйте, losaped, Вы писали:

L>
L>            string url = "www.atsenergo.ru";
L>            SslStream sslStream = null;
L>            Socket socket = Delivery.ConnectedSocket(url, 80);
L>            NetworkStream strm = new NetworkStream(socket, true);

L>            if (!(socket == null))
L>                try
L>                {
L>                    sslStream = new SslStream(strm);
L>                    sslStream.AuthenticateAsClient(url);
L>                }
L>                catch (Exception e)
L>                {
L>                    Console.WriteLine(e.Message.ToString());
L>                }
L>                Console.ReadLine();
L>


L>Вот так сделал. Валится с эксепшеном: "Сбой установки соединения из-за неожиданного формата пакета"

L>Что это может значить?

Вы подключаетесь к 80-му порту, по которому по дефолту идёт чистый HTTP-трафик. Естественно, что для SSL\TLS такой формат данных несколько неожиданен Для HTTPS по умолчанию (и в данном случае) используется 443-й порт.

L>И до сих пор не понял где и как вводить данные для авторизации


Вот такой запрос отправляет FF при нажатии кнопки Login

  Скрытый текст
POST https://www.atsenergo.ru/auth HTTP/1.1
Host: www.atsenergo.ru
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: https://www.atsenergo.ru/auth
Cookie: __utma=16533862.1354121388.1298341581.1298951837.1298953023.3; __utmz=16533862.1298953023.3.3.utmcsr=rsdn.ru|utmccn=(referral)|utmcmd=referral|utmcct=/forum/dotnet/4167787.flat.aspx; __utmb=16533862.4.10.1298953023; JSESSIONID=ac1003021e615330780b4ffc4e07936cbf90139d4368; __utmc=16533862
Content-Type: application/x-www-form-urlencoded
Content-Length: 99

callback-url=&j_usercode=123456789&j_username=dfghjkl&j_password=wertrtyu&j_region=eur&action=login

usercode, логин и пароль — случайный набор символов, которые я вводил, т.е. они передаются в чистом виде.
"Нормальные герои всегда идут в обход!"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.