AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Authentifizierung im TCP/IP Netzwerk
Thema durchsuchen
Ansicht
Themen-Optionen

Authentifizierung im TCP/IP Netzwerk

Ein Thema von Valle · begonnen am 13. Aug 2009 · letzter Beitrag vom 20. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#1

Authentifizierung im TCP/IP Netzwerk

  Alt 13. Aug 2009, 20:24
Hallo DPler!

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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#2

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 13. Aug 2009, 21:15
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#3

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 13. Aug 2009, 23:18
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
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#4

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 10:23
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#5

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 12:11
Zitat von generic:
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 benutze Python und PHP.

Zitat von generic:
Ich selbst habe sowas auch noch nicht programmiert. Habe bis jetzt immer den Webserver die Sache übernehmen lassen.
Der Webserver ist in dem Fall gar nicht beteiligt. Lediglich der PHP Prozess wird vom Webserver ausgeführt, das hilft mir aber auch nicht weiter. Letztendlich muss ich das selbst machen.

Zitat von generic:
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.
Und ich benutze Linux.

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 12:46
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:
http://de.php.net/manual/en/book.openssl.php
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 12:58
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.
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#8

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 13:06
Zitat von generic:
Wir Delphianer können ALLES!
Deswegen bin ich doch hier.

Zitat von Apollonius:
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.
Ich denke mal die erste Wahl ist wohl OpenSSL. Liegt wohl auch daran, dass ich bisher noch von nichts anderem gehört habe. Ansonsten Danke für die Info, dann wird's jetzt wohl (endlich) mal Zeit mich in die Materie einzuarbeiten. Bisher konnte ich mich da immer schön von fern halten.

Edit:// Es wird wohl doch eher GnuTLS.
Zitat von Wikipedia:
Zusätzlich zu den meisten in OpenSSL implementierten Funktionen unterstützt GnuTLS TLSv1.1, zlib- und LZO-Kompression, Authentifizierung über SRP, X.509- und OpenPGP-Keys.
Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 14:48
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.
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#10

Re: Authentifizierung im TCP/IP Netzwerk

  Alt 14. Aug 2009, 15:02
Zitat von Nikolas:
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?
Das versuche ich ja gerade zu ändern. Wobei ich mir nicht sicher bin, ob ich einer Man-in-the-Middle überhaupt vorbeugen muss, das die Server in versch. Rechenzentren stehen und nur über das Internet kommunizieren.

Zitat von Nikolas:
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.
Nein, das funktioniert so nicht. Stell dir einfach vor es ist wie TCP/IP. Statt IP und Port gibst du allerdings einen einfachen Dateipfad an. Schau einfach mal hier, das ist ja nicht meine Erfindung.

Letztendlich ist das aber auch irrelevant, da das ja nun geändert wird.

Zitat von Nikolas:
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 : )
Python ist es jedenfalls nicht. Dennoch hat das durchaus seinen Sinn, bzw. das ist ja der Grund, warum ich das ganze brauche. Ich könnte natürlich auch einfach PHP als root laufen lassen (da es die entsprechenden Rechte braucht), aber das ist ja nun noch 100 Mal hirnloser. Also lieber eine Kommunikation über's Netzwerk und nur das machen lassen, was es es soll.

Zitat von Nikolas:
Also zusammengefasst: schau dir mal das public-Key anmelden per ssh an, damit müsstest du das eigentlich hinbekommen können.
Wie schon gesagt, das ist nicht das was ich will. Wie man Dateien per scp kopiert und sich per SSH über Passwort oder Public-Key einloggt weiß ich schon länger.

Zitat von Nikolas:
Aber beschreib vielleicht mal ein bischen genauer, wer wann mit welchem Server reden muss.
Ein PHP-Script soll sich über das Internet (TCP/IP) bei einen Python-Programm authentifizieren. Die beiden sollen ein wenig kommunizieren, anschließend macht mein Python-Programm etwas als root und dann kann das PHP-Script bei seiner Arbeit weiter machen. Und weil ich eben noch nie eine Authentifizierung programmiert habe, dachte ich, ich frage einfach mal nach.

Danke für deine Hilfe!

Mit freundlichen Grüßen,

Valle
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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