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?
Ответы
Ответ 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"