AGB  ·  Datenschutz  ·  Impressum  







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

HTTPS-Download, Fehler 12157

Ein Thema von hoika · begonnen am 20. Jul 2017 · letzter Beitrag vom 21. Jul 2017
Antwort Antwort
Seite 1 von 2  1 2      
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 11:40
Hallo,
mit folgendem Code will ich eine Datei über HTTPS herunterladen.
Es geht genau um diese Datei hier.
https://trustcenter-data.itsg.de/dal...hme-sha256.key

Nehme ich eine Seite ohne HTTPS, klappt es.
Was mache ich denn falsch?

Delphi-Quellcode:
// https://stackoverflow.com/questions/13638778/delphi-downloading-a-file-using-wininet
function DownloadFile(URL: widestring; Path: string): Boolean;
const
  BLOCK_SIZE = 1024;
var
  InetHandle: Pointer;
  URLHandle: Pointer;
  FileHandle: Cardinal;
  BytesRead: Cardinal;
  DownloadBuffer: Pointer;
  Buffer: array [1 .. BLOCK_SIZE] of byte;
  BytesWritten: Cardinal;
begin
  Result := False;

  InetHandle := InternetOpenW(PWideChar(URL), 0, 0, 0, 0);
  if not Assigned(InetHandle) then RaiseLastOSError;
  try
     InternetConnect (
       InetHandle,
       PChar(URL),
       INTERNET_DEFAULT_HTTPS_PORT,
       PChar(''), // User
       PChar(''), // Pass
       INTERNET_SERVICE_HTTP,
       0,
       0
     );

// auch nil,nil für User und Pass klappen nicht


    URLHandle := InternetOpenUrlW(InetHandle, PWideChar(URL), 0, 0, 0, 0);
    if not Assigned(URLHandle) then RaiseLastOSError; // hier kommt der Fehler
    try
      FileHandle := CreateFileW(PWideChar(Path), GENERIC_WRITE, FILE_SHARE_WRITE, 0,
        CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
      if FileHandle = INVALID_HANDLE_VALUE then RaiseLastOSError;
      try
        DownloadBuffer := @Buffer;
        repeat
          if (not InternetReadFile(URLHandle, DownloadBuffer, BLOCK_SIZE, BytesRead))
             or (not WriteFile(FileHandle, DownloadBuffer^, BytesRead, BytesWritten, 0)) then
            RaiseLastOSError;
        until BytesRead = 0;

        Result:= True;
      finally
        CloseHandle(FileHandle);
      end;
    finally
      InternetCloseHandle(URLHandle);
    end;
  finally
    InternetCloseHandle(InetHandle);
  end;
end;
Heiko

Geändert von hoika (20. Jul 2017 um 11:42 Uhr)
  Mit Zitat antworten Zitat
mjustin

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

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 12:01
Oft hilft bei TLS Problemen eine Server-Analyse, um die unterstützten Protokollversionen zu ermitteln:

https://www.ssllabs.com/ssltest/anal...itsg.de&latest

Mögliche Ursachen z.B:

* IE 6 / Windows XP
* Client verwendet SSL 2 oder SSL 3 statt TLS
Michael Justin

Geändert von mjustin (20. Jul 2017 um 12:03 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 12:05
Hallo,
also mit Indy geht es.

Delphi-Quellcode:
function DownloadFile2(URL: string; Path: string): Boolean;
var
  URI : TIdURI;
  IOHandler : TIdSSLIOHandlerSocketOpenSSL;
  HTTP : TIdHTTP;
  FileStream: TFileStream;
begin
  URI := TIdURI.Create(URL);
  //URI.Username := ParamUserName;
  //URI.Password := ParamPassword;

  HTTP := TIdHTTP.Create(nil);
  if URI.Protocol = 'httpsthen
  begin
    IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
    //IOHandler.SSLOptions.Method := sslvSSLv3;
    HTTP.IOHandler := IOHandler;
  end;

  FileStream:= TFileStream.Create(Path, fmCreate);

  HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);

  FileStream.Free;
end;
Heiko
  Mit Zitat antworten Zitat
mjustin

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

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 12:10
Hallo,
also mit Indy geht es.
Indy benutzt OpenSSL, Windows nicht
Michael Justin

Geändert von mjustin (20. Jul 2017 um 12:12 Uhr) Grund: Indy
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 13:06
Hallo,
Protocols
TLS 1.3 No
TLS 1.2 Yes
TLS 1.1 Yes
TLS 1.0 Yes
SSL 3 No
SSL 2 No
For TLS 1.3 tests, we currently support draft version 18.

Und was bringt mir das jetzt für meinen WinINet-Code?
Heiko

Geändert von hoika (20. Jul 2017 um 13:17 Uhr)
  Mit Zitat antworten Zitat
mjustin

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

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 14:03
Hallo,
Protocols
TLS 1.3 No
TLS 1.2 Yes
TLS 1.1 Yes
TLS 1.0 Yes
SSL 3 No
SSL 2 No
For TLS 1.3 tests, we currently support draft version 18.

Und was bringt mir das jetzt für meinen WinINet-Code?
Sind die serverseitig unterstützten Protokolle auf dem Windows Client denn aktiviert?

Unter "Eigenschaften von Internet" | "Erweitert" kann man alle Protokolle einzeln ein- und ausschalten.

Es muss dort ein Häkchen bei TLS 1.2, 1.2 oder 1.0 verwenden stehen.
Michael Justin
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 14:32
Hallo,
OK, verstanden.

Eigenschaften von Internet / Erweitert finde ich nur im Internet Explorer.
Und mit dem Internet Explorer kann ich die Datei ja laden.

Wenn es so kompliziert* ist, bleibt es bei Indy

*kompliziert = für viele unserer Kunden zu schwierig
Heiko

Geändert von hoika (20. Jul 2017 um 14:37 Uhr)
  Mit Zitat antworten Zitat
mjustin

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

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 14:57
Hallo,
OK, verstanden.

Eigenschaften von Internet / Erweitert finde ich nur im Internet Explorer.
Und mit dem Internet Explorer kann ich die Datei ja laden.

Wenn es so kompliziert* ist, bleibt es bei Indy

*kompliziert = für viele unserer Kunden zu schwierig
Es ist auch in der Systemsteuerung als "Internetoptionen" zu sehen. Möglich, dass es dort global gilt und im IE nur für das aktuelle Benutzerkonto. Indy ist einfacher in der Programmierung, aber für TLS muss dann das Aktualisieren der OpenSSL DLLs beachten.
Michael Justin
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 15:16
Hallo,
das ist wie es aussieht das gleiche.

Die Frage ist aber immer noch, warum der WinINet-Code nicht läuft.
Heiko
  Mit Zitat antworten Zitat
mjustin

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

AW: HTTPS-Download, Fehler 12157

  Alt 20. Jul 2017, 15:28
Hallo,
das ist wie es aussieht das gleiche.

Die Frage ist aber immer noch, warum der WinINet-Code nicht läuft.
Sind die Häkchen unterschiedlich im IE und in der Systemsteuerung? Läuft das Programm in einem anderen Benutzerkonto als der angemeldete Benutzer? Welche Häkchen sind gesetzt?

Falls SSL 2 oder SSL 3 aktiviert ist: deaktivieren.
Michael Justin
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:43 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