INDY 10.1.5-¿Qué archivos SSL funcionan con Delphi 2006?
openssl delphi-2006 (5)
Estoy tratando de conectarme a los documentos de Google (siguiendo el excelente ejemplo REST de Marco Cantu) pero obtengo los siguientes errores de SSL:
1) Si uso los dlls SSL de openssl-0.9.8i-i386-win32.zip me sale el error:
"No se pudo cargar la biblioteca SSL"
2) Si uso los dlls SSL de indy_OpenSSL096m.zip me sale el error:
"Error al conectar con SSL"
3) Si uso los dlls SSL de openssl-0.9.8h-i386-win32-Indy-IntraWebEdition.zip, aparece el error:
"No se pudo cargar la biblioteca SSl"
Ahora he investigado esto y hay muchas recomendaciones con enlaces muertos a archivos DLL, incluidos los enlaces en el desbordamiento de pila. Sospecho que necesito encontrar las DLL de SSL que sean compatibles con la versión de INDY que estoy usando.
Mi pregunta es, ¿alguien sabe exactamente qué archivos SSL son compatibles con Delphi 2006 e INDY 10.1.5?
Encuentre la versión de Indy que está utilizando. Copie las dlls de 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"
FWIW, ya que he pasado mucho tiempo haciendo funcionar este 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 hacer que se instalen correctamente, y mucho menos hacer que el HTTPS funcione. Recibo el mensaje infame "La unidad IdSysWin32 se compiló con una versión diferente de IdException.EIdException". Busqué una solución para ese problema en la web y no pude encontrar una: muchos otros tenían el mismo mensaje.
Un sitio útil para probar https 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;
Por lo que yo sé, las versiones más recientes de Indy funcionan con los binarios estándar de OpenSSL. Descargar desde aquí . Hace un tiempo produjimos una aplicación de cliente FTP de Delphi usando Indy con conexiones SSL y estoy seguro de que acabamos de enviar las dlls de OpenSSL actuales.
Edición: Acabo de verificar el directorio de la aplicación y las DLL que utilizamos son OpenSSL 0.9.8.2 (3-Ago-06). (Es una aplicación antigua)
Edición 2: Y acabo de copiar las más recientes 0.9.8k dlls y también funcionan bien.
Puede recurrir a algunas pruebas y errores utilizando descargas del sitio de Fulgan .
Es posible que desee pensar en actualizar su copia de Indy y usar las DLL OpenSSL más recientes.
Tuve el mismo problema incluso después de actualizar a INDY 10.2.3 y probé cada versión diferente de los archivos "libeay32.dll" y "ssleay32.dll" que pude encontrar ... Al igual que Matt, siempre recibí uno de los dos errores. : "No se pudo cargar la biblioteca SSL" o el "Error de conexión con SSL" con algo como "error: 00000006: lib (0): func (0): EVP lib" ...
Me sentí muy feliz cuando cambio TidSSLioHandlerSocketOpenSSL.SSLOptions.Method a sslvSSLv23 y todo comenzó a funcionar.
Un poco más de investigación y comprendí rápidamente cada vez que recibía 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 "Error de conexión con SSL" con algo como "error: 00000006: lib (0): func (0): EVP lib "Estaba usando el valor de SSLOptions.Method incorrecto.
Otra información: Estoy usando Delphi 2006, INDY 10.2.3 y estoy corriendo en WinXP Pro
Esto me causó mucho dolor, espero que esta publicación le ahorre a alguien algún tiempo.