AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TIDHTTP - Open SSL - TLS

Ein Thema von josef-b · begonnen am 13. Apr 2020 · letzter Beitrag vom 23. Sep 2020
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#1

TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 08:06
Ich verbinde mich üher TIDHTTPS an verschiedene URLs um Bilder zu downloaden bei
MIME emails.

Leider klappt die Verbindung nur sporadisch.

Ich habe zur TIDHTTP-Komponente eine TIDSSLIOHandlerSocketOpenSSL-Komponente hinzugefügt.

Delphi-Quellcode:
IOHandler.Method := sslvTLSv1_2;
IOHandler.Mode := sslmClient;
Beim Verbinden kommen veschiedene Fehlermeldungen, je nach Web-Adresse, wie gesagt,
beim manchen gehts auch

z.B.
Fehler beim Verbinden mit SSL.
error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
oder
HTTP/1.1 403 Forbidden

Ich habe mir die neuesten DLL-Dateien ssleay32.dll und libeay32.Dll heruntegeladen und
in das Programmverzeichnis gelegt, von wo aus die exe gestartet wird.

Ich hab null Plan woran es liegt. Muss ich beim Verbinden beim WebServer sozusagen nachfragen,
welche Verschlüsselung er haben möchte? Oder geht das automatisch ist TLS nicht abwärtskompatibel?

Wenn ich einen 64Bit-Rechner habe, aber Delphi in 32Bit kompiliert, brauche ich dann die 32-bit
oder 64-bit dlls?

Habe Indy 10.6

Oder kann es sein, dass er sich auf meinem Rechner doch doch alte dlls rausfischt? Ich habe nämlich
auch noch in anderer Software von Fremdanbietern die dlls in verschiedenen Verzeichnissen.
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#2

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 10:08
Mit SSLOptions.Method := sslvTLSv1_2 wird nur TLS 1.2 unterstützt. Server die stattdessen noch TLS 1.1 (oder bereits TLS 1.3 erwarten), werden nicht mit dem Client zusammenarbeiten.

Um sowohl TLS 1.1. als auch TLS 1.2 zu erlauben muss SSLOptions.SSLVersions verwendet werden. Alle für die Verbindungen erlaubten TLS Versionen können damit angegeben werden.

Beispiel:
SSLOptions.SSLVersions := [sslvTLSv1_1,sslvTLSv1_2]

Welche Versionen der jeweilige Server unterstützt läßt sich mit online- und offline Tools herausfinden, dazu lassen sich im Netz viele Beispiele finden.

Die DLLs müssen der von Delphi erstellten Bittigkeit entsprechen, bei 32 Bit Anwendungen also 32 Bit DLLs.
Michael Justin
habarisoft.com

Geändert von mjustin (13. Apr 2020 um 10:42 Uhr)
  Mit Zitat antworten Zitat
Strict

Registriert seit: 25. Mär 2020
47 Beiträge
 
#3

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 13:42
Vielleicht hilft dir diese Klasse die ich seit Jahren benutze
Delphi-Quellcode:
unit uHTTP;

interface

uses
 System.Classes, IdHTTP, IdSSLOpenSSL;

type
 TuHTTP= class(TIdHTTP)

 private
  FIOHndl: TIdSSLIOHandlerSocketOpenSSL;
 public
  constructor Create;
  destructor Destroy; override;
 end;

implementation

constructor TuHTTP.Create;
begin
 inherited;

 FIOHndl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
 Request.BasicAuthentication := True;
 HandleRedirects := True;

 ReadTimeout := 3000;
 ConnectTimeout := 3000;
 FIOHndl.ReadTimeout := 3000;
 FIOHndl.ConnectTimeout := 3000;

 FIOHndl.SSLOptions.SSLVersions := [sslvTLSv1_2];

 IOHandler := FIOHndl;
end;

destructor TuHTTP.Destroy;
begin
 FIOHndl.Free;

 inherited;
end;

end.
Delphi-Quellcode:

var HTTP: TuHTTP;

HTTP := TuHTTP.Create;
try
 s := HTTP.Get( URL );
finally
 HTTP.Free;
end;
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 14:02
Mit SSLOptions.Method := sslvTLSv1_2 wird nur TLS 1.2 unterstützt. Server die stattdessen noch TLS 1.1 (oder bereits TLS 1.3 erwarten), werden nicht mit dem Client zusammenarbeiten.

Um sowohl TLS 1.1. als auch TLS 1.2 zu erlauben muss SSLOptions.SSLVersions verwendet werden. Alle für die Verbindungen erlaubten TLS Versionen können damit angegeben werden.

Beispiel:
SSLOptions.SSLVersions := [sslvTLSv1_1,sslvTLSv1_2]
Ich habe jetzt folgeden Code:

Delphi-Quellcode:
SSLHandler.Port := 443;
SSLHandler.SSLOptions.Method := sslvSSLV23; //gar nichts lässt sich im OI nicht einstellen
SSLHandler.SSLOptions.Mode := sslmUnassigned;
SSLHandler.SSLOptions.SSLVersions := [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
Manche Seiten gehen, diese hier z.B. nicht (ich stelle sie mal hier hin, ist es nur Werbe-Bild

https://images.trckacbm.com/public/r...stagram@2x.png

Ich erhalte folgede Fehlermeldung:

Fehler beim Verbinden mit SSL.
error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Liegt es evtl. doch an der ssleay32.DLL oder der libeay32.dll, dass er sich vielleicht eine andere holt, als die, die neben der Exe liegt im Projektverzeichnis?

@strict:
Request.BasicAuthentication := True;
da kommt dann als Antwort 401 - Bad Request
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#5

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 15:27
Hingedaddelt mal einfach sowas probieren:
Delphi-Quellcode:
function GetSSLMethod(sUrl: string; var sMessage: string; ssl: TIdSSLIOHandlerSocketOpenSSL; http: TIdHTTP): Integer;
var
  myIdSSLVersion: TIdSSLVersion;
begin
  Result := -1;
  for myIdSSLVersion := Low(TIdSSLVersion) to High(TIdSSLVersion) do begin
    SSL.SSLOptions.Method := myIdSSLVersion;
    try
      http.RedirectMaximum := 0;
      http.HandleRedirects := false;
      http.Response.Clear;
      http.Get(sUrl);
      http.Disconnect(True);
      http.IOHandler.InputBuffer.Clear;
      Result := Ord(myIdSSLVersion);
      break;
    except
      on e: Exception do begin
        case http.ResponseCode of
          301, 302 : sMessage := sMessage + #13 + http.ResponseText;
        else
          sMessage := sMessage + #13 + AnsiReplaceText(e.Message, #13#10, ' ');
        end;
        http.Disconnect(True);
        http.IOHandler.InputBuffer.Clear;
      end;
    end;
  end;
end;
Es passiert in etwa folgendes:

Es werden in einer Schleife alle SSL-Version durchprobiert, bis zur ersten funktionierenden.
Die kann dann zur weiteren Verarbeitung genutzt werden.

Ist der Rückgabewert der Funktion -1, so konnte keine funktionierende SSL-Version ermittelt werden.

images.trckacbm.com nutzt das von Dir gewählte Protokoll nicht, sondern nur TLS 1.2 und TLS 1.1, von daher ist die Fehlermeldung absolut korrekt und hat nichts mit lokalen DLLs zu tuen.

U. a. dort kannst Du prüfe lassen, welche Protokolle genutzt werden können: https://www.ionos.de/tools/ssl-check
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 17:55
Danke Delphi.Narium für die Funktion GetSSLMethod

Es hilft schon weiter, leider gehts immer noch nicht.

Ich habe mal einen Screenshot des Ergebnisses drangehängt.

Er macht ja 6 Durchläufe, wenn er nichts findet.

Es ist übrigens das Ergebnis von dem Link oben..eigentlich müsste ja mindestens TLS 1_2 funktionieren..

Habe zwar keine Ahnung aber ist es richtig, dass er da 4 Mal die SSL3 auflistet und kein TLS?

Fehlt mir da was in meiner Installation?

Version 1 : SSL_CTX
Version 2 : SSL_23
Version 3 : SSL_3
Version 4-6 auch SSL_3 - müsste das nicht TLS 1, TLS 1_1 und TLS 1_2 sein?
Miniaturansicht angehängter Grafiken
test_ssl_versions.jpg  

Geändert von josef-b (13. Apr 2020 um 18:43 Uhr)
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.508 Beiträge
 
Delphi 7 Professional
 
#7

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 18:43
Frag mal bitte im Exceptionblock weitere Fehler ab, die da u. a. wären:
Delphi-Quellcode:
    except
      on e: Exception do begin
        case http.ResponseCode of
          301, 302 : sMessage := sMessage + #13 + http.ResponseText;
          403 : begin
                  sMessage := http.ResponseText;
                  Result := Ord(myIdSSLVersion);
                  break;
                end;
        else
          sMessage := sMessage + #13 + http.ResponseText + #13 + AnsiReplaceText(e.Message, #13#10, ' ');
        end;
        http.Disconnect(True);
        http.IOHandler.InputBuffer.Clear;
      end;
    end;
Das Problem der Routine scheint nicht (nur) das Nichtfinden der SSL-Version zu sein, sondern bei erfolgreich gefundener SSL-Version folgt anschließend Fehler 403 und man landet damit auch in der Fehlerbehandlung.

Jedenfalls funktionieren bei mir sslvTLSv1_1 und sslvTLSv1_2, wie zu erwarten wäre.
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 21:19
Es kommt bei der Exception kein Fehler 403.

Der Responsetext bleibt auch bei allen Versionen leer.
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#9

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 21:20
Und was sagt der ResponseCode?
  Mit Zitat antworten Zitat
josef-b

Registriert seit: 6. Jun 2004
Ort: bei Jena in Thüringen
95 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: TIDHTTP - Open SSL - TLS

  Alt 13. Apr 2020, 21:37
Der ResponseCode ist jedesmal -1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 20:11 Uhr.
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