2009-12-09 2 views
16

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

1) Если я использую SSL библиотеки DLL из OpenSSL-0.9.8i-i386-win32 .zip я получаю ошибку:

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

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

"Ошибка соединения с SSL"

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

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

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

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

ответ

15

У меня была такая же проблема, даже после того, как я обновился до 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

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

+0

Очень полезные комментарии, я уверен, что они помогут другим в той же ситуации. Благодарю. – Mattl

+0

+1 Спасибо, помог мне! – johnny

+0

+1 это исправить сделал трюк, хотя я понятия не имел, что означало sslvSSLv23 до того, как я прочитал http://www.ehow.com/how_5953595_determine-ssl-protocol-version.html Я использую последнюю версию Indy9 на D5 Windows2000 – notidaho

3

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

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

+1

Я думаю, что вы правы, мне нужно обновить INDY и использовать самые последние DLL-файлы OpenSSL. – Mattl

+0

Я думаю, что это упростит ситуацию. –

+1

Вы знаете, что сводит меня с ума от инсталляторов Fulgain? Некоторые из инсталляторов устанавливаются непосредственно в папку установки Windows (например, 0.9.8h) - более поздние версии установщика дают вам выбор. Похоже, черная магия находит рабочие SSL-файлы. –

2

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

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

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

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; 
+0

Спасибо. Он отлично работает для меня. У меня есть indy-10.1.5 и Delphi-7, Win-7x64 и SSL-файлы из indy_OpenSSL096m.zip с вашей ссылкой https://msp.f-secure.com/web-test/common/test.html. Но только если SSLOptions.Method = sslvSSLv23 или sslvTLSv1. У меня нет «sslvTLSv23» или «sslvTLSv3» в раскрывающемся списке, вместо этого у меня есть «sslvSSLv2» и «sslvSSLv3». И я использую «IdHTTP1.get» как упрощенную версию или запрос без параметров. –

1

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