![]() |
Authentifizierung im TCP/IP Netzwerk
Hallo DPler! :hi:
Da ich bei meinen Suchen im Internet nicht passendes gefunden habe, bin ich nun dabei mir ein eigenes Protokoll für mein Vorhaben zu schreiben. Das Protokoll ist für die Kommunikation von einem im Webserver laufendem PHP Prozess und einem als User root laufendem Python-Programm. Die Kommunikation der beiden Komponenten (PHP & Python) ging schon immer über sogenannte Unix-Sockets. Diese werden nicht wie bei TCP/IP über Host und Port identifiziert, sondern über Dateien. Logische Konsequenz daraus ist, dass die Sockets nur auf der gleichen Maschine kommunizieren können. Das muss ich jetzt ändern, da wir demnächst weitere Server dazu bekommen. Funktionieren tut das ganze schon, da das Protokoll unabhängig von der darunter liegenden Schicht ist. Allerdings gibt es nun ein Problem mit der Sicherheit. Bei Unix-Sockets hatte ich den Vorteil, dass ich der Socket-Datei einfach entsprechende Rechte (0770) geben konnte uns ihr eine bestimmte Gruppe zuordnete. Alle User in dieser Gruppe hatten damit Zugriff auf das Socket. Unter TCP/IP geht das schlecht. Daher brauche ich eine neue Form der Authentifizierung. Am einfachsten wäre es, einfach ein Passwort im Protokoll mit zu schicken. Ich bin mir aber nicht sicher, ob das so eine gute Idee ist. Der Datenverkehr ist ja auch nicht verschlüsselt. Und jetzt zur eigentlich Frage: Wie mache ich die Authentifizierung am besten und sichersten? Hoffe ihr habt's verstanden, ansonsten natürlich einfach nachfragen! Danke im Voraus! :) Mit freundlichen Grüßen, Valle |
Re: Authentifizierung im TCP/IP Netzwerk
Da kann man viel bis wenig machen!
* einfach user/pw übertragen * challange & response verfahren * zertifikat basiert verfahren und das alles mit und ohne verschlüsselung. |
Re: Authentifizierung im TCP/IP Netzwerk
Hallo generic,
erstmal Danke für die Antwort! :) Zertifikat-basiert klingt toll, finde ich. Bisher habe ich ziemlich wenig Ahnung von der Materie, was also eine ideale Möglichkeit wäre sich damit mal zu beschäftigen. Kannst du mir einige Stichworte oder so nennen, damit ich ausreichend Informationsstoff zum googlen habe? Wäre SSL in diesem Zusammenhang eine Wahl? Mit freundlichen Grüßen, Valle |
Re: Authentifizierung im TCP/IP Netzwerk
SSL kann diese Funktion auch abdecken.
Dann schnapp dir am besten die aktuellen Indy's und die OpenSSL Dlls und dann passt das schon. Ich selbst habe sowas auch noch nicht programmiert. Habe bis jetzt immer den Webserver die Sache übernehmen lassen. Was ist ich allerdings mal gemacht habe, war eine Domänenauthentifierung über TCP. Allerdings benötigst du dafür ein Active-Directory. Das ist dann das Thema SSPI. |
Re: Authentifizierung im TCP/IP Netzwerk
Zitat:
Zitat:
Zitat:
Mit freundlichen Grüßen, Valle |
Re: Authentifizierung im TCP/IP Netzwerk
Na gut dann halt nicht Delphi in einem Delphi Forum.
Wir Delphianer können ALLES! Manche Dinge nur nicht besonders gut. Aus Py halte ich mich mal raus, aber PHP sollte nicht so das Problem sein. Dafür gibt es ja: ![]() |
Re: Authentifizierung im TCP/IP Netzwerk
Eigentlich müsste das doch mit beidseitig authentifiziertem SSL gehen, d.h. Server und Client haben beide ein Zertifikat und weisen sich damit aus. Jetzt ist nur noch die Frage, was für Zertifikate du verwendest. So wie es aussieht, müsstest du eigentlich deine eigenen Zertifikate erstellen können (d.h. du bastelst dir selbst eine Authority, der du dann per se vertraust). Die Frage ist dabei natürlich, inwiefern die SSL-Bibliothek deines Vertrauens dir erlaubt, selbst zu entscheiden, ob ein Zertifikat gültig ist.
|
Re: Authentifizierung im TCP/IP Netzwerk
Zitat:
Zitat:
Edit:// Es wird wohl doch eher GnuTLS. Zitat:
Valle |
Re: Authentifizierung im TCP/IP Netzwerk
Wenn die Übertragung nicht verschlüsselt ist, warum machst du überhaupt eine Authentifizierung?
Wenn sich ein Rechner authentifiziert hat, kann man doch eine man-in-the-middle-Attacke fahren oder wird das irgendwie durch dein Protokoll verhindert? Wenn sich deine Sockets per Datei identifizieren, könntest du diese Dateien doch per ssh/scp übertragen. So ganz habe ich die Dateien noch nicht verstanden. Wenn ein Rechner mit dem Server redet, haben dann beide die gleiche Datei oder ist das etwas in Richtung public/private Key wie bei ssh? Wenn ein neuer Rechner kommt, könnte der doch eine Datei per scp in einen nur-schreiben-Ordner im Server legen, in der dann das Passwort und ID steht. Dann könnte der Server dem Rechner wieder per scp einen passenden Schlüssel/Authentifizierung, sonstwas schicken, mit der sich dann der Rechner von da an melden kann. Nach einer gewissen Zeit kann dann der Server dieses Zertifikat wieder ungueltig machen und der Client muss sich wieder neu anmelden. Und ein Pythonscript als root? Da musst du schon gut auf deine Rechte aufpassen, nicht dass dir jemand ein exec('rm -rf') (oder ist das Java?) reinschreibt : ) Also zusammengefasst: schau dir mal das public-Key anmelden per ssh an, damit müsstest du das eigentlich hinbekommen können. Aber beschreib vielleicht mal ein bischen genauer, wer wann mit welchem Server reden muss. |
Re: Authentifizierung im TCP/IP Netzwerk
Zitat:
Zitat:
![]() Letztendlich ist das aber auch irrelevant, da das ja nun geändert wird. Zitat:
Zitat:
Zitat:
Danke für deine Hilfe! :) Mit freundlichen Grüßen, Valle |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz