Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy und OpenSSL 1.1.1 für Mail-Versand (https://www.delphipraxis.net/212353-indy-und-openssl-1-1-1-fuer-mail-versand.html)

DieDolly 29. Jan 2023 16:11


Indy und OpenSSL 1.1.1 für Mail-Versand
 
Frage vorweg: funktioniert ein Mail-Versand vielleicht mit Delphi-eigenen Mitteln? Http-Requests habe ich schon vor langer Zeit von Indy auf TRESTHTTP umgestellt.

--------------------------

Die letzte OpenSSL-DLLs die ich benutzt habe war Version 1.0.2u, danach gab es ja irgendeine Änderung bzw man sollte die nicht mehr benutzen und nur noch die neuen, aber Indy war damals wohl noch nicht bereit und es gab nur Workarounds, um die neuen DLLs zu benutzen.

Hier gibt es angepasste Delphi-Dateien für OpenSSL 1.1.1
https://github.com/mezen/Indy/tree/N...tocols/OpenSSL

Und hier verschiedenste OpenSSL-Dateien
http://wiki.overbyte.eu/wiki/index.p..._components.29

Die DLLs heißen jetzt auch anders.

Was genau brauche ich, damit ich die neuen DLLs benutzen kann? Falls es nur diese Indy-Dateien sind, wohin kommen die? Die 1.1.1-Dlls oder die 3.0.7-DLLs?

In den Indy-Dateien die bei Delphi dabei sind sehe ich in IdSSLOpenSSLHeaders.pas, dass die DLL-Namen noch die alten sind. Also ssleay32.dll, libssl32.dll und libeay32.dll.

philipp.hofmann 29. Jan 2023 16:40

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Zitat:

Frage vorweg: funktioniert ein Mail-Versand vielleicht mit Delphi-eigenen Mitteln? Http-Requests habe ich schon vor langer Zeit von Indy auf TRESTHTTP umgestellt.
Meines Wissens nein, eine der Funktionen, wo einem nicht klar ist, warum dies nicht längst umgestellt worden ist. Dies müsste in der Wartung zwingend ganz oben auf der Prio-Liste stehen.

DieDolly 29. Jan 2023 16:49

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Ich habe gerade mal bei Github in die neueste IdSSLOpenSSLHeaders.pas von for 5 Monaten, ziemlich weit unten zu finden
Delphi-Quellcode:
 {$IFDEF UNIX}
const
  {This is a workaround for some Linux distributions and a few other things
  where the symbolic link libbsl.so and libcrypto.so do not exist}
  SSL_DLL_name        = 'libssl'; {Do not localize}
  SSLCLIB_DLL_name    = 'libcrypto'; {Do not localize}
  SSLDLLVers : array [0..10] of string = (
    '.10',
    '.1.0.2','.1.0.1',
    // TODO: IFDEF the following for OSX only?
    '.44',             // MacOS LibreSSL forked from which OpenSSL version? Sometimes found ...
    '.43',             // MacOS LibreSSL forked from which OpenSSL version? Sometimes found ...
                        // TODO: Add '.41' as well?
    '.35',             // MacOS LibreSSL forked from OpenSSL version 1.0.1, almost always found
    //
    '.1.0.0','.0.9.9','.0.9.8','.0.9.7','.0.9.6'
  );
  SSLDLLVersChar : array [0..26] of string = ('','a','b','c','d','e','f','g','h','i',
                                                 'j','k','l','m','n','o','p','q','r',
                                                 's','t','u','v','w','x','y','z');
  {$ENDIF}
  {$IFDEF WINDOWS}
const
  SSL_DLL_name        = 'ssleay32.dll'; {Do not localize}
  //The following is a workaround for an alternative name for
  //one of the OpenSSL .DLL's. If you compile the .DLL's using
  //mingw32, the SSL .dll might be named 'libssl32.dll' instead of
  //ssleay32.dll like you would expect.
  SSL_DLL_name_alt    = 'libssl32.dll'; {Do not localize}
  SSLCLIB_DLL_name    = 'libeay32.dll'; {Do not localize}
  {$ENDIF}
Heißt das, für Windows gelten noch immer die alten Namen und nur für Unix die neuen? Wie soll man Indy denn dann mit OpenSSL-DLLs 1.1.1 und 3.0.X verwenden?

DieDolly 29. Jan 2023 18:58

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Ich habe das Problem jetzt gelöst, indem ich die Internet Component Suite ICS installiert habe. Die Demo habe ich schon bis auf das absolute Minimum reduziert und der Mail-Versand funktioniert noch immer.
Daraus werde ich mir etwas basteln, was ich auch in anderen Projekten einfach verwenden kann. Indy dauert mir da zu lange und fliegt jetzt komplett raus.

Thomasl 30. Jan 2023 07:55

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Zitat:

Zitat von DieDolly (Beitrag 1518026)
Hier gibt es angepasste Delphi-Dateien für OpenSSL 1.1.1
https://github.com/mezen/Indy/tree/N...tocols/OpenSSL

Und hier verschiedenste OpenSSL-Dateien
http://wiki.overbyte.eu/wiki/index.p..._components.29

ich nehme die OpenSSL 3.0.7 (Indy komplett ausgetauscht)
hier von 1.1.1 auf 3er umbenannt
IdOpenSSLConsts.pas

Und zusätzlich diese für Google
IdSASLXOAUTH.pas

E-Mails gehen über TLS1.3 raus. Sieht man im SMTP Header

DieDolly 30. Jan 2023 08:28

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Indy oder ICS? Weil ich bin gestern komplett weg von Indy. Bei ICS muss man nix selber austauschen, funktioniert alles sofort.

Thomasl 30. Jan 2023 09:42

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Indy
per Batch (im Indy) die alte komplett runter.
(Indy macht ja nicht nur E-Mail, habe bei mir alles auf den neuen SSL Handler umgebaut)

DieDolly 30. Jan 2023 09:55

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Ich habe damals TIdHTTP benutzt. Aber das habe ich auch alles verworfen und durch THTTPREST ersetzt.

Zitat:

(Indy macht ja nicht nur E-Mail, habe bei mir alles auf den neuen SSL Handler umgebaut)
Genau das möchte ich nicht. Sowas sollte von den Komponenten-Entwicklern zeitnah und eigenständig umgesetzt werden. Indy hängt da irgendwie total hinterher.
Der Benutzer selber sollte da nicht selber rumbasteln müssen.

Dann lieber ein unverbasteltes Internet Component Suite und wenn es Updates gibt, kann ich die sorgenfrei installieren.

philipp.hofmann 30. Jan 2023 11:03

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Naja, hängt da Indy hinterher oder sollte EMBT Indy für die Anpassungen bezahlen? Da muss EMBT hinterher sein, dass ihre Umgebung diese Funktionalität zur Verfügung stellt.

Thomas Horstmann 30. Jan 2023 17:39

AW: Indy und OpenSSL 1.1.1 für Mail-Versand
 
Hallo,
die Anpassungen von "Mezen" funktionieren ja sehr gut und wenn ich die Blog-Einträge richtig interpretiere, muss der Code nur noch geprüft werden, was sich aber leider hinzieht. Zumindest ist der "Pull request" vorhanden.

Hier mein Vorgehen, damit ich Indy/Metzen mit OpenSSL 3 benutzen kann (ohne die vorhandene Installation anzupassen).

1. Open SSL von "Mezen" heruterladen: https://github.com/mezen/Indy/tree/NewOpenSSL_PR

2. Irgendwo einen neue Ordner anlegen. Z.B.: "C:\IndyOpenSsl".

3. Den gesamten Inhalt vom Download-/Unterordner "..Indy-NewOpenSSL_PR\Lib\Protocols" nach "C:\IndyOpenSsl" kopieren.

4. Den Unterordner "C:\IndyOpenSsl\changes" anlegen.

5. Aus dem Download nach "C:\IndyOpenSsl\changes" kopieren:
..Indy-NewOpenSSL_PR\Lib\System\*.inc
..Indy-NewOpenSSL_PR\Lib\System\IdCTypes.pas
..Indy-NewOpenSSL_PR\Lib\System\IdGlobal.pas

6. In den Projektoptionen "Delphi-Compiler" die "Suchpfad" eintragen:
C:\IndyOpenSsl
C:\IndyOpenSsl\changes
C:\IndyOpenSsl\dynamic
C:\IndyOpenSsl\static

7. Open SSL "1.1.1" und "3" sind fast identisch. Deshalb reicht es "C:\Delphi\IndyOpenSsl\IdOpenSSLConsts.pas" anzupassen und auf die "3er" DLLs zu verweisen (siehe unten). Damit läuft es auch mit Open SSL 3 was z.B. bei Ubuntu Linux 22.04 LTS Standard ist.

8. Zur Laufzeit lege ich dann z.B. "TIdOpenSslIoHandlerServer" oder "TIdOpenSslIoHandlerClient" und benutze es.

9. Der Parameter funktionieren etwas anders als unter 1.0.2. Beispiel:
Options.TlsVersionMinimum := TIdOpenSslVersion.Tlsv1_2;
Options.TlsVersionMaximum := TIdOpenSslVersion.Tlsv1_3;
Options.CertKey := 'C:\Zertifikat\Test.key';
Options.CertFile := 'C:\Zertifikat\Test.cer';


--- C:\Delphi\IndyOpenSsl ---
Delphi-Quellcode:
unit IdOpenSSLConsts;

interface

{$i IdCompilerDefines.inc}

const
  CLibCryptoRaw = 'libcrypto';
  CLibSSLRaw = 'libssl';

  SSLDLLVers: array [0..1] of string = ('', '.3');

  CLibCrypto =
    {$IFDEF CPU32}CLibCryptoRaw + '-3.dll'{$ENDIF}
    {$IFDEF CPU64}CLibCryptoRaw + '-3-x64.dll'{$ENDIF}
    ;
  CLibSSL =
    {$IFDEF CPU32}CLibSSLRaw + '-3.dll'{$ENDIF}
    {$IFDEF CPU64}CLibSSLRaw + '-3-x64.dll'{$ENDIF}
    ;

implementation

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz