На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> WinSock + SSL , Требуется подключиться к серверу, отправить запрос и прочитать результат
    Здравствуйте, посмотрел по поиску https, libeay32.dll, есть несколько тем, даже то что нужно есть но принципа реализации нету.
    В интернете так же есть куча статей, исходников и тд, перекачал кучу попробовал но требуемого результат не получил по причине полного непонимания этого дела.

    Может кто готов немного научить?

    Вопрос следующий:
    Сейчас в интернете полно сайтов на которых вместо http стало https.
    Раньше все было просто коннектимся к серверу, передаем в сокет данные, читаем и при необходимости отключаемся или передаем/читаем далее.
    Сниффером можно было все запросы посмотреть составить аналогичные для требуемого сервера и работать с ним без всяких заморочек.
    Сейчас сниффером мне даже не посмотреть собственно саму структуру GET/POST запроса, одни крикозябли.
    По скольку в шифровании я полный 0, начал искать хоть какой то исходник что бы можно было хоть с чего то начать, нашел 1 который после долгих и упорных замен библиотек
    libeay32.dll, ssleay32.dll исходник запустился, но требуемого эффекта не получил.
    Соединение проходит, но после отправки GET запроса при чтении сокета размер входящих данных = -1 что означает что соединение было закрыто сервером.

    Вот хочется понять с чего вообще надо начинать разбираться стим https?

    (я вычитал что там после соединение еще одно соединение надо открывать, и в примере там что то открывается)
    ExpandedWrap disabled
      function SSL_connect(ssl: pointer):Integer; cdecl; external SSL_LIB_NAME;
       
      function TSLESH_SSL_Socket.Connect(ip:string; port:word):boolean;
      var
        nip:integer;
        phe:PHostEnt;
      begin
        result := false;
        sock := socket(AF_INET, SOCK_STREAM, 0);
        ErrorFlag := sock = INVALID_SOCKET;
        // если сокет создался
        if (ErrorFlag = false) then
        begin
          nip := inet_addr(pansichar(ip));
          if nip = INADDR_NONE then // если указано доменное имя а не IP
          begin
            // резолвим имя
            phe := gethostbyname(pansichar(ip));
            if phe <> nil then
            begin
              nip := integer(pointer(phe^.h_addr^)^);
            end;
          end;
       
           //  если есть адрес сервера
          if nip <> INADDR_NONE then
          begin
            caddr.sin_family := AF_INET;
            caddr.sin_addr.s_addr := nip;
            caddr.sin_port := htons(port);
       
            // коннектитмся
            if winsock.connect(sock, caddr, sizeof(caddr)) <> SOCKET_ERROR then
            begin
              // если сконнектились то настраиваем SSL
              SSL_set_fd(ssl, sock);
              SSL_connect(ssl);
              result := true;
            end;
          end;
        end;
       
        Connected := result;
      end;


    Но хотя бы первый вопрос откуда я знаю как составлять тот же запрос к серверу?
    ExpandedWrap disabled
      GET / HTTP/1.0
      или
      GET / HTTP/1.1
      ??
       
      User-Agent ???
      и тд


    Сорри не умею точно описывать проблему, прошу не ругаться...

    (Есть конечно вариант на VDS читать все что надо по средствам PHP а потом эти данные уже программой запрашивать и обрабатывать но это не особо вариант)

    - Подключиться по средствам сокетов к серверу на 443 порт без проблем
    А что далее делать?
    Сообщение отредактировано: Gen -
      Пока ждал ответа решил попробовать Indy. Вот в таком виде вроде работает:

      ExpandedWrap disabled
        procedure TForm1.Button1Click(Sender: TObject);
        Var
        HTTP:TidHTTP;
        IdSSLOpenSSL:TIdSSLIOHandlerSocketOpenSSL;
        Data:String;
        begin
        HTTP:=TidHTTP.Create(nil);
        IdSSLOpenSSL:=TIdSSLIOHandlerSocketOpenSSL.Create(nil);
        HTTP.HandleRedirects:=True;
        IdSSLOpenSSL.SSLOptions.Method:= sslvSSLv3;
        IdSSLOpenSSL.SSLOptions.Mode := sslmUnassigned;
        IdSSLOpenSSL.SSLOptions.VerifyMode := [];
        IdSSLOpenSSL.SSLOptions.VerifyDepth := 0;
        HTTP.IOHandler:=IdSSLOpenSSL;
        Data:=HTTP.Get('https://firstvds.com');
        Memo1.Text := Data;
        IdSSLOpenSSL.Free;
        HTTP.Free;
        end;


      Но это компанеты, а интересуют именно сокеты.
      Сообщение отредактировано: Gen -
        Не влезал в эту тему, но если бы для успешного коннекта достаточно было всего двух вызовов функций, никто бы ничего и не спрашивал. В ICS, напрмиер, код работы с SSL занимает чуть ли не столько же, сколько базовый код по сокетам. Так что советую подумать, так ли обязательно делать все самому, а не применить готовый код.
        Сообщение отредактировано: Fr0sT -
          Компоненты индейцев могут вызвать краши и баги.
          Рекомендую пользоваться OverbyteIcs бесплатный набор компонентов для работы с Socket (есть поддержка SSL).
            Только ICS асинхронный, что несколько сложнее для понимания и проектирования.
            Для снифа SSL можно юзать Fiddler или Wireshark.
              В WinAPI есть функционал как SSL-сервера, так и SSL-клиента, абстрагированный от каких-либо сокетов.
              Называется schannel
              http://msdn.microsoft.com/en-us/library/wi...3(v=vs.85).aspx
                Посмотрел ссылку, спасибо. Что-то очень на RSA смахивает.
                (Установление безопасного сеанса с помощью TLS)

                А может где то есть более конкретные структуры пакетов?
                ExpandedWrap disabled
                  (например: 2.Сервер отвечает, отправляя сообщение «hello Server» для клиента, а также случайное значение сервера.
                  А как пакет выглядеть должен?)

                Это как я понимаю так же как в RSA Client Random и Server Random на основании которых создаются закрытый и открытый ключи?
                Очень похоже по крайней мере.

                Ну То что много писать это уже другой вопрос, в конце концов я просто хочу понять реально это реализовать или нет хотя бы для конкретного сайта например без реализации доп функций что бы везде работало.

                И может я не совсем точно выразился, я привел в начале пару библиотек для работы с SSL, с их же использованием не надо будет реализовывать кучу всего и использовать тот же инди?
                (я посмотрел но не вижу путевого описания как ими пользоваться)
                Сообщение отредактировано: Gen -
                  WinInet умеет https, судя по описанию.
                  1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0.0725 ]   [ 15 queries used ]   [ Generated: 25.08.26, 14:55 GMT ]