2009-12-09 23 views
16

Estoy intentando conectar con los documentos de Google (siguientes excelente ejemplo RESTO de Marco Cantú) pero yo estoy recibiendo los errores siguientes: SSLINDY 10.1.5 - ¿Qué DLL dlls funcionan con Delphi 2006?

1) Si utilizo los archivos DLL SSL de OpenSSL-0.9.8i-i386-win32 .zip me sale el error:

"no se pudo cargar la biblioteca SSL"

2) Si utilizo los archivos DLL SSL de indy_OpenSSL096m.zip me sale el error:

"error al conectar con SSL"

3) Si utilizo los archivos DLL SSL de openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip me sale el error:

"No se pudo cargar la biblioteca SSL"

Ahora he investigado esto y hay hay muchas recomendaciones con enlaces muertos a dlls, incluidos enlaces en desbordamiento de pila. Sospecho que necesito encontrar los DLL dlls que sean compatibles con la versión de INDY que estoy usando.

Mi pregunta es, ¿alguien sabe exactamente qué dlls SSL son compatibles con Delphi 2006 & INDY 10.1.5?

Respuesta

15

Tuve el mismo problema incluso después de actualizar a INDY 10.2.3 e intenté cada versión diferente de los archivos "libeay32.dll" y "ssleay32.dll" que pude encontrar ... Como Matt, siempre tengo uno de los dos errores: "No se pudo cargar la biblioteca SSL" o "Error al conectarse con SSL" con algo así como "error: 00000006: lib (0): func (0): EVP lib" ...

Estaba muy feliz cuando cambio el TidSSLioHandlerSocketOpenSSL.SSLOptions.Method a sslvSSLv23 y todo comenzó a funcionar.

Investigué un poco más y entendí rápidamente cada vez que recibí el error "No se pudo cargar la biblioteca SSL". Estaba usando la versión incorrecta de los archivos DLL y cada vez que recibía el mensaje "Error al conectar con SSL". : 00000006: lib (0): func (0): EVP lib "Estaba usando el valor incorrecto SSLOptions.Method.

Otra Info: estoy usando Delphi 2006, Indy 10.2.3 y estoy corriendo en WinXP Pro

Esto me causó tanto dolor, espero que este post va a salvar a alguien algún tiempo.

+0

Comentarios muy útiles, estoy seguro de que esto ayudará a otros en la misma situación. Gracias. – Mattl

+0

+1 ¡Gracias, me ayudó! – johnny

+0

+1 esta solución hizo el truco aunque no tenía idea de lo que significaba sslvSSLv23 antes de leer http://www.ehow.com/how_5953595_determine-ssl-protocol-version.html Estoy usando la última Indy9 en D5 Windows2000 – notidaho

3

Podría recurrir a un poco de prueba y error utilizando descargas del Fulgan site.

Es posible que desee pensar en actualizar su copia de Indy y utilizar las últimas DLL de OpenSSL.

+1

Creo que tiene razón, necesito actualizar INDY y usar las DLL más recientes de OpenSSL. – Mattl

+0

Creo que hará las cosas más simples. –

+1

¿Sabes qué me vuelve loco en los instaladores de Fulgain? Algunos de los instaladores se instalan directamente en la carpeta de instalación de Windows (0.9.8h, por ejemplo); las versiones posteriores del instalador le dan una opción. Parece que la magia negra encuentra dlls SSL de trabajo. –

2

Que yo sepa, las versiones más recientes de Indy funcionan con los binarios estándar de OpenSSL. Download from here. Hace un tiempo, produjimos una aplicación para clientes Delphi FTP usando Indy con conexiones SSL y estoy seguro de que acabamos de enviar los dlls actuales de OpenSSL.

Editar: Acabo de comprobar el directorio de la aplicación y los archivos DLL que utilizamos son OpenSSL 0.9.8.2 (3-Aug-06). (Es una aplicación antigua)

Edición 2: Y acabo de copiar los más recientes 0.9.8k dlls y también funcionan bien.

3

FWIW, ya que he pasado mucho tiempo trabajando en esto de https, aquí están los resultados de mis esfuerzos exitosos.

1- Delphi 7

2- indy9.0.19_d7.exe

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

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv23; o,

IdSSLIOHandlerSocket1.SSLOptions.Method: = sslvTLSv3;

Intenté indy10.0.76_d7.exe e indy10.1.5_d7.exe en Delphi 7 y no puedo conseguir que se instalen correctamente, y mucho menos que HTTPS funcione. Recibo el mensaje infame "Unit IdSysWin32 se compiló con una versión diferente de IdException.EIdException". Busqué una solución a ese problema en la web y no pude encontrar uno, muchos otros tenían el mismo mensaje.

Un sitio útil para https prueba es https://msp.f-secure.com/web-test/common/test.html

Aquí está mi fuente:

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

Gracias. Está funcionando bien para mí. Tengo Indy-10.1.5 y Delphi-7, Win-7x64 y SSL dlls de indy_OpenSSL096m.zip con su enlace https://msp.f-secure.com/web-test/common/test.html. PERO solo si SSLOptions.Method = sslvSSLv23 o sslvTLSv1. No tengo "sslvTLSv23" o "sslvTLSv3" en la lista desplegable, en su lugar tengo "sslvSSLv2" y "sslvSSLv3". Y estoy usando "IdHTTP1.get" como versión simplificada o solicitud sin parámetros. –

1

Encuentra la versión Indy está using.Copy las DLL Indy es decir libeay32.dll, libssl32.dll y ssleay32.dll en la carpeta Windows/System 32. Resolverá el error "No se pudo cargar la biblioteca SSL"

Cuestiones relacionadas