-
Всем привет!
Столкнулся с проблемой, работала программа с сайтом, авторизация по уникальной ссылке, дальше забор данных по idHTTP. 2 дня назад сервер стал отдавать 302 на https, добавил TIdSSLIOHandlerSocketOpenSSL, установил как IOHandler у idHTTP, теперь получаю такое:
Error connecting with SSL. EOF was observed that violates the protocol EIdOSSLConnectError
Как лечить? Гугл молчит как партизан.
-
Пакет выдает:
A SSLv3-compatible ClientHello handshake was found. Fiddler extracted the parameters below.
Version: 3.3 (TLS/1.2)
В настройках SSL стоит Method:=sslvTLSv1_2;
-
Что, никаких мыслей?
-
-
Сорри, не так прочитал
Может ну этих индейцев?
WinInet
-
Честно сказать, я с горя вчера начал C# осваивать, в нем аналогичный листинг загрузки из 20 строк превращается в 2 и уже закончил одну программу и на половину сделал вторую, посложнее, так-то разницы нет, переписывать по WinInet или на C#, на последнем даже проще.
В который раз уже Indy подводит... Что на этот раз не нравится - не понимаю.
-
> так-то разницы нет, переписывать по WinInet или на C#
Только с С# надо еще .NET с собой таскать, а надо ли???
-
> DedUsHka (17.03.14 12:14)
Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.
-
Только с С# надо еще .NET с собой таскать, а надо ли???
.NET установлен почти везде сейчас, а за Delphi нужно таскать отдельно библиотеки .dll, которые не у всех есть.
Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.
Написал выше, что всё работало, до обновления сайта, теперь всё сдохло, а C# работает нормально. OpenSSL в папке лежит 0.9.8.
-
Только с С# надо еще .NET с собой таскать, а надо ли???
.NET установлен почти везде сейчас, а за Delphi нужно таскать отдельно библиотеки .dll, которые не у всех есть.
Ты OpenSSL то библиотеки положил в папку с программой? Indy тут вообще ни при чем, соединение TLS/SSL устанавливается через OpenSSL.
Написал выше, что всё работало, до обновления сайта, теперь всё сдохло, а C# работает нормально. OpenSSL в папке лежит 0.9.8.
-
Да, забыл лог скинуть:
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
-
> DedUsHka (18.03.14 13:35) [10]
> ssl: SSL status: "SSLv3 read server hello A"
По всей видимости тут ошибка, но какая непонятно, ситуацию бы прояснил дамп снятый Wireshark (pcap) процесса установления соединения. По всей видимости в процессе рукопожатия клиента и сервера возникает ошибка, возможно не могут договориться насчет параметров ключевого обмена.
-
Мне удалось заставить нормально работать 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] > Правда, это для сервера, не для клиента...
С клиентом как правило все без проблем работает.
|