Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   HTTPS-Download, Fehler 12157 (https://www.delphipraxis.net/193347-https-download-fehler-12157-a.html)

hoika 20. Jul 2017 10:40

HTTPS-Download, Fehler 12157
 
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;

mjustin 20. Jul 2017 11:01

AW: HTTPS-Download, Fehler 12157
 
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

hoika 20. Jul 2017 11:05

AW: HTTPS-Download, Fehler 12157
 
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 = 'https' then
  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;

mjustin 20. Jul 2017 11:10

AW: HTTPS-Download, Fehler 12157
 
Zitat:

Zitat von hoika (Beitrag 1377080)
Hallo,
also mit Indy geht es.

Indy benutzt OpenSSL, Windows nicht :)

hoika 20. Jul 2017 12:06

AW: HTTPS-Download, Fehler 12157
 
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?

mjustin 20. Jul 2017 13:03

AW: HTTPS-Download, Fehler 12157
 
Zitat:

Zitat von hoika (Beitrag 1377093)
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.

hoika 20. Jul 2017 13:32

AW: HTTPS-Download, Fehler 12157
 
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

mjustin 20. Jul 2017 13:57

AW: HTTPS-Download, Fehler 12157
 
Zitat:

Zitat von hoika (Beitrag 1377098)
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.

hoika 20. Jul 2017 14:16

AW: HTTPS-Download, Fehler 12157
 
Hallo,
das ist wie es aussieht das gleiche.

Die Frage ist aber immer noch, warum der WinINet-Code nicht läuft.

mjustin 20. Jul 2017 14:28

AW: HTTPS-Download, Fehler 12157
 
Zitat:

Zitat von hoika (Beitrag 1377102)
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.
Seite 1 von 2  1 2      

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