AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy & OpenSSL 1.1.1 & TLS 1.3
Thema durchsuchen
Ansicht
Themen-Optionen

Indy & OpenSSL 1.1.1 & TLS 1.3

Ein Thema von mezen · begonnen am 4. Mai 2020 · letzter Beitrag vom 21. Nov 2022
Antwort Antwort
dschiffler

Registriert seit: 25. Okt 2006
30 Beiträge
 
Delphi 12 Athens
 
#1

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 12. Dez 2020, 17:14
Hallo mezen,

ich habe deinen Test so bei mir mit meiner URL nachvollzogen und komme zu dem gleichen Ergebnis.
Der erwartete Fingerprint wird bei Depth = 0 zurückgegeben.
Somit können wir erst einmal feststellen, dass dein IO-Handler funktioniert.

Ich habe dann offensichtlich im Verify-Ereignis etwas falsch gemacht und werde das jetzt analysieren. Dabei ist dein Hinweis, dass das Verify-Ereignis durchaus mehrmals ausgelöst werden kann, sehr hilfeich. Sollte ich bei dieser Überprüfungsvariante bleiben, darf ich also den Fingerprint erst bei Depth = 0 auswerten und überprüfen.

Ich bedanke mich schon einmal recht herzlich für deine Hilfe.

Kannst du mir zum Abschluss bitte noch ein Code-Beispiel geben, wie ich deinen Vorschlag, die Zertifikatsüberprüfung OpenSSL zu überlassen, umsetzen kann und die Nutzung von CertFile richtig gemacht wird?
Liebe Grüße
Dirk Schiffler
  Mit Zitat antworten Zitat
THonscha

Registriert seit: 22. Aug 2006
36 Beiträge
 
#2

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 6. Mär 2021, 15:26
Weiß jemand, ob die neuen TLS Versionen auf Delphi 10.4.2 unterstützt werden?
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 6. Mär 2021, 16:15
Nicht von Indy, von Komponenten wie TRestClient, der nicht auf Indy basiert schon.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
AWeber

Registriert seit: 12. Feb 2013
19 Beiträge
 
#4

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 25. Aug 2021, 12:32
Hallo,
zunächst möchte ich mich bedanken für die hier geleistete Arbeit

Aber auch gleich mit einem kleinen Problem um die Ecke kommen. Die Reaktion denn die OpenSSL DLL's nicht vorhanden sind - ist nicht so schön bei mir kommt es dann immer zu einer Schutzverletzung - im destructor der Klasse TIdOpenSSLContextClient Soweit ich durchdebuggt habe - ist die Aufrufkette folgende:
Delphi-Quellcode:
TIdTCPClientCustom.Connect( ) --> IOHandler := nil; (bedingt durch Exception) --> TIdTCPConnection.SetIOHandler --> IdDisposeAndNil(LIOHandler);
--> TIdOpenSSLIOHandlerClient.Destroy --> TIdOpenSSLContextClient.Destroy
Delphi-Quellcode:
TIdTCPClientCustom.Connect( )
  try
    IOHandler.Open; --> Exception weil DLL's nicht verfügbar
except
if IOHandler <> nil then begin
IOHandler.Close;
if ManagedIOHandler then begin
// Mein IOHandler ist ManagedIOHandler = true! (bedingt durch anderen Code zuvor)
IOHandler := nil; // RLebeau - SetIOHandler() will free the IOHandler
end;
end;
raise;
end;
Das Set IOhandler = nil führt dann zu:

Delphi-Quellcode:
 procedure TIdTCPConnection.SetIOHandler(AValue: TIdIOHandler);
    if ManagedIOHandler then begin
      if Assigned(LIOHandler) then begin
        FIOHandler := nil;
        -- Zugriffsfehler im Destructor des IOHandlers
        IdDisposeAndNil(LIOHandler);
      end;
      ManagedIOHandler := False;
    end;
Delphi-Quellcode:
destructor TIdOpenSSLIOHandlerClient.Destroy;
  FContext.Free(); --> Zugriffsfehler
Delphi-Quellcode:
destructor TIdOpenSSLContextClient.Destroy;
  OpenSSLContext ist hier noch nil
  und die Methoden / Funktionszeiger
  -> SSL_CTX_sess_set_remove_cb
  -> SSL_CTX_sess_set_new_cb ebenso... da DLL ja nicht gefunden wurde
Meine Lösung sieht jetzt so aus ich ändere die Routine:

Delphi-Quellcode:
procedure TIdOpenSSLIOHandlerClient.EnsureContext;
begin
  // schlägt das Laden der DLL fehl ist FContext noch <nil> und der Aufruf des TIdOpenSSLContextClient.Destroy entfällt.
  EnsureOpenSSLLoaded();

  if not Assigned(FContext) then
     FContext := TIdOpenSSLContextClient.Create();
  
  // EnsureOpenSSLLoaded(); --> führt ggf. zu Exception, wo FContext welches nicht komplett initialsiert ist abgeräumt wird
  try
    BeforeInitContext(FContext);
    TIdOpenSSLContextClient(FContext).Init(FOptions);
    AfterInitContext(FContext);
  except
    on E: EExternalException do
    begin
      try
        FreeAndNil(FContext);
      except
        on E: EExternalException do ; // Nothing
      end;
      raise EIdOpenSSLLoadError.Create('Failed to load OpenSSL');
    end;
  end;
end;
ist das so der richtige Weg?

Nachtrag:

in der Funktion TOpenSSLLoader.Load steckt leider auch ein Bug, auch wenn diese Funktion beim ersten Versuch sauber false liefert wenn die DLL's nicht geladen werden konnten, liefert einer 2. Aufruf true - auch wenn die DLL's immer noch nicht da sind... daher habe ich folgende geändert:

if not Result then
begin
// bei weiterem Aufruf nochmal versuchen die DLL's zu laden...
FLoadCount.Decrement();
Exit;
end;




André

Geändert von AWeber (25. Aug 2021 um 13:02 Uhr)
  Mit Zitat antworten Zitat
THonscha

Registriert seit: 22. Aug 2006
36 Beiträge
 
#5

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 21. Dez 2021, 08:07
Hat sich bei Indy etwas mit dem TLS 1.3 Support getan? Gibt es eine Delphi Version, die das out of the box unterstützt?
  Mit Zitat antworten Zitat
Thomasl

Registriert seit: 19. Jun 2006
Ort: Vreden
71 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 3. Aug 2022, 08:26
Ich habe es auch ans laufen bekommen.
Eine Frage, die IdOpenSSLConsts.pas kann man die wie hier auf die 3er DLL´s umbenennen?
Oder gibt es da noch Probleme.
Muss SSLDLLVers auch angepasst werden?
Es Funktioniert so wie hier

Delphi-Quellcode:
unit IdOpenSSLConsts;

interface

{$i IdCompilerDefines.inc}

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

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

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

implementation

end.
Thomas Levering
  Mit Zitat antworten Zitat
AWeber

Registriert seit: 12. Feb 2013
19 Beiträge
 
#7

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 5. Sep 2022, 19:13
@mezen, liest du hier noch mit? Ich verwende seit einiger Zeit deinen neuen Openssl IOHandler und bin recht zufrieden damit. Jetzt bin ich an einem Punkt wo ich Mails mit S/MIME signieren und verschlüsseln möchte. Die notwendigen Funktionen dazu gibt es ja in dem Openssl Dlls. Ich würde dazu gerne die restlichen Importe ergänzen, für einige der Funktionen kommt dieses Stack genannte Konstrukt zum Einsatz, damit nicht alles mit mehr oder minder typlosen pointern machen muss habe ich den Codegenerator erweitert, so dass er auch die Stack_of defines in Delphi inline Funktionen umsetzt.
Das würde ich gerne mit der Gemeinschaft teilen, wie lautet die URL / Branch deines github repositories?
Ich würde davon einen Branch machen und meinen Änderungen dort einstellen, ggf. kannst du das ja mergen?
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.014 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Indy & OpenSSL 1.1.1 & TLS 1.3

  Alt 6. Sep 2022, 18:43
Das würde ich gerne mit der Gemeinschaft teilen, wie lautet die URL / Branch deines github repositories?
Das wird vermutlich dieser hier sein,

https://github.com/mezen/Indy/tree/NewOpenSSL_PR

oder dieser:

https://github.com/mezen/Indy/tree/NewOpenSSL
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz