Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateien von einem virtuellen Server holen (https://www.delphipraxis.net/207810-dateien-von-einem-virtuellen-server-holen.html)

zeras 5. Mai 2021 17:08

Dateien von einem virtuellen Server holen
 
Ich habe eine Anwendung, die Daten visualisiert. Dazu werden Dateien ausgelesen, die sich im Moment auf demselben Rechner befinden.
Dies soll geändert werden, damit man den Speicherort der Dateien nicht direkt sieht.
Laut meiner IT soll ich ein Programm schreiben, welches dann als Dienst auf einer VM läuft und die Daten dem Hauptrogramm zur Verfügung stellt.
Hier nochmals ein wenig detaillierter.
Ich habe einen Rechner 1, der die Daten visualisiert, die der Dienst auf dem 2. Rechner bereitstellen könnte.
Die Datei, die bereitgestellt wird, ist zwischen 10 und 20 MB groß.
Nun müsste wahrscheinlich der Rechner 1 über ein Protokoll (welches?) die Daten beim Rechner 2 (VM) anfragen und der Rechner 2 müsste diese an Rechner 1 übertragen oder irgendwie bereitstellen, damit der Rechner 1 diese abholen kann.
Leider habe ich mit Diensten und der Übertragung von Dateien noch nicht gearbeitet.
Wie könnte man so etwas programmieren?

himitsu 5. Mai 2021 17:28

AW: Dateien von einem virtuellen Server holen
 
Nja, was für Protokolle du nutzt .... da hast'e die Qual der Wahl.

Bei uns läuft es über DataSnap (mit entsprechenden Methoden, z.B. ReadFile, WriteFile usw.), wo die ServerMethoden das als TStream (TFileStream/TMemoryStream) im Result zurückliefern.
Ähnlich DataSnap gibt es auch andere Frameworks, wo man "Funktionen" aufrufen kann und sich das Framework um alles kümmert. (z.B. Hier im Forum suchenmORMot wird hier immer beworben)

Oder ein REST-Server, weil ist hipp, cool und machen alle so (z.B. ID rein und Base64-kodiert im JSON die Datei zurück)
Hatte ich jetzt bei uns im DataSnap nachgerüstet, also zusätzlich REST als Protokoll für den Funktionsaufruf, damit auch unsere WebAnwendung auf Dateien zugreifen kann,
aber da geht auch jede andere REST-Implementation. (bei uns einfach auf's DataSnap drauf, um im Server das nur einmal implementiert zu haben, aber mit zwei Schnittstellen nach außen)

Oder ein richtiges FileProtokol, wie FTP (TIdFTPServer), WebDAV oder Dergleichen.
Das kann im Server auch "virtuell" sein und muß nicht direkt auf ein Verzeichnis gehn. Im "Pfad" steht dann quasi die ID/Dateiname/Sonstwas, um die entsprechende Datei/Daten von irgendwo zu holen.

Auch ein HTTP-Server (TIdHTTPServer) wäre möglich, ähnlich dem FTP. (Pfad -> Datei)

Oder ganz billig TCP/IP (TIdTCPServer), aber hier ist alles "ein" Stream und du mußt dich dann selber um alles kümmern
(Authentifizierung, Behandlung der Daten im IN/OUT-Stream, also ID/Pfad übergeben und Dateihinhalt zurück, usw.),
also deine Daten entsprechend zu kodieren und drüben wieder einzulesen und womöglich während einer Anfrage mehrer Dateien übertragen.
(man könnte aber auch nach jeder Übertragung die Verbindung trennen)

Oder ...


Aber wenn man ein "ordentliches" Framework genutzt wird, dann nimmt es dir erstmal viel Arbeit ab, und du hast später auch die Möglichkeit das für andere/weitere Dinge zu nutzen, und nicht nur für Dateien.




Ob Rechner/Server, VM, Docker oder sonstwo, ist egal. Dein Server wird einfach nur mit der entsprechenden IP oder "ComputerNamen" angesprochen.

mytbo 5. Mai 2021 18:01

AW: Dateien von einem virtuellen Server holen
 
Ich bringe mal, wie himitsu, das Open Source Framework mORMot ins Spiel. mORMot ist von D7 bis 10.4 verfügbar. Den Download findest du hier. Beispiele findest du hier.

mORMot musst du nicht installierten. Es reicht aus, die entsprechenden Bibliothekspfade einzufügen. Die eigentliche Arbeit ist mit mORMot oft schnell erledigt, das Problem dürfte sein, dich in mORMot einzuarbeiten. Es steht eine ausführliche Hilfe, viele Beispiele und ein freundliches Forum zur Verfügung.

Bei einer neuen Anwendung würde ich mORMot2 empfehlen. Dazu gibt es zur Zeit noch keine Hilfe und auch keine Beispiele. Trotzdem hier der Link zum GitHub Repro.

Bis bald...
Thomas

zeras 18. Mai 2021 17:03

AW: Dateien von einem virtuellen Server holen
 
Zitat:

Zitat von himitsu (Beitrag 1488665)
Auch ein HTTP-Server (TIdHTTPServer) wäre möglich, ähnlich dem FTP. (Pfad -> Datei)

Danke für die Hinweise.

Ich habe mir einmal einige Beispiele vom HTTPServer (Indy) angeschaut und ein wenig abgewandelt. Erste Tests sind erfolgreich, nur soll ich seitens IT Vorgabe anstelle HTTP dann doch HTTPS nutzen.
Das werde ich bestimmt auch noch hinbekommen.

jobo 18. Mai 2021 19:00

AW: Dateien von einem virtuellen Server holen
 
HTTP(S) wäre wohl naheliegend, Millionen Webserver arbeiten so für die Browser / Clients.
Das könnte man auch per Scripting automatisieren / lokal cachen, so dass am Programm vielleicht nur minimal geändert werden muss.

Am wichtigsten scheint mir hier die Frage, ob es ein LAN Betrieb ist oder WAN.
Und dementsprechend müsste man für eine Authentifizierung des Client sorgen / verhindern, dass jemand die Quelladressen belauscht bzw. einfach so abgreifen kann. Darum scheint es ja zu gehen.

HTTPS wäre wahrscheinlich ein Fall für letsEncrypt, wobei das im LAN nicht geht. Oder der Server muss für Einrichtung und Refresh dann von Außen erreichbar sein.

zeras 18. Mai 2021 19:15

AW: Dateien von einem virtuellen Server holen
 
Zitat:

Zitat von jobo (Beitrag 1489704)
Am wichtigsten scheint mir hier die Frage, ob es ein LAN Betrieb ist oder WAN.
Und dementsprechend müsste man für eine Authentifizierung des Client sorgen / verhindern, dass jemand die Quelladressen belauscht bzw. einfach so abgreifen kann. Darum scheint es ja zu gehen.

Derzeit soll es bei uns im Intranet laufen. Ob der Bedarf kommt, diese Daten auch von außerhalb downloaden zu können, steht noch nicht fest.

Wegen der Authentifizierung habe ich aber noch keine Erfahrungen. Ich müsste doch im Client irgendwo ein Zertifikat ablegen oder?


Zitat:

Zitat von jobo (Beitrag 1489704)
HTTPS wäre wahrscheinlich ein Fall für letsEncrypt, wobei das im LAN nicht geht. Oder der Server muss für Einrichtung und Refresh dann von Außen erreichbar sein.

In der Firma müssten ja höchstwahrscheinlich Zertifikate existieren. Vielleicht kann ich diese nehmen.

jobo 18. Mai 2021 22:25

AW: Dateien von einem virtuellen Server holen
 
Zitat:

Zitat von zeras (Beitrag 1489706)

Wegen der Authentifizierung habe ich aber noch keine Erfahrungen. Ich müsste doch im Client irgendwo ein Zertifikat ablegen oder?

In der Firma müssten ja höchstwahrscheinlich Zertifikate existieren. Vielleicht kann ich diese nehmen.

Eine Authentifizierung hat nichts mit Zertifkaten zu tun. Du musst einen solchen Mechanismus intern in der Anwendung bauen, wie er auf vielen Webseiten interaktiv verwendet wird, z.B. hier in DP, Benutzeranmeldung. Da das System ja die Datenquelle verschleiern soll, würde man aber kaum eine interaktive Benutzeranmeldung verwenden. Dafür gibt es bestimmt Komponenten in Delphi.
Die HTTPS Geschichte kannst Du einfach Deiner IT überlassen, Dich interessieren nur URL, worüber die Dateien abgerufen werden. Wenn es HTTPS sein soll, dann muss die IT das regeln. Dein Server Programm stellt ja erstmal nur über HTTP die Dateien bereit. Je nach Konfiguration liefert der Webserver per HTTP oder HTTPS oder beidem aus.

himitsu 18. Mai 2021 22:40

AW: Dateien von einem virtuellen Server holen
 
TIdHTTPServer ist selbst der Webserver.
Aber ja, man kann auch über einen anderen Webserver HTTP/HTTPS laufen lassen und es serverintern ans HTTP des Delphi-Webserver durchreichen.


Selbst noch nicht gemacht, aber ich denke mal HTTPS würde so gehn:
> TIdHTTPServer.IOHandler und dort z.B. einen TIdServerIOHandlerSSLOpenSSL dran

Und falls auch ein Delphi-Client existiert, dann TIdHTTP vermutlich mit TIdSSLIOHandlerSocketOpenSSL. (wie es beim neuen TNetHTTPClient geht, noch weniger Ahnung)



Authentication:
https://de.wikipedia.org/wiki/HTTP-Authentifizierung

* schau mal was TIdHTTPServer.OnParseAuthentication macht
* aber spätestens in TIdHTTPServer.OnCommandGet kannst in ARequestInfo nochmal den Username+Passwort der aktuellen Anfrage auslesen/prüfen

* bei TIdHTTP siehe OnAuthorization und OnSelectAuthorization (z.B. mit TIdBasicAuthentication)

Schade, dass es nicht sowas wie bei den REST-Komponenten gibt: also TSimpleAuthenticator/THTTPBasicAuthenticator/TOAuth1Authenticator/TOAuth2Authenticator, welche man anhängen kann.

zeras 21. Mai 2021 12:55

AW: Dateien von einem virtuellen Server holen
 
Ich habe jetzt von unserer IT folgendes bekommen:

xxxxx.cer – Das ist das Webserverzertifikat als solches
Issuca.cer - Das ist das Zertifikate der immediate-CA
Rootca.cer - Das ist das Zertifikat der Root-CA
xx.key - Das ist der private Key

Reichen diese Dateien für HTTPS aus?
Kommen die alle in die Routinen vom HTTPServer?
Man sagte dass ich auch den Zertifikatsspeicher von Windows auslesen könne. Da habe ich aber noch gar keine Beispiele gefunden.

zeras 24. Mai 2021 19:28

AW: Dateien von einem virtuellen Server holen
 
Zitat:

Zitat von zeras (Beitrag 1489909)
Ich habe jetzt von unserer IT folgendes bekommen:

xxxxx.cer – Das ist das Webserverzertifikat als solches
Issuca.cer - Das ist das Zertifikate der immediate-CA
Rootca.cer - Das ist das Zertifikat der Root-CA
xx.key - Das ist der private Key

Reichen diese Dateien für HTTPS aus?
Kommen die alle in die Routinen vom HTTPServer?
Man sagte dass ich auch den Zertifikatsspeicher von Windows auslesen könne. Da habe ich aber noch gar keine Beispiele gefunden.

Ich habe nun ein wenig weiter geforscht. HTTP geht, ich muss aber HTTPS nutzen.
Genutzt habe ich dann IdHTTPServer1 und dann im IOHandler dann IdServerIOHandlerSSLOpenSSL1 gesetzt. Dann soll ich noch die beiden DLL von Indy ins Programmverzeichnis kopieren. Soweit verstehe ich das.
Was aber mit den o.g. Dateien?
SSLOption.KeyFile -> xx.key
SSLOption.RootCertFile -> Rootca.cer
SSLOption.CertFile -> Issuca.cer oder xxxxx.cer ???
Wenn ich das xxxxx.cer anklicke, sehe ich oberhalb dann das Issuca.cer und dann ganz oben das Rootca.cer. Damit habe ich 3 Zertifikate, aber nur 2 Einträge in den SSLOptions.
Benötige ich alle 3 Zertifikate oder nur 2?


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