Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   TIDHTTP - Open SSL - TLS (https://www.delphipraxis.net/203986-tidhttp-open-ssl-tls.html)

josef-b 13. Apr 2020 07:06

TIDHTTP - Open SSL - TLS
 
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.

mjustin 13. Apr 2020 09:08

AW: TIDHTTP - Open SSL - TLS
 
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:
Delphi-Quellcode:
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.

Strict 13. Apr 2020 12:42

AW: TIDHTTP - Open SSL - TLS
 
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;

josef-b 13. Apr 2020 13:02

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von mjustin (Beitrag 1461901)
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:
Delphi-Quellcode:
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

Delphi.Narium 13. Apr 2020 14:27

AW: TIDHTTP - Open SSL - TLS
 
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

josef-b 13. Apr 2020 16:55

AW: TIDHTTP - Open SSL - TLS
 
Liste der Anhänge anzeigen (Anzahl: 1)
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?

Delphi.Narium 13. Apr 2020 17:43

AW: TIDHTTP - Open SSL - TLS
 
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.

josef-b 13. Apr 2020 20:19

AW: TIDHTTP - Open SSL - TLS
 
Es kommt bei der Exception kein Fehler 403.

Der Responsetext bleibt auch bei allen Versionen leer.

DieDolly 13. Apr 2020 20:20

AW: TIDHTTP - Open SSL - TLS
 
Und was sagt der ResponseCode?

josef-b 13. Apr 2020 20:37

AW: TIDHTTP - Open SSL - TLS
 
Der ResponseCode ist jedesmal -1

Delphi.Narium 14. Apr 2020 09:52

AW: TIDHTTP - Open SSL - TLS
 
Versuch es erstmal mit 'ner anderen Url, z. B. google oder die Startseite hier im Forum ...

Dann sammle bitte innerhalb der Routine alle Fehlermeldungen in einer Textdatei oder gib sie per ShowMessage aus und poste hier bitte alle Fehlermeldungen, so wie sie ausgegeben werden. Keine Interpretation der Fehlermeldungen, sondern die Originaltexte. Nur damit besteht die Chance etwas Hilfe geben zu können.
Desweiteren poste bitte den Aufruf der Funktion, z. B.:
Delphi-Quellcode:
ShowMessage(IntToStr(GetSSLMethod('https://www.ionos.de/', sMessage, ssl, http));
ShowMessage(sMessage);
Delphi-Quellcode:
ShowMessage(IntToStr(GetSSLMethod('https://www.google.de/', sMessage, ssl, http));
ShowMessage(sMessage);
Delphi-Quellcode:
ShowMessage(IntToStr(GetSSLMethod('https://www.delphipraxis.net/', sMessage, ssl, http));
ShowMessage(sMessage);
Delphi-Quellcode:
ShowMessage(IntToStr(GetSSLMethod('https://images.trckacbm.com/', sMessage, ssl, http));
ShowMessage(sMessage);
Den Text, den ShowMessage anzeigt, kannst Du per STRG+C in die Zwischenablage kopieren und per STRG+V hier im Post (zwischen Code-Tags) einfügen.

Tritt das Problem bei allen URLs auf oder nur bei images.trckacbm.com?

josef-b 14. Apr 2020 13:40

AW: TIDHTTP - Open SSL - TLS
 
Danke für die Mühe, hoffe es geht so:


Delphi-Quellcode:
-------------------------------
GetSSLVersion - URL: https://www.ionos.de/

Result: 1

Fehler beim Anlegen eines SSL-Kontexts. error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed

-------------------------------
GetSSLVersion - URL: https://www.google.de

Result: 1

Fehler beim Anlegen eines SSL-Kontexts. error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed

-------------------------------
GetSSLVersion - URL: https://www.delphipraxis.net/

Result: 1

Fehler beim Anlegen eines SSL-Kontexts. error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed

-------------------------------
GetSSLVersion - URL: https://images.trckacbm.com/

Result: -1

Fehler beim Anlegen eines SSL-Kontexts. error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed
Fehler beim Verbinden mit SSL. error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Fehler beim Verbinden mit SSL. error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Fehler beim Verbinden mit SSL. error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Fehler beim Verbinden mit SSL. error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
Fehler beim Verbinden mit SSL. error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number

-------------------------------
GetSSLVersion - URL: https://image03.conrad.com/de-b2b/Schablone/icon_info.gif

Result: 1

Fehler beim Anlegen eines SSL-Kontexts. error:140E0197:SSL routines:SSL_shutdown:shutdown while in init

-------------------------------
GetSSLVersion - URL: https://image.communication.geocaching.com/lib/fe8f12717d63067b77/m/2/3f65e854-1d5f-4ff7-b7eb-61a028d9874e.png

Result: 1

Fehler beim Anlegen eines SSL-Kontexts. error:140A90C4:SSL routines:SSL_CTX_new:null ssl method passed

-------------------------------
GetSSLVersion - URL: https://newsletter.christ.de/op/7/3SQKCGQ9-3SPW8UIM-195Y15NR.gif

Result: 1
HTTP/1.1 403 Forbidden
-------------------------------
GetSSLVersion - URL: https://mailing.dhl.de/assets/bm/binary/e/b/b/3/ebb3bbd83c609e97bb0b46a29559789f_170.png

Result: 0
HTTP/1.1 403 Forbidden

Delphi.Narium 14. Apr 2020 15:14

AW: TIDHTTP - Open SSL - TLS
 
Wenn ich es recht sehe, kommt alles mit Result = 1, mit sslvSSLv23 zurecht.
Result = 0 müsste bedeuten, dass hier sslvSSLv2 auszuwählen wäre.

Die Ermittlung der SSL-Version solltest Du immer auf das Rootverzeichnis (heißt das so) machen, also google.de, image03.conrad.com, mailing.dhl.de ... Damit verhinderst Du (meistens), dass Du über einen Fehler 403 "stolperst", weil Du zwar die SSL-Version ermitteln konntest, aber anschließende Fehler Dich doch wieder in die Fehlerbehandlung "jagen".
Aber: Fehler 403 heißt auch, dass die SSL-Version ermittelt werden konnte. Fehler 403 setzt u. a. voraus, dass Client und Server sich auf eine SSL-Version einigen konnten und erst nach dieser Einigung stellt der Server fest, dass Du die angeforderte Resource (mangels Zugriffsrechten) nicht erhalten darfst. Bei Fehler 404 verhält es sich analog, da gibt es dann die angeforderte Resource halt nicht.

Das bisherige Ergebnis lässt darauf schließen, dass Du "nur" mit images.trckacbm.com ein Problem hast, die anderen funktionieren alle.
Code:
https://www.ionos.de/ --> TLS 1.2
https://www.google.de/ --> TLS 1.0, TLS 1.1, TLS 1.2
https://www.delphipraxis.net/ --> TLS 1.0, TLS 1.1, TLS 1.2
https://images.trckacbm.com/ --> TLS 1.1, TLS 1.2
https://image03.conrad.com/ --> TLS 1.2
https://image.communication.geocaching.com/ --> TLS 1.2
https://newsletter.christ.de/ --> TLS 1.0, TLS 1.1, TLS 1.2
https://mailing.dhl.de/ --> TLS 1.0, TLS 1.1, TLS 1.2
Der einzige Unterschied: Die funktionierenden unterstützen entweder nur TLS 1.2 oder TLS 1.0, TLS 1.1 und TLS 1.2 das "Problemkind" aber "nur" TLS 1.1 und TLS 1.2.

Ausgehend vom Quelltext in der Unit IdSSLOpenSSL entspricht sslvSSLv23 demhier: [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv 1_2]
Damit sollte eigentlich bei allen als SSL-Version sslvSSLv23 herauskommen.

Probier' bitte Dein "Problemkind" mal mit expliziter Angabe der SSL-Version sslvTLSv1_1 aus, bei Misserfolg mit expliziter Angabe von sslvTLSv1_2.

Wenn's damit nicht geht, weiß ich auch nicht mehr weiter.
Code:
Delphi 7
Indy        10.6.2.0 
libeay32.dll 1.0.2.12
ssleay32.dll 1.0.2.12
(ja, alles schon etwas antiquiert, aber funktioniert)

Ergebnis für: https://trckacbm.com/
sslvSSLv2  : Error getting SSL method.
sslvSSLv23 : HTTP/1.1 404 Not Found
sslvSSLv3  : Error connecting with SSL. error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
sslvTLSv1  : HTTP/1.1 404 Not Found
sslvTLSv1_1: HTTP/1.1 404 Not Found
sslvTLSv1_2: HTTP/1.1 404 Not Found
Eventuell mal prüfen, ob Du dort https://www.delphipraxis.net/1453894-post74.html was aktuelleres findest, als momentan bei Dir vorhanden.

josef-b 15. Apr 2020 14:15

AW: TIDHTTP - Open SSL - TLS
 
Danke nochmals für die Mühe..

Ich denke mir, um die meisten Server zu erreichen, sollte ich

die Funktion GetSSLMethod aufrufen.

Dazu aber noch eine Frage..

Ich bekomme dann den Integer-Wert.

Wie kann ich jetzt dem IOHandler den Wert zuweisen?

Delphi-Quellcode:
SSL1.SSLOptions.Method := ? (der Integer geht ja nicht ?)
oder sollte ich einfach


Delphi-Quellcode:

SSL1.SSLOptions.Method := sslvSSLv23
setzen, weil ja das sslvsslv23 alle SSLVersions unterstützt?

DieDolly 15. Apr 2020 14:19

AW: TIDHTTP - Open SSL - TLS
 
Hier musst du vermutlich re-mappen.
Das hier steht in der IdSSLOpenSSL.
Delphi-Quellcode:
TIdSSLVersion = (sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2);


Was ist sslvsslv23 eigentlich? Ist die aktuelle Version nicht 1_2 ?

josef-b 15. Apr 2020 14:39

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von DieDolly (Beitrag 1462134)
Hier musst du vermutlich re-mappen.
Das hier steht in der IdSSLOpenSSL.
Delphi-Quellcode:
TIdSSLVersion = (sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2);
Was ist sslvsslv23 eigentlich? Ist die aktuelle Version nicht 1_2 ?

Was meinst du mit remappen?


Wenn du

Delphi-Quellcode:

TIdSSLIOHandlerSocketOpenSSL.Method := sslvsslv23
setzt, dann setzt er ja alle SSlVersions auf true,
außer eben sslvSSLv23...

ich habe gelessen, dass er sich dann automatisch, wenn möglich, eine gültiges SSL aussucht.

DieDolly 15. Apr 2020 14:42

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Was meinst du mit remappen?
Das meine ich damit nicht.

Ich hab mir gerade mal die GetSSLMethod angeguckt.

Delphi-Quellcode:
TIdSSLIOHandlerSocketOpenSSL.Method := TIdSSLVersion(dein integer wert);
reicht.

Ich finde, dieser Ansatz ist eh sehr gefährlich. Ich würde niemals beispielsweise ssl 1 unterstützen.

Delphi.Narium 15. Apr 2020 14:46

AW: TIDHTTP - Open SSL - TLS
 
sslvSSLv23 sollte als Voreinstellung erstmal richtig sein. Nur wenn das nicht klappt kann man mit der Funktion prüfen, ob es überhaupt eine "passende" Version gibt.

Der Rückgabewert der Funktion muss ja nicht zwingend ein Integer sein, man kann ihn ja auch auf TIdSSLVersion ändern, wenn man als Defaultrückgabewert sslvSSLv23 nimmt, kann man sie eigentlich immer nutzen.

Aber: SSL1 wird der Funktion als Parameter übergeben und innerhalb der Funktion wird in der For-Schleife am Anfang SSL.SSLOptions.Method := myIdSSLVersion; gesetzt. Damit ist eine Zuweisung nach dem Aufruf der Funktion nicht erforderlich.

Der Rückgabewert ist eigentlich nur dazu da, um zu prüfen, ob die Routine erfolgreich war, man könnte also auch als Rückgabe ein Boolean nehmen.

Delphi-Quellcode:
function GetSSLMethod(sUrl: string; var sMessage: string; ssl: TIdSSLIOHandlerSocketOpenSSL; http: TIdHTTP): Boolean;
var
  myIdSSLVersion: TIdSSLVersion;
begin
  Result := False;
  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 := True;
      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;
Delphi-Quellcode:
// Aufruf z. B. so:
if GetSSLMethod('https://was.auch.immer', sMessage, ssl1, http1) then begin
  // Hier die zu erledigende Aufgabe einbauen.
end else begin
  ShowMessage(sMessage);
end;
@DieDolly

sslvSSLv23 ist eigentlich alles, sowas wie sslvSSL_AlleVerfuegbarenVersionen.

Der Name sslvSSLv23 ist leider eher irreführend, da er etwas anderes suggeriert, als er eigentlich meint.

Der Setter in der Unit IdSSLOpenSSL sieht so aus:
Delphi-Quellcode:
procedure TIdSSLOptions.SetMethod(const AValue: TIdSSLVersion);
begin
  fMethod := AValue;
  if AValue = sslvSSLv23 then begin
    fSSLVersions := [sslvSSLv2,sslvSSLv3,sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];
  end else begin
    fSSLVersions := [AValue];
  end;
end;

Delphi.Narium 15. Apr 2020 14:50

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von DieDolly (Beitrag 1462143)
Ich finde, dieser Ansatz ist eh sehr gefährlich. Ich würde niemals beispielsweise ssl 1 unterstützen.

Es geht nicht darum, was Du oder wir oder sonstwer unterstützen würden, sondern darum herauszufinden, was der Server, auf den wir zuzugreifen gedenken, unterstützt.

Und wenn die Gegenseite sagt: "Ich unterstütze nur ssl 1", dann muss man damit leben und ssl 1 nutzen oder man unterhält sich nicht mit der Gegenseite.

Inwieweit es sinnvoll ist ssl 1 zu unterstützen, steht hier nicht zu Debatte.

DieDolly 15. Apr 2020 14:54

AW: TIDHTTP - Open SSL - TLS
 
Heißt das
Delphi-Quellcode:
TIdSSLIOHandlerSocketOpenSSL.Method := sslvSSLv23;


bedeutet, dass man alle Versionen unterstützt und ist dasselbe wie

Delphi-Quellcode:
TIdSSLIOHandlerSocketOpenSSL.Method := [sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1,sslvTLSv1_1,sslvTLSv1_2];

?

josef-b 15. Apr 2020 14:56

AW: TIDHTTP - Open SSL - TLS
 
@delphi.narium:

Ok..das habe ich jetzt glaub ich verstanden :) - In der Funktion macht
er die Zuweisung bei der ersten gültigen SSL - Version.

Ja und dann ist es egal, welche das ist, Hauptsache ich kann das Bildchen downloaden.

Delphi.Narium 15. Apr 2020 14:57

AW: TIDHTTP - Open SSL - TLS
 
@DieDolly

Ja.

DieDolly 15. Apr 2020 14:58

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von Delphi.Narium (Beitrag 1462152)
Ja.

Sehr unglücke Namensgebung muss ich zugeben.

Delphi.Narium 15. Apr 2020 15:04

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von josef-b (Beitrag 1462151)
@delphi.narium:

Ok..das habe ich jetzt glaub ich verstanden :) - In der Funktion macht
er die Zuweisung bei der ersten gültigen SSL - Version.

Ja und dann ist es egal, welche das ist, Hauptsache ich kann das Bildchen downloaden.

Pflappsig formuliert:

Die Funktion sucht das Erstbeste, was beide Seiten können.

Und wenn auf der Serverseite mal was nichtmehr unterstützt wird, nehmen wir beim nächsten Aufruf halt wieder das Erstbeste, was beide Seiten können. Eigentlich ist die Funktion nix anderes als ein "Try and Error" bis zum ersten "Nicht-Fehler".

Wie bei 'nem fremden Nummernschloss für's Fahrrad: man probiert solange die nächste Zahl, bis es aufgeht ;-)

Quasi in Mini-Brute-Force ;-)

TERWI 23. Sep 2020 09:51

AW: TIDHTTP - Open SSL - TLS
 
Hab ich hier die Lösung übersehen ?

Ich häng mich mal mir an, weil quasi gleiche Probs.
- Delphi 10.3 Community Edition
- Jedi Code Lib 3.1
- Jedi Visual Comp. Lib 3.6
- TIdHTTP & TIdSSLIOHandlerSocketOpenSSL melden beide 10.6.2.5366

Vor ca. 1 Jahr hab ich eine C-Schnipselei nach Delphi übersetzt, um IPTV naach meinen Wünschen zu nutzen.
Hier: https://tvonline.ewe.de (bzw. https://zattoo.com) mit einem bezahlten Account.
Das funktionierte zuletzt (vor ca. 3/4 Jahr ?!) recht super .... OHNE explizite Nutzung von SSL !

Nun hab ich das wieder hervorgeholt und nix geht mehr.
Sehr wahrscheinlich eben wegen umstellung der Verschlüsselung...

Habe aus zuvor genanntem schon alles Mögliche in Kombination ausprobiert - ich erhalte immer wieder diese Fehler:
(Das Folgende ist ein Auszug aus meinem Logger)
Code:
[10:24:25:322] [ZATTOO - LogIn]: URL: https://tvonline.ewe.de
[10:24:25:322] [ZATTOO - LogIn]: --- Get AppToken ----------------------
[10:24:25:322] [ZATTOO - GETAPPTOKEN]: TEST: 0
[10:24:27:290] [ZATTOO - GETAPPTOKEN]: Socket-Fehler # 10053Software verursachte einen Verbindungsabbruch.
[10:24:27:290] [ZATTOO - GETAPPTOKEN]: TEST: 1
[10:24:27:467] [ZATTOO - GETAPPTOKEN]: Fehler beim Verbinden mit SSL. error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
[10:24:27:467] [ZATTOO - GETAPPTOKEN]: TEST: 2
[10:24:27:645] [ZATTOO - GETAPPTOKEN]: Fehler beim Verbinden mit SSL. error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure
[10:24:27:645] [ZATTOO - GETAPPTOKEN]: TEST: 3
[10:24:27:821] [ZATTOO - GETAPPTOKEN]: Fehler beim Verbinden mit SSL. error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version
[10:24:27:821] [ZATTOO - GETAPPTOKEN]: TEST: 4
[10:24:27:999] [ZATTOO - GETAPPTOKEN]: Fehler beim Verbinden mit SSL. error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version
[10:24:27:999] [ZATTOO - GETAPPTOKEN]: TEST: 5
[10:24:28:178] [ZATTOO - GETAPPTOKEN]: Fehler beim Verbinden mit SSL. error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version
Der Zugriff, Login und TV gucken mit Mozilla funzt 1A.
Ich bin hier z.Zt. mit dem Latein am Ende. Auch andere Seiten bringen da prinzipiell die gleichen Ansätze.

Klaus01 23. Sep 2020 10:06

AW: TIDHTTP - Open SSL - TLS
 
.. hast Du die SSL Bibliotheken schon ausgetauscht?
Kann sein, das Du ältere benutzt.

Grüße
Klaus

TERWI 23. Sep 2020 10:09

AW: TIDHTTP - Open SSL - TLS
 
Nein. Getauscht ersetzt habe ich noch nichts.
Bin davon ausgegangen, dass die Commu-Ed 10.3 (02.10.19 installiert) aktuell genug ist.
Dito die Indy Komponenten.

Klaus01 23. Sep 2020 10:13

AW: TIDHTTP - Open SSL - TLS
 
Delphi bringt aber doch keine SSL Libraries (libeay32.dll und ssleay32.dll) mit.

Grüße
Klaus

TERWI 23. Sep 2020 10:20

AW: TIDHTTP - Open SSL - TLS
 
Sorry, ich bin da nicht so der Held betreff Netzwerkgedöns.
Dachte, alles nötige schiebt Indy hinterher ?
Was wäre wo aktuell zu laden .... und wohin damit ?

Klaus01 23. Sep 2020 10:28

AW: TIDHTTP - Open SSL - TLS
 
hier sind sie zu finden: https://indy.fulgan.com/SSL/Archive/...i386-win32.zip
Die kannst Du in das Verzeichnis Deiner Exe packen.

Sehe gerage, dass die schon ganz schön alt sind.
Eine neuere Quelle habe ich noch nicht gefunden..
Hier sind neuere zu finden: http://wiki.overbyte.eu/wiki/index.php/ICS_Download

Grüße
Klaus

KodeZwerg 23. Sep 2020 10:44

AW: TIDHTTP - Open SSL - TLS
 
Vielleicht wäre auch OpenSSL zu nennen? (Source)

Michael II 23. Sep 2020 13:17

AW: TIDHTTP - Open SSL - TLS
 
Falls deine Webseiten 1.1.1 fordern, dann heissen die DLLs, welche du mit ausliefern musst: libcrypto-1_1-x64.dll, libssl-1_1-x64.dll

Offenbar unterstützt Indy 1.1.1 noch nicht. Es gibt aber eine Lösung:
https://www.delphipraxis.net/1473972-post15.html

Michael II 23. Sep 2020 15:31

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von TERWI (Beitrag 1474084)
Vor ca. 1 Jahr hab ich eine C-Schnipselei nach Delphi übersetzt, um IPTV nach meinen Wünschen zu nutzen.

Ich weiss natürlich nicht, was "nach meinem Wünschen" bedeutet... aber sobald du dann 10.4 hast, kannst du deine Webseiten auch mit der neuen TEdgeBrowser Komponente anzeigen lassen. Dann musst du dich um die SLL Dinge nicht kümmern.

1. Delphi Tools > GetIt WebView2 installieren.
2. WebView2 Runtime Installer installieren
3. Beispiel aus Delphi öffnen (\Public\Documents\Embarcadero\Studio\21.0\Samples \Object Pascal\VCL\WebBrowser\Edge\). WebView2Loader.dll aus 1. ins .exe Verzeichnis.
Dann hast du in deiner App die topaktuelle EdgeVersion 86.0.622.19 vom 22.9. drauf und kannst deine Seiten laden.

TERWI 23. Sep 2020 15:48

AW: TIDHTTP - Open SSL - TLS
 
Gar nicht so einfach, besagte SSLEAY und LIBEAY zu finden. Was aktuelles zumindestens...
Unter ICS hab ich die gar nicht gefunden - nur libcrypto-1_1-x??.dll und libssl-1_1-x??.dll und damit geht nix.
Gleiches ist auch unter https://indy.fulgan.com/SSL/Archive/Experimental/ ladbar.
Alles Nix-Funz.

Hab dann auf meinem Kalkulationshobel rumgesucht und etliches an LIBEAY und SSLEAY gefunden, je ca. 40x in unterschiedlichsten Verzeichnissen & Versionen.
Div. Pärchen bis letzte Version bis 1.02.18/1.02r (LibreOffice neulich Update) probiert ... NOGO.

Einzig ein Paar aus der Community-Edition-Inst im BIN-Verz. läuft: 1.02.14/1.02h
Ich gehe davon aus, dass die Indy-Koomponenten die Files da hin kopiert haben - ich war es wissentlich jedenfalls nicht.

Damit wird auf jeden Fall wie im Beispiel weiter vorne in der Loop bei Index 1 erkannt, abgebrochen und ich bekomme vom GET Daten züruck.
... zwar nicht in der Form wie bisher ... aber immerhin auswertbares HTML-Gerümpel.

Michael II 23. Sep 2020 16:13

AW: TIDHTTP - Open SSL - TLS
 
Zitat:

Zitat von TERWI (Beitrag 1474114)
Unter ICS hab ich die gar nicht gefunden - nur libcrypto-1_1-x??.dll und libssl-1_1-x??.dll und damit geht nix.

Die von dir erwähnten DLLs libcrypto... libssl... sind OpenSLL 1.1.1 DLLs und nicht 1.0.2.

Laut mezen kannst du mit seinem Indy-Zusatzcode 1.1.1 (libcrypto... libssl... DLLs) laden. Siehe mein Link in 32.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:06 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