Конференция "Сети" » Error connecting with SSL
 
  • DedUsHka (17.03.14 12:14) [0]
    Всем привет!

    Столкнулся с проблемой, работала программа с сайтом, авторизация по уникальной ссылке, дальше забор данных по idHTTP. 2 дня назад сервер стал отдавать 302 на https, добавил TIdSSLIOHandlerSocketOpenSSL, установил как IOHandler у idHTTP, теперь получаю такое:

    Error connecting with SSL.
    EOF was observed that violates the protocol EIdOSSLConnectError

    Как лечить? Гугл молчит как партизан.
  • DedUsHka (17.03.14 12:53) [1]
    Пакет выдает:

    A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.

    Version: 3.3 (TLS/1.2)

    В настройках SSL стоит Method:=sslvTLSv1_2;
  • DedUsHka (17.03.14 16:37) [2]
    Что, никаких мыслей?
  • Dennis I. Komarov © (17.03.14 17:14) [3]
  • Dennis I. Komarov © (17.03.14 17:22) [4]
    Сорри, не так прочитал

    Может ну этих индейцев?

    WinInet
  • DedUsHka (17.03.14 18:18) [5]
    Честно сказать, я с горя вчера начал C# осваивать, в нем аналогичный листинг загрузки из 20 строк превращается в 2 и уже закончил одну программу и на половину сделал вторую, посложнее, так-то разницы нет, переписывать по WinInet или на C#, на последнем даже проще.

    В который раз уже Indy подводит... Что на этот раз не нравится - не понимаю.
  • Dennis I. Komarov © (17.03.14 20:22) [6]

    > так-то разницы нет, переписывать по WinInet или на C#

    Только с С# надо еще .NET с собой таскать, а надо ли???
  • DVM © (17.03.14 23:57) [7]

    > DedUsHka   (17.03.14 12:14) 

    Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.
  • DedUsHka (18.03.14 12:50) [8]
    Только с С# надо еще .NET с собой таскать, а надо ли???

    .NET установлен почти везде сейчас, а за Delphi нужно таскать отдельно библиотеки .dll, которые не у всех есть.

    Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.

    Написал выше, что всё работало, до обновления сайта, теперь всё сдохло, а C# работает нормально. OpenSSL в папке лежит 0.9.8.
  • DedUsHka (18.03.14 12:50) [9]
    Только с С# надо еще .NET с собой таскать, а надо ли???

    .NET установлен почти везде сейчас, а за Delphi нужно таскать отдельно библиотеки .dll, которые не у всех есть.

    Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.

    Написал выше, что всё работало, до обновления сайта, теперь всё сдохло, а C# работает нормально. OpenSSL в папке лежит 0.9.8.
  • DedUsHka (18.03.14 13:35) [10]
    Да, забыл лог скинуть:

    ssl: Resolving hostname *****
    ssl: Connecting to *****
    ssl: SSL status: "before/connect initialization"
    ssl: before/connect initialization / Handshake Start
    ssl: SSL status: "before/connect initialization"
    ssl: before/connect initialization / Connect Loop
    ssl: SSL status: "SSLv3 write client hello A"
    ssl: SSLv3 write client hello A / Connect Loop
    ssl: SSL status: "SSLv3 read server hello A"
    ssl: SSLv3 read server hello A / Connect Failed
  • DVM © (19.03.14 11:04) [11]

    > DedUsHka   (18.03.14 13:35) [10]


    > ssl: SSL status: "SSLv3 read server hello A"

    По всей видимости тут ошибка, но какая непонятно, ситуацию бы прояснил дамп снятый Wireshark (pcap) процесса установления соединения. По всей видимости в процессе рукопожатия клиента и сервера возникает ошибка, возможно не могут договориться насчет параметров ключевого обмена.
  • Дмитрий Белькевич (21.03.14 12:24) [12]
    Мне удалось заставить нормально работать Indy с библиотеками OpenSSL, было правда своего секаса всякого. После прочтения кучи статей, обновления Indy до последней версии (Delphi 2010) всё заработало.


    procedure TDataModule1.IdServerIOHandlerSSLOpenSSL1GetPassword(var Password: ansistring);
    begin
    Password := 'pass';
    end;

    function TDataModule1.IdServerIOHandlerSSLOpenSSL1VerifyPeer(Certificate: TIdX509; AOk: boolean;
    ADepth: integer): boolean;
    begin
    Result := True;
    end;

    procedure TDataModule1.IdHTTPServer1Connect(AContext: TIdContext);
    begin
    if (AContext.Connection.IOHandler is TIdSSLIOHandlerSocketBase) then
     TIdSSLIOHandlerSocketBase(AContext.Connection.IOHandler).PassThrough :=
      AContext.Connection.Socket.Binding.Port <> 443;
    AContext.Binding.SetKeepAliveValues(True, 60000, 20000);
    end;

    procedure TDataModule1.IdHTTPServer1QuerySSLPort(APort: word; var VUseSSL: boolean);
    begin
    VUseSSL := APort = 443;
    end;




    if EnaHTTPS then
    begin
     IdHTTPServer1.Bindings.Add.Port := 443;
     IdServerIOHandlerSSLOpenSSL1.SSLOptions.CertFile := PrgState.PrgDir + 'sertificate\server.crt';
     IdServerIOHandlerSSLOpenSSL1.SSLOptions.KeyFile := PrgState.PrgDir + 'sertificate\server.key';
    end;



    SSLOptions:

    Method - sslvSSLv23
    Mode - sslmServer
    SSLVersions - все включены кроме v23
    VerifyDepth - 0

    Надо было бы статью как-нибудь написать, бо всё разбросано по интернетам, пока всё в кучу не собрал - не заработало.
  • Дмитрий Белькевич (21.03.14 12:27) [13]
    Правда, это для сервера, не для клиента...
    Ну - кому что нужно...
  • DVM © (21.03.14 14:01) [14]

    > Дмитрий Белькевич   (21.03.14 12:27) [13]
    > Правда, это для сервера, не для клиента...

    С клиентом как правило все без проблем работает.
 
Конференция "Сети" » Error connecting with SSL
Есть новые Нет новых   [118608   +46][b:0][p:0.001]