Подтвердить что ты не робот

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

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

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

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

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

"Ошибка подключения к SSL"

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

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

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

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

4b9b3361

Ответ 1

У меня была такая же проблема, даже после того, как я обновился до INDY 10.2.3, и я пробовал каждую другую версию файлов "libeay32.dll" и "ssleay32.dll", которые я мог найти... Как и Мэтт, у меня всегда была одна из две ошибки: "Не удалось загрузить библиотеку SSL" или "Ошибка подключения к SSL" с чем-то вроде "error: 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

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

Ответ 2

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

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

Ответ 3

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. Я получаю печально известное сообщение: "Unit 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;

Ответ 4

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

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

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

Ответ 5

Найдите версию Indy, которую вы используете. Скопируйте dll Indy i.e libeay32.dll, libssl32.dll и ssleay32.dll в папку Windows/System 32.It устранит ошибку "Не удалось загрузить библиотеку SSL"