2009-12-09 21 views
16

sto cercando di collegarsi a Google documenti (seguenti eccellente esempio REST di Marco Cantù), ma sto ottenendo i seguenti errori SSL:INDY 10.1.5 - Quali dll SSL funzionano con Delphi 2006?

1) Se uso le DLL SSL da openssl-0.9.8i-i386-win32 .zip ottengo l'errore:

"Impossibile caricare la libreria SSL"

2) Se io uso le DLL SSL da indy_OpenSSL096m.zip ottengo l'errore:

"errore di connessione con SSL"

3) Se uso le DLL SSL da openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip ottengo l'errore:

"Impossibile caricare SSl Library"

Ora ho studiato questo e ci ci sono un sacco di consigli con collegamenti morti alle DLL, inclusi i collegamenti allo stack overflow. Sospetto di dover trovare le DLL SSL compatibili con la versione di INDY che sto usando.

La mia domanda è, qualcuno sa esattamente quali dll SSL sono compatibili con Delphi 2006 & INDY 10.1.5?

risposta

15

Ho avuto lo stesso problema anche dopo l'aggiornamento a INDY 10.2.3 e ho provato tutte le versioni dei file "libeay32.dll" e "ssleay32.dll" che ho trovato ... Come Matt, ne ho sempre preso uno dei due errori: "Impossibile caricare la libreria SSL" o "Errore di connessione con SSL" con qualcosa del tipo "errore: 00000006: lib (0): func (0): EVP lib" ...

Io ero molto felice quando cambio TidSSLioHandlerSocketOpenSSL.SSLOptions.Method a sslvSSLv23 e tutto ha iniziato a funzionare.

Un po 'più di ricerca e ho subito capito ogni volta ho ottenuto l'errore "Impossibile caricare la libreria SSL" Stavo usando la versione sbagliata dei file DLL e in qualsiasi momento ho avuto il "Errore di connessione con SSL" con qualcosa di simile "errore : 00000006: lib (0): func (0): EVP lib "Stavo usando il valore SSLOptions.Method errato.

Altro Info: sto usando Delphi 2006, INDY 10.2.3 e sto runnin su WinXP Pro

Questo mi ha causato tanto dolore, spero che questo post verrà salvare qualcuno un po 'di tempo.

+0

Commenti molto utili, sono sicuro che aiuteranno gli altri nella stessa situazione. Grazie. – Mattl

+0

+1 Grazie, mi ha aiutato! – johnny

+0

+1 questa soluzione ha fatto il trucco anche se non avevo idea di cosa significasse sslvSSLv23 prima di leggere http://www.ehow.com/how_5953595_determine-ssl-protocol-version.html Sto usando l'ultima Indy9 su D5 Windows2000 – notidaho

3

È possibile ricorrere ad alcune prove ed errori utilizzando i download dallo Fulgan site.

Si potrebbe voler aggiornare la propria copia di Indy e utilizzare le DLL OpenSSL più recenti.

+1

Penso che tu abbia ragione, ho bisogno di aggiornare INDY e utilizzare le DLL OpenSSL più recenti. – Mattl

+0

Penso che renderà le cose più semplici. –

+1

Sai cosa mi fa impazzire con gli installatori Fulgain? Alcuni installer si installano direttamente nella cartella di installazione di Windows (ad esempio 0.9.8h) - le versioni successive dell'installer offrono una scelta. Sembra che la magia nera trovi le dll SSL funzionanti. –

2

Per quanto ne so, le versioni più recenti di Indy funzionano con binari OpenSSL standard. Download from here. Abbiamo prodotto un'applicazione client FTP Delphi qualche tempo fa usando Indy con connessioni SSL e sono sicuro che abbiamo appena spedito le DLL OpenSSL correnti.

Modifica: basta controllare la directory dell'app e le DLL che abbiamo utilizzato sono OpenSSL 0.9.8.2 (3-Aug-06). (È una vecchia app)

Edit 2: E ho appena copiato le più recenti DLL 0.9.8k e funzionano anche bene.

3

FWIW, poiché ho trascorso molto tempo a far funzionare questa https, ecco i risultati dei miei sforzi riusciti.

1- Delphi 7

2- indy9.0.19_d7.exe

3- IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv1; oppure,

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv23; oppure,

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv3;

ho cercato indy10.0.76_d7.exe e indy10.1.5_d7.exe sotto Delphi 7 e non posso farli installare correttamente, per non parlare di ottenere HTTPS al lavoro. Ricevo il famigerato messaggio "L'unità IdSysWin32 è stata compilata con una versione diversa di IdException.EIdException." Ho cercato una soluzione a quel problema sul web e non sono riuscito a trovarne uno - molti altri avevano lo stesso messaggio.

Un sito utile per i test https è https://msp.f-secure.com/web-test/common/test.html

Qui è la mia fonte:

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

Grazie. Funziona bene per me. Ho le dll Indy-10.1.5 e Delphi-7, Win-7x64 e SSL da indy_OpenSSL096m.zip con il tuo link https://msp.f-secure.com/web-test/common/test.html. MA solo se SSLOptions.Method = sslvSSLv23 o sslvTLSv1. Non ho "sslvTLSv23" o "sslvTLSv3" nell'elenco a discesa, ho invece "sslvSSLv2" e "sslvSSLv3". E sto usando "IdHTTP1.get" come versione semplificata o richiesta senza parametri. –

1

Individuare la versione Indy si è using.Copy le DLL Indy cioè libeay32.dll, libssl32.dll e ssleay32.dll nella cartella Windows/System 32.Verrà risolto l'errore "Impossibile caricare la libreria SSL"