| 

.NET C# Java Javascript Exception

2
Ich wollte einen Download-Server-Cluster mit PHP aufbauen. Die Files sollen auf verschiedenen Servern (nicht im selben Netzwerk) zur Verfügung stehen. Ein Server soll dabei die Verwaltung übernehmen. Auf diesem Server sollen die Meta-Informationen zu den Files liegen und auch den Usern zu download angeboten werden.
Der zentrale Server muss dabei mit den anderen Servern im Cluster sprechen um zu erfahren welche Files zur Verfügung stehen oder den Server anzuweisen ein File runter zu laden.
Meine Frage ist nun wie kann man die Kommunikation am besten und einfachsten bewerkstelligen? Es sollte möglichst einfach sein aber auch irgendwie abgesichert werden. Meine Idee war eine JSON oder RPC Schnittstelle. Weiß aber nicht genau wie ich es absichern soll ohne komplizierte Authentifizierung-Mechanismen und Session-Handling.
News:
21.05.2013
blackdog9 113 1 5
2 Antworten
1
Es hängt stark davon ab wie sicher die Kommunikation und die Daten sein müssen.

Am einfachsten wäre, dass die Server ausschließlich über HTTPS kommunizieren. Für die Authentifizierung wird HTTP Basic Authentication verwendet. Der zentrale Server (im folgenden Master genannt) hat für jeden Storage-Server eine eigene Benutzernamen-Passwort-Kombination hinterlegt. Falls die Storage-Server auch den Master kontaktieren sollen, bekommt jeder Storage-Server eigene Zugangsdaten für den Master.

HTTPS dient hier nur zum verschlüsseln der Kommunikation, die Authentifizierung ist im Endeffekt ein shared secret.

Vorteil: Einfach zu implementieren, das meiste ist schon in PHP vorhanden.

Nachteile:
Jeder Server braucht ein SSL-Zertifikat (und wohl auch eine eigene IPv4-Adresse, solange das keine reine IPv6-Geschichte werden soll/kann).
Die Passwort-Datenbank kann in falsche Hände geraten, besonders die vom Master.
Anfällig für die bekannten Angriffe gegen HTTPS, z.B. man-in-the-middle.

Um das ganze etwas sicherer zu machen würde ich die Zertifikate selbst erstellen und mit einem eigenen CA-Zertifikat signieren. Die HTTPS-Kommunikation wird dann gegen dieses CA-Zertifikat geprüft, bevor die HTTP Basic Auth Daten an den Server geschickt werden.

Dass der private key für das CA-Zertifikat auf keinem der Server gespeichert werden darf brauche ich ja nicht extra zu erwähnen.
22.05.2013
phg 1,6k 3
Danke phg. Das mit dem SSL-Zertifikaten scheint einleuchtend.
blackdog9 25.05.2013
0
also ich würde files immer in ner datenbank indizieren filesystem ist da sehr langsam. warum speicherst da nicht die location ab und setzt dann nen proxy für den download auf den jeweiligen server. wenn du da noch ne logik haben möchtest kannst den download auch per php machen. die server untereinander müssen ja nicht wissen was für dateien sie haben. und ob die datei da ist oder nicht reicht ind er datenbank wenn du dann noch nen filecheck machen musst kannst auch vor dem download noch prüfen.
wenn du nur einen schnitstelle für den download haben möchtest kannst die verschiedenen server doch mounten. würd dennoch nen index erstellen. teilweise bietet es sich auch an dateien direkt in ne datenbank in ne nosql zu packen mit nem relationalen db index da gibts auch gute cluster lösungen
01.05.2014
di3 1
Im Prinzip habe ich es so gemacht. Ich hab auf die Nodes ein kleine Server-Komponente gepackt, die per JSON-REST angesprochen werden kann. Damit kann ich z.B. eine Liste der Files anfordern, eindeutige Download-Links generieren oder ein Download auftrag an die Node übergeben. Abgesichert habe ich es über ein X-Auth-Header.
blackdog9 03.05.2014

Stelle deine Php-Frage jetzt!