INDY 10.1.5 - Какие библиотеки DLL SSL работают с Delphi 2006?

Я пытаюсь подключиться к документам Google (следуя отличному примеру REST Марко Канту), но получаю следующие ошибки SSL:

1) Если я использую dll SSL из openssl-0.9.8i-i386-win32.zip, я получаю сообщение об ошибке:

«Не удалось загрузить библиотеку SSL»

2) Если я использую dll SSL из indy_OpenSSL096m.zip, я получаю сообщение об ошибке:

«Ошибка подключения с помощью SSL»

3) Если я использую dll SSL из openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip, я получаю сообщение об ошибке:

«Не удалось загрузить библиотеку SSl»

Теперь я исследовал это, и есть много рекомендаций с мертвыми ссылками на DLL, включая ссылки на переполнение стека. Я подозреваю, что мне нужно найти библиотеки DLL SSL, совместимые с версией INDY, которую я использую.

Мой вопрос: кто-нибудь знает, какие именно SSL-библиотеки совместимы с Delphi 2006 и INDY 10.1.5?


person Mattl    schedule 09.12.2009    source источник


Ответы (5)


У меня была такая же проблема даже после того, как я обновился до INDY 10.2.3, и я пробовал все версии файлов «libeay32.dll» и «ssleay32.dll», которые мог найти ... Как и Мэтт, я всегда получал одну из двух ошибок : «Не удалось загрузить библиотеку SSL» или «Ошибка соединения с SSL» с чем-то вроде «ошибка: 00000006: lib (0): func (0): EVP lib» ...

Я был очень счастлив, когда я изменил TidSSLioHandlerSocketOpenSSL.SSLOptions.Method на sslvSSLv23, и все заработало.

Еще немного исследований, и я быстро понял, что каждый раз, когда у меня появляется ошибка «Не удалось загрузить библиотеку SSL», я использовал неправильную версию файлов DLL, и каждый раз, когда я получал «Ошибка подключения с SSL» с чем-то вроде «error: 00000006: lib (0): func (0): EVP lib «Я использовал неправильное значение SSLOptions.Method.

Дополнительная информация: я использую Delphi 2006, INDY 10.2.3 и использую WinXP Pro

Это причинило мне столько боли, я надеюсь, что этот пост кому-то сэкономит время.

person Dave Clark    schedule 12.03.2010
comment
Очень полезные комментарии, я уверен, что они помогут другим в такой же ситуации. Спасибо. - person Mattl; 15.03.2010
comment
+1 это исправление помогло, хотя я понятия не имел, что означает sslvSSLv23, прежде чем прочитал ehow.com/how_5953595_determine-ssl-protocol-version.html Я использую последнюю версию Indy9 на D5 Windows2000 - person notidaho; 26.10.2011

Вы можете прибегнуть к методам проб и ошибок, загрузив файлы с сайта Fulgan.

Возможно, вы захотите обновить свою копию Indy и использовать самые последние библиотеки DLL OpenSSL.

person Bruce McGee    schedule 09.12.2009
comment
Думаю, вы правы, мне нужно обновить INDY и использовать самые свежие библиотеки DLL OpenSSL. - person Mattl; 11.12.2009
comment
Я думаю, это упростит жизнь. - person Bruce McGee; 11.12.2009
comment
Знаете, что меня бесит по установщикам Fulgain? Некоторые установщики устанавливаются непосредственно в папку установки Windows (например, 0.9.8h) - более поздние версии установщика предоставляют вам выбор. Похоже, черная магия находит рабочие SSL-библиотеки. - person Warren P; 30.05.2012

FWIW, поскольку я потратил много времени на то, чтобы заставить этот https работать, вот результаты моих успешных усилий.

1- Delphi 7

2- indy9.0.19_d7.exe

3- IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv1; или,

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv23; или,

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv3;

Я пробовал indy10.0.76_d7.exe и indy10.1.5_d7.exe под Delphi 7, и я не могу заставить их правильно установить, не говоря уже о том, чтобы HTTPS работал. Я получаю печально известное сообщение «Модуль IdSysWin32 был скомпилирован с другой версией IdException.EIdException». Я искал решение этой проблемы в Интернете и не смог найти ни одного - у многих других было такое же сообщение.

Полезным сайтом для тестирования https является https://msp.f-secure.com/web-test/common/test.html

Вот мой источник:

procedure TForm1.ButtonHTTPSClick(Sender: TObject);
var
  IdHTTP1: TIdHTTP;
  ParamStringList: TStringList;
  s1: String;
  MemoryStream1: TMemoryStream;
  IdSSLIOHandlerSocket1:  TIdSSLIOHandlerSocket;
begin //  ssl works fine must have Indy version indy9.0.19_d7.exe and must use option  sslvSSLv23

  Screen.Cursor := crHourGlass;
  IdHTTP1 := TIdHTTP.Create(nil);
  IdSSLIOHandlerSocket1 := TIdSSLIOHandlerSocket.Create(nil); 
  IdHTTP1.IOHandler := IdSSLIOHandlerSocket1;

//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvTLSv1; // sslvSSLv1 works fine
    IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv3; // sslvSSLv3 works fine
//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv23; // sslvSSLv23 works fine
//  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv2;   sslvSSLv2 does not work
    IdSSLIOHandlerSocket1.SSLOptions.Mode := sslmUnassigned;
    IdSSLIOHandlerSocket1.SSLOptions.VerifyMode := [];
  IdSSLIOHandlerSocket1.SSLOptions.VerifyDepth := 0;

  ParamStringList := TStringList.Create;
  MemoryStream1 := TMemoryStream.Create;
  s1 := IdHTTP1.Post('https://msp.f-secure.com/web-test/common/test.html', ParamStringList);
  MemoryStream1.Write(s1[1], Length(s1));
  MemoryStream1.Position := 0;
  MemoryStream1.SaveToFile('c:\temp\MemoryStream1.txt');
  Memo1.Lines.Clear;
  Memo1.Lines.LoadFromFile('c:\temp\MemoryStream1.txt');
  MemoryStream1.Free;
  ParamStringList.Free;
  IdSSLIOHandlerSocket1.Free;
  IdHTTP1.Free;
  Screen.Cursor := crDefault;
end;
person user1355041    schedule 25.04.2012
comment
Спасибо. У меня все работает нормально. У меня есть DLL-файлы Indy-10.1.5 и Delphi-7, Win-7x64 и SSL из indy_OpenSSL096m.zip с вашей ссылкой msp.f-secure.com/web-test/common/test.html. НО только если SSLOptions.Method = sslvSSLv23 или sslvTLSv1. У меня нет sslvTLSv23 или sslvTLSv3 в раскрывающемся списке, вместо этого у меня есть sslvSSLv2 и sslvSSLv3. И я использую IdHTTP1.get как упрощенную версию или запрос без параметров. - person Yevgeniy Afanasyev; 18.11.2014

Насколько мне известно, более свежие версии Indy работают со стандартными двоичными файлами OpenSSL. Загрузите отсюда. Некоторое время назад мы создали клиентское приложение Delphi FTP, используя Indy с SSL-соединениями, и я уверен, что мы только что отправили текущие библиотеки DLL OpenSSL.

Изменить: только что проверил каталог приложения, и мы использовали библиотеки DLL OpenSSL 0.9.8.2 (3 августа 2006 г.). (Это старое приложение)

Изменить 2: И я только что скопировал более свежие библиотеки DLL 0.9.8k, и они тоже работают нормально.

person shunty    schedule 10.12.2009

Найдите используемую версию Indy. Скопируйте библиотеки Indy dll, например libeay32.dll, libssl32.dll и ssleay32.dll, в папку Windows / System 32. Это устранит ошибку «Не удалось загрузить библиотеку SSL».

person Anudeep    schedule 15.05.2013