Конференция "Сети" » Indy + SSL = не могу залогиниться [D7, WinXP]
 
  • CaptainAlex (20.03.09 09:58) [0]
    Может посоветуете что? Задача - залогиниться на сайт по https. Запрос уходит, а возвращается эта же страница, т.е. логина не происходит. Все dll есть и все что можно вроде бы добавлено и проверено :( Или мне нужно установить сертификат с этого сайта?
    Сайты пробовал разные, поведение одинаковое.

    Вот такой код есть:

     HTTP := TidHTTP.Create(nil);
     HTTP.AllowCookies := true;
     HTTP.HandleRedirects := true;
     HTTP.Intercept := Form1.IdLogFile1;
     FUseSLL := true;
     if FUseSLL then
     begin
       SSLIO := TIdSSLIOHandlerSocketOpenSSL.Create(HTTP);
       HTTP.IOHandler := SSLIO;
       SSLIO.SSLOptions.Method := sslvSSLv3;
       HTTP.Request.BasicAuthentication := true;
       HTTP.ReadTimeout := 40000;
     end;
     Params := TStringList.Create;

     Params.Clear;
     Params.Add(GetLoginParam('Username') + '=' + GetLogin);
     Params.Add(GetLoginParam('Password') + '=' + GetPassword);
     HTML := HTTP.Post(GetLoginParam('PostURL'), Params);

    Поля, их значения и URL возвращаются функциями корректно. Для проверки кода можно использовать:

    Params.Add(GetLoginParam('login=delphikingdom');
    Params.Add(GetLoginParam('password=delphi');
    HTML := HTTP.Post('https://www.fotolia.com/Member/Login', Params);
  • Palladin © (20.03.09 10:03) [1]

    > Или мне нужно установить сертификат с этого сайта?

    именно
  • Медвежонок Пятачок © (20.03.09 10:17) [2]
    интересно куда его надо установить, если ссл не работает с виндовыми хранилищами сертификатов .....
  • Palladin © (20.03.09 10:21) [3]
    на диск :)
  • Palladin © (20.03.09 10:22) [4]
    вообще рекомендую выбросить indy и работать с WinInet
  • CaptainAlex (20.03.09 11:36) [5]
    Итак, я могу забрать с сайта сертификат *.crt, что мне с ним делать дальше. Indy  же нужен pem, правильно я понимаю? Можно алгоритм действий?

    2Palladin
    можно пример на WinInet? Я не очень с этим делом знаком.
  • Palladin © (20.03.09 11:59) [6]

    > можно пример на WinInet?

    пример чего конкретно?
  • Медвежонок Пятачок © (20.03.09 12:15) [7]
    Итак, я могу забрать с сайта сертификат *.crt,

    сертификат сам прилетает с сайта в ответе на гет или пост клиента.
    твоя задача - сказать в обработчике клиента, принимаешь ты его или нет.
    сам сертификат никуда пихать не надо.
  • CaptainAlex (20.03.09 13:20) [8]
    2Palladin

    Пример обращения к сайту с использованием SSL в самом простейшем случае. Хочется уяснить как обращаться с сертификатами на клиенте.

    2 Медвежонок Пятачок

    Где именно нужно этот сертификат отловить? В заголовках про него ничего нет. Нужно ли как-то по-особенному его запрашивать? Если есть пример как это сделать средствами Indy, было бы здорово посмотреть.
    Могу выложить лог, который дает TIdLogFile
  • Медвежонок Пятачок © (20.03.09 13:39) [9]
    не надо никого ловить.
    Пиши обработчик OnverifyPeer и возвращай из него True
  • Palladin © (20.03.09 14:04) [10]
    hInet:=InternetOpen('WRWinInet',INTERNET_OPEN_TYPE_PRECONFIG,Nil,Nil,0);
    hConn:=InternetConnect(hInet,PChar(p_strHost),INTERNET_DEFAULT_HTTPS_PORT,Nil,Ni l,INTERNET_SERVICE_HTTP,0,1);
    hReq:=HttpOpenRequest(hConn,'POST',PChar(p_strDoc),Nil,Nil,Nil,INTERNET_FLAG_SEC URE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_KEEP_CONNECTION,1);
    HttpSendRequest(hReq,PChar(strHdrs),Length(strHdrs),PChar(p_strData),Length(p_st rData))

  • CaptainAlex (20.03.09 14:24) [11]
    Обработчик написал, работает как и прежде :( В остальных обработчиках надо что-то писать?
  • CaptainAlex (20.03.09 14:25) [12]
    Palladin, спасибо
  • CaptainAlex (20.03.09 15:15) [13]
    SSLOptions.VerifyMode на что-то влияет в данном случае? у меня там пусто сейчас.
 
Конференция "Сети" » Indy + SSL = не могу залогиниться [D7, WinXP]
Есть новые Нет новых   [134435   +33][b:0][p:0.001]