Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Indy 10 y sslvTLSv1_2 (https://www.clubdelphi.com/foros/showthread.php?t=96482)

jars 09-11-2023 14:14:44

Indy 10 y sslvTLSv1_2
 
Hola gente.
Alguien me puede decir que version de Indy 10 tiene ssLVersion sslvTLSv1_2 para Delphi 7
Me sale este error :

Error connecting with SSL.
error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

Gracias.

Casimiro Notevi 09-11-2023 15:05:50

Sí, la tiene. Ese error es otra cosa. Más bien parece que espera ssl3 ¿no?

jars 09-11-2023 17:57:39

Gracias Casimiro.
En donde debería esperar ssl3

Este es el codigo que estoy usando luego de actualizar Indy 10 version 10.6.2.0

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  IdHTTP: TIdHTTP;
  IdIOHandler: TIdSSLIOHandlerSocketOpenSSL;
  SoapRequest, SoapResponse: TStringStream;
  x, ServiceURL, SoapAction: string;
begin
  ServiceURL := 'https://mail2.tecnovoz.com.ar:3002/iows';
  SoapAction := 'textgpt';

  SoapRequest := TStringStream.Create(LoadSoapEnvelopeFromFile('D:\newsoap\SoapEnvelope.xml'));
  SoapResponse := TStringStream.Create('');

  IdHTTP := TIdHTTP.Create(nil);
  try
    IdIOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
    try
      IdIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
      IdHTTP.Request.ContentType := 'text/xml; charset=utf-8';
      IdHTTP.Request.Accept := 'text/xml';

      try
        IdHTTP.Post(ServiceURL, SoapRequest, SoapResponse);
        Memo1.Lines.Add('Resultado del servicio: ' + SoapResponse.DataString);
      except
        on E: Exception do
         Memo1.Lines.Add(E.Message);
      end;
    finally
      IdIOHandler.Free;
    end;
  finally
    IdHTTP.Free;
    SoapRequest.Free;
    SoapResponse.Free;
  end;
end;

Casimiro Notevi 09-11-2023 18:15:34

Quiero decir que el mensaje de error es ssl3_read_bytes:tlsv1 alert protocol version, y que a lo mejor, no lo sé, pero puede ser que ese servidor esté funcionando con ssl3, y de ahí el error.

juanelo 09-11-2023 20:47:07

Adicional a lo dicho, asegurate de tener las DLL's de openSSL actualizadas:
24-Oct-2023OpenSSL 3.1.4 is now available, including bug and security fixes (tomado de sitio oficial)

jars 09-11-2023 21:40:33

Gracias Juanelo.
Vos tenes las dll´s porque con Delphi 7 no puedo hacer mucho.

Casimiro Notevi 10-11-2023 10:08:16

Cita:

Empezado por juanelo (Mensaje 553231)
Adicional a lo dicho, asegurate de tener las DLL's de openSSL actualizadas:
24-Oct-2023OpenSSL 3.1.4 is now available, including bug and security fixes (tomado de sitio oficial)

Eso es cierto, hace falta también tenerlas actualizadas.

Casimiro Notevi 10-11-2023 10:09:21

Cita:

Empezado por jars (Mensaje 553232)
Gracias Juanelo.
Vos tenes las dll´s porque con Delphi 7 no puedo hacer mucho.

Te ha pasado el enlace a la dll, haz click encima de la fecha.

jars 10-11-2023 12:58:04

Gracias por pasarme los fuentes pero te preguntaba si tenias las dll´s porque con Delphi7 no veo como generarlas.

Casimiro Notevi 10-11-2023 13:24:33

1 Archivos Adjunto(s)
Creo que es esto, aquí va:

jars 10-11-2023 15:39:41

Gracias Casimiro.
Con las dll´s anteriores el error era:

Error connecting with SSL.
error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version


Al poner las que me pasaste el error es:

could not load ssl library

Ya no se que hacer.

Casimiro Notevi 10-11-2023 19:45:09

¿Las has puesto en el mismo directorio del programa?

jars 10-11-2023 20:17:19

si, estan en la misma carpeta del ejecutable

cervexa 29-02-2024 12:06:31

Cita:

Empezado por jars (Mensaje 553250)
si, estan en la misma carpeta del ejecutable

Si has conseguido solucionarlo.
Estoy con tu mismo problema. Tengo Delphi XE.
Podrías facilitarme donde puedo encontrar las Indy 10.6 y las dll adecuadas para sslvTLSv1_2
O explicar como lo has solucionado. Gracias

Casimiro Notevi 29-02-2024 14:52:16

Cita:

Empezado por cervexa (Mensaje 554650)
Si has conseguido solucionarlo.
Estoy con tu mismo problema. Tengo Delphi XE.
Podrías facilitarme donde puedo encontrar las Indy 10.6 y las dll adecuadas para sslvTLSv1_2
O explicar como lo has solucionado. Gracias

¿No te sirven las que están enlazadas en unos mensajes más arriba?

cervexa 01-03-2024 07:30:27

El problema es que las he copiado al directorio del exe, a windows, a windows/system32 y me dice que no consigue cargarlas.
No sé que hacer.
Por cierto, esas dll permiten trabajar con tls 1.2?
Código:

IdIOHandler.SSLOptions.SSLVersions := [sslvTLSv1_2];
Por otro lado la versión de las Indy que tengo (Delphi XE) en el objecto SSLOptions.SSLVersions no me ofrece ese valor. Por esto creo que tengo que actualizar las indy a la versión 10.6. Solo me ofrece el valor sslvTLSv1
Gracias por contestar

pablog2k 01-03-2024 09:09:49

te va a tocar actualizar las librerías INDY , nosotros pasamos por una situación similar con Delphi XE

Casimiro Notevi 01-03-2024 09:59:20

Cita:

Empezado por cervexa (Mensaje 554672)
...

¿Qué versión de indy tienes?

cervexa 02-03-2024 09:50:34

Cita:

Empezado por Casimiro Notevi (Mensaje 554679)
¿Qué versión de indy tienes?

No tengo muy claro como mirarlo, pero en C:\Program Files (x86)\Embarcadero\RAD Studio\8.0\source\Indy10\System\IdVers.inc

tengo esto:
Código:

  gsIdVersion = '10.5.7'; {do not localize}
  gsIdProductName = 'Indy';  {do not localize}

Si pongo un IdSSLIOHandlerSocketOpenSSL en el formulario y voy a las opciones de SSL en el parametro de SSLVersions me ofrece solamente: sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1. Mi impresión es que debería ofrecerme tambien sslvTLSv11 y sslvTLSv12.

Teneis que perdonar mi ignorancia pero programé en Delphi hace más de 10 años y estoy muy fuera de onda. Tengo que hacer unos arreglos en el envio de correos con autentificacion TLS en un servidor smtp y voy muy perdido.
Gracias por la ayuda.

cervexa 02-03-2024 09:52:36

Cita:

Empezado por pablog2k (Mensaje 554674)
te va a tocar actualizar las librerías INDY , nosotros pasamos por una situación similar con Delphi XE

A que versión las actualizasteis y, sobre todo, donde las puedo descargar, así como las DLL de Openssh correspondientes?
Gracias

Casimiro Notevi 02-03-2024 11:15:42

Con esa versión tiene que funcionar.
Cita:

Empezado por cervexa
Si pongo un IdSSLIOHandlerSocketOpenSSL en el formulario y voy a las opciones de SSL en el parametro de SSLVersions me ofrece solamente: sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1. Mi impresión es que debería ofrecerme tambien sslvTLSv11 y sslvTLSv12.

Puedes probar con la sslvTLSv1, de todas formas me parece raro que hoy en día estén usando una versión tan antigua.

cervexa 02-03-2024 13:36:43

Gracias por responder.
No consigo que funcione, me da "Cold not load SSL library" al intentar conectar.
He copiado las DLL que posteaste arriba en el directorio del ejecutable, en c:\windows, en c:\windows\system, en c:\windows\system32... y no consige cargarlas.

El código que utilizo, en el que he ido cambiando las opciones en todas las combinaciones posibles, es este
Código:

var
  IdSSLIOHandlerSocket: TIdSSLIOHandlerSocketOpenSSL;
  IdSMTP: TIdSMTP;
  IdMessage: TIdMessage;
  IdText: TIdText;
  sAnexo: string;
begin
  IdSSLIOHandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(Self);
  IdSMTP := TIdSMTP.Create(Self);
  IdMessage := TIdMessage.Create(Self);

  try
    with IdSSLIOHandlerSocket do begin
      SSLOptions.Method := sslvTLSv1;
      SSLOptions.Mode := sslmClient;
      SSLOptions.SSLVersions := [ sslvTLSv1 ];
    end;

    with IdSMTP do begin
      IOHandler := IdSSLIOHandlerSocket;
      UseTLS := utUseImplicitTLS;
      AuthType := satDefault;
      Port := 465;
      Host := 'smtp.micuenta.com';
      Username := 'rrhh@micuenta.com';
      Password := '7f6a8907sdfas';
    end;

    with IdMessage do begin
      From.Address := 'rrhh@micuenta.com';
      From.Name := 'Nome do Remetente';
      ReplyTo.EMailAddresses := IdMessage.From.Address;
      Recipients.Add.Text := unacuaneta@gmail.com';
      Recipients.Add.Text := 'otra@cuenta.com';
      Recipients.Add.Text := 'otra@distinta.com';
      Subject := 'Prueba de e-mail';
      Encoding := meMIME;
    end;

    IdText := TIdText.Create(IdMessage.MessageParts);
    with IdText do begin
      Body.Add('Corpo do e-mail');
      ContentType := 'text/plain; charset=iso-8859-1';
    end;

// ====================================================
// AQUI DA EL ERROR DE CONEXION--> Could not load SSL library
// ====================================================
    try
      IdSMTP.Connect;
      IdSMTP.Authenticate;
    except
      on E:Exception do
      begin
        MessageDlg('Error en la conexión o autentificación: ' +
          E.Message, mtWarning, [mbOK], 0);
        Exit;
      end;
    end;

    try
      IdSMTP.Send(IdMessage);
      MessageDlg('Mensaje enviado', mtInformation, [mbOK], 0);
    except
      On E:Exception do
      begin
        MessageDlg('Error al enviar el mensaje: ' +
          E.Message, mtWarning, [mbOK], 0);
      end;
    end;
  finally
    IdSMTP.Disconnect;
    UnLoadOpenSSLLibrary;
    FreeAndNil(IdMessage);
    FreeAndNil(IdSSLIOHandlerSocket);
    FreeAndNil(IdSMTP);
  end;
end;

Creo que pasan estas cosas:
-- No tengo la última version de las Indy: 10.6, que son las que ofrecen TLS1.2 aunque creo que el error es antes de llegar a utilizar el TLS, está en la carga de las DLL.
-- Mis indy y las DLL no deben de ser compatibles
Por esto estoy tratando de conseguir las Indy 10.6 y la última versión de openSSH ya compilada, por que no sabría hacerlo con los fuentes

No sé si me puedes ayudar en esto.
Un saludo

Casimiro Notevi 02-03-2024 15:53:12

Cita:

Empezado por cervexa (Mensaje 554698)
Gracias por responder.
No consigo que funcione, me da "Cold not load SSL library" al intentar conectar.
He copiado las DLL que posteaste arriba en el directorio del ejecutable, en c:\windows, en c:\windows\system, en c:\windows\system32... y no consige cargarlas.

Si es 32 bits entonces lo mismo tendrás que ponerlas en windows\wow64

Cita:

Empezado por cervexa (Mensaje 554698)
El código que utilizo, en el que he ido cambiando las opciones en todas las combinaciones posibles, es este

Creo que pasan estas cosas:
-- No tengo la última version de las Indy: 10.6, que son las que ofrecen TLS1.2 aunque creo que el error es antes de llegar a utilizar el TLS, está en la carga de las DLL.
-- Mis indy y las DLL no deben de ser compatibles
Por esto estoy tratando de conseguir las Indy 10.6 y la última versión de openSSH ya compilada, por que no sabría hacerlo con los fuentes
No sé si me puedes ayudar en esto.
Un saludo

TLS1.2 es más antigua, no tiene sentido que busques una indy más moderna salvo que necesites una TLS más nueva.

Casimiro Notevi 02-03-2024 15:54:41

¿Y a qué sitio quieres conectar/enviar email?

cervexa 02-03-2024 19:18:50

Cita:

Empezado por Casimiro Notevi (Mensaje 554700)
¿Y a qué sitio quieres conectar/enviar email?

A través un servidor que tengo contratado junto con el dominio.
Desde las aplicaciones de correo funciona correctamente

cervexa 02-03-2024 19:35:45

Cita:

Empezado por Casimiro Notevi (Mensaje 554699)
Si es 32 bits entonces lo mismo tendrás que ponerlas en windows\wow64

Copié las DLL a SySWOW64 y sigue sin cargarlas.

Abandono. Voy a rehacer la aplicación con Angular. Si los tres días que he perdido con esto lo hubiese dedicado a hacer la aplicación ya tendría al problema solucionado. Además, así puedo ponerla en linea y con acceso desde cualquier sitio.

Gracias por el tiempo que me habeis dedicado.

Tengo buenos de recuerdos de Delphi pero ...

Un saludo.

Casimiro Notevi 03-03-2024 14:53:30

Cita:

Empezado por cervexa (Mensaje 554701)
A través un servidor que tengo contratado junto con el dominio.
Desde las aplicaciones de correo funciona correctamente

Te pregunté por si alguno tenemos cuenta en ese sitio y probar.

cervexa 04-03-2024 07:25:19

Cita:

Empezado por Casimiro Notevi (Mensaje 554710)
Te pregunté por si alguno tenemos cuenta en ese sitio y probar.

Es un dominio mio.

De todas formas, gracías por toda la ayuda que sigues prestando desde este foro. Siempre dispuesto a ayudar.

Un saludo.

pablog2k 05-03-2024 08:10:04

Cita:

Empezado por cervexa (Mensaje 554691)
A que versión las actualizasteis y, sobre todo, donde las puedo descargar, así como las DLL de Openssh correspondientes?
Gracias

Hola, perdona por tardar ,las descargué de aquí:
https://github.com/IndySockets/Indy
las que pone 150 son las que corresponden a Delphi XE
Aun así es un proceso bastante costoso, ya que tienes que eliminar de tu sistema todo rastro de las indy antiguas y luego instalar las indy nuevas.

Si has conseguido salir del paso con un proyecto en angular, mejor

cervexa 07-03-2024 08:13:04

Gracias, por tu respuesta. Si, estoy acabando la aplicación nueva,
Un saludo

sgomez 11-03-2024 16:29:57

Si alguien necesita actualizar la librería indy a la última versión, puede consultar las instrucciones en el siguiente link:

github.com/IndySockets/Indy/wiki/Updating-Indy

Adicionalmente, el paquete sgcIndy (que es básicamente las librerías indy con soporte para las últimas librerías openSSL y TLS 1.3) dispone de un instalador que automáticamente desinstala la versión que viene por defecto en Rad Studio e instala la nueva librería. El paquete se proporciona con las librerías ya compiladas, sin código fuente. Más información en:

esegece.com/products/sgcindy

Soy el desarrollador del proyecto, cualquier cosa me pueden contactar.

Saludos,
Sergio

Casimiro Notevi 11-03-2024 18:12:43

Has hecho un gran trabajo.
¿Por qué sólo un ejecutable? ¿el código fuente ha sido modificado? ¿qué licencias has usado, BSD o MPL?

sgomez 12-03-2024 09:19:44

sgcIndy incluye algunas funcionalidades que no están incluidas en las librerías Indy. Por ejemplo, Indy sólo soporta oficialmente las librerías openSSL 1.0.2 que no se actualizan desde hace años. Los componentes que he desarrollado comercialmente, algunos están basados en Indy, por ejemplo los componentes WebSockets, algunos clientes me expresaron hace años su preocupación acerca de la falta de soporte para las últimas versiones de cifrado en Indy, esencialmente TLS 1.3, e implementé inicialmente el soporte sólo para estos componentes comerciales. Posteriormente, viendo que funcionaban bien, solicitaron si sería posible que los componentes indy como Ftp, Smtp... también podrían beneficiarse de estas mejoras, entonces fue cuando surgió la librería sgcIndy, que incluye soporte para openSSL 1.1.1 y 3.0-3.2, ALPN... Hace un año o dos, hice público el paquete sgcIndy para que cualquier usuario pudiera utilizarlo. La licencia es la menos restrictiva, BSD, básicamente Indy sólo requiere incluir en el Acerca de tu proyecto o documentación que incorpora la librería indy.


La franja horaria es GMT +2. Ahora son las 04:30:48.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi