Einzelnen Beitrag anzeigen

Delphi.Narium

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

AW: TIDHTTP - Open SSL - TLS

  Alt 15. Apr 2020, 15:46
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;
  Mit Zitat antworten Zitat