Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datasnap/SSL/Zertifikate mit Delphi 10.3.3 (https://www.delphipraxis.net/202670-datasnap-ssl-zertifikate-mit-delphi-10-3-3-a.html)

wjjw 26. Nov 2019 13:52

Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Liste der Anhänge anzeigen (Anzahl: 3)
Hallo,
nachdem ich Delphi 10.3.3 installiert und einige Projekte erfolgreich kompiliert habe, ist jetzt doch ein Problem aufgetreten.
Ich weis das es mit Linux und SSL unter 10.3.x Probleme gab.
Jetzt hab ich ein Problem mit Windows.

In meiner TDSCertFiles-Komponente habe ich alle drei Dateinamen ordnungsgemäß eingetragen (CertFile, KeyFile, RootCertFile).
Laut Fehlermeldung wird die "RootCertFile"-Datei nicht gefunden. Auch wird diese im Code "komisch" angezeigt: Pfad + "japanische Zeichen" (wo der Dateiname stehen sollte).

Hat jemand auch ein derartiges Problem? Wie gesagt - unter 10.3.2 ohne Probleme.
Wenn ich den RootCertFile-Eintrag leer lasse, funktioniert es auch.. Wird diese Datei überhaupt gebraucht oder reichen die Cert + Key Datei (+Passwort)?

hoika 26. Nov 2019 13:55

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Hallo,
sieht denn der Dateiname im Explorer "schön" aus?.

wjjw 26. Nov 2019 13:57

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Zitat:

Zitat von hoika (Beitrag 1452197)
Hallo,
sieht denn der Dateiname im Explorer "schön" aus?.

Ja, sehr schön -> "root.pem" :)

hoika 26. Nov 2019 14:28

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Hallo,
und wie setzt Du ihn?
Vielleicht ein "neues" Unicode-Problem?
Nimm mal als String einen AnsiString, wenn Du den Pfad zum Zertifikat zusammenbaust.

wjjw 26. Nov 2019 14:31

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Baue den String nicht zusammen - setzte ihn einfach relativ in der Komponente.
Also [RootCertFile] -> ".\root.pem".
Sonst mache ich nichts. Den Rest macht Delphi.
Das Problem ist ja sogar wenn du ein neues Projekt via Wizard machst und die Dateien darin zuweist - auch dort kommt bereits der Fehler.

hoika 26. Nov 2019 14:58

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Hallo,
was zeigt denn der Debugger an?

Baue ihn mal dynamisch en.

var
S: AnsiString;
S:= '.\root.pem';
RootCertFile:= S;

MessageBox(.. PChar(RootCertFile))

wjjw 26. Nov 2019 18:03

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Hab das Problem gefunden (im Delphi Code: IdSSLOpenSSL.by_Indy_unicode_file_ctrl(...))
Kann mir diesen Code jemand erklären?
Und das Lustige ist, das es der Programmierer sogar kommentiert hat.. :D

Delphi-Quellcode:
function by_Indy_unicode_file_ctrl(ctx: PX509_LOOKUP; cmd: TIdC_INT;
  const argc: PAnsiChar; argl: TIdC_LONG; out ret: PAnsiChar): TIdC_INT; cdecl;
var
  LOk: TIdC_INT;
  LFileName: String;
begin
  LOk := 0;
  case cmd of
    X509_L_FILE_LOAD:
      begin
        case argl of
          X509_FILETYPE_DEFAULT:
            begin
              LFileName := GetEnvironmentVariable
                (String(X509_get_default_cert_file_env));
              if LFileName <> '' then begin
                LOk := Ord(Indy_unicode_X509_load_cert_crl_file(ctx, LFileName,
                  X509_FILETYPE_PEM) <> 0);
              end else begin
                LOk := Ord(Indy_unicode_X509_load_cert_crl_file(ctx,
                  String(X509_get_default_cert_file), X509_FILETYPE_PEM) <> 0);
              end;
              if LOk = 0 then begin
                X509err(X509_F_BY_FILE_CTRL, X509_R_LOADING_DEFAULTS);
              end;
            end;
          X509_FILETYPE_PEM:
            begin
              // Note that typecasting an AnsiChar as a WideChar is normally a crazy
              // thing to do. The thing is that the OpenSSL API is based on ASCII or
              // UTF8, not Unicode and we are writing this just for Unicode filenames.

              LFileName := PWideChar(argc);    // <==================== HIER !!!!????? Warum nicht einfach LFileName :=argc;  

              LOk := Ord(Indy_unicode_X509_load_cert_crl_file(ctx, LFileName,
                X509_FILETYPE_PEM) <> 0);
            end;
        else
          LFileName := PWideChar(argc);
          LOk := Ord(Indy_unicode_X509_load_cert_file(ctx, LFileName, TIdC_INT(argl)) <> 0);
        end;
      end;
  end;
  Result := LOk;
end;

braunbaer 28. Nov 2019 08:43

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Servus Werner,

du hast mir grad den Tag gerettet :lol:
Ohne Cast funktioniert es!!!

Danke und Gruß aus dem Bregenzerwald

braunbaer 28. Nov 2019 08:50

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Zur Info:

Diese Datei
C:\Program Files (x86)\Embarcadero\Studio\20.0\source\Indy10\Protoc ols\IdSSLOpenSSL.pas
und diese INC Datei
C:\Program Files (x86)\Embarcadero\Studio\20.0\source\Indy10\Protoc ols\IdCompilerDefines.inc
in dein Projektverzeichnis kopieren.

Die IdSSLOpenSSL in dein Projekt aufnehmen
In Zeile 1245 das Casting entfernen:
Delphi-Quellcode:
LFileName := argc;// PWideChar(argc);


schon funktioniert es.

wjjw 28. Nov 2019 16:43

AW: Datasnap/SSL/Zertifikate mit Delphi 10.3.3
 
Ja so funktioniert es..
Komischerweise ist in Delphi 10.3.2 der selbe Code und es funktioniert - aber vielleicht ist die Cast-Funktion selbst "Schuld" bzw. wurde verändert.

Ein Problem gelöst - auf zum Nächsten:
Übertrage Dateien ohne Probleme - jedoch jetzt beim Übertragen größerer Dateien (>32MB) bekomme ich Fehler - Out of Memory.
Hat jemand Upload/Download Methoden für DataSnap REST Server?? :?:


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