Delphi-PRAXiS
Seite 2 von 4     12 34      

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)

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];

?


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:03 Uhr.
Seite 2 von 4     12 34      

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