Wie nutze ich den NegotiateStream richtig

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Wie nutze ich den NegotiateStream richtig

    Hallo Community

    Ich möchte eine kleine Server-Client-Anwendung die ich zu meinen Vb.Net-Anfangszeiten geschrieben habe aktualisieren. Damals gabs das Async/Await noch nicht, oder es war mir nicht offensichtlich, dass es das gibt.

    Es handelt sich um eine kleine Tcp-Anwendung, die Daten gegenseitig austauschen können. Eigentlich ist es nur der Server der den Clients (mehrere Clients) Daten zukommen lässt, jedoch kann der Server die Clients etwas fragen, und somit muss der Client auch eine Message bzw. Feedback an den Server zusenden können.

    Damals habe ich eine reine Tcp-Anwendung gemacht, und möchte nun den NegotiateStream miteinbeziehen. Ich gehe davon aus, dass der immer noch aktuell ist.

    Die Microsoftseite habe ich schon mal angeschaut.
    docs.microsoft.com/de-de/dotne….security.negotiatestream

    Was mir aber nicht ganz klar ist ob der NegotiateStream für die ständige Kommunikation zwischen Server und Clients vorgesehen ist, also ob der Stream während der ganzen Lebendauer des Clients offengehalten werden darf. Oder nutzt man den NegotiateStream nur ganz am Anfang für das gegenseitige verbinden? In diesem Falle nützt mir der NegotiateStream nichts, und ich werde bei eine ganz normale Tcp-Anwendung bleiben, und die Message kurz verkrypten.

    Der SslStream möchte ich eigentlich nicht verwenden, da mindestens ein temporäres Zertifikat gefordert wird, dass ich sicher auch selber machen könnte, aber mir sind grundlegend die Umstände einfach zu gross. Es sollen wirklich nur Daten hin (und her) gesendet werden, und das könnte ich auch notfalls selber kurz verkrypten.

    EDIT: Sorry ich habe den Thread aus versehen im falschen Register (Datenbankprogrammierung) geöffnet. Kann jemand von der Moderation den Thread ins "Internet- und Netzwerkprogrammierung" verschieben. Danke.


    Danke für die Antworten.

    Freundliche Grüsse

    exc-jdbi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „exc-jdbi“ ()

    Hallo @Mono

    Die Frage ist bei mir immer noch pendent. Und ja. Es kann vorkommen das über mehrere Minuten ein ständiger Kommunikationsaustausch ist, wobei hauptsächlich der Server Daten an den Client sendet.

    Ich habe das zwar jetzt sehr einfach und anders gelöst, und zwar wieder über TCP. Sofern der Server irgendwelche Anfrage an den Client hat, generiert der Client ein asymetrisches Schlüsselpaar und sendet den öffentlichen Key an den Server, der wiederum verkryptet sein Anliegen an den Client und sendet gleichzeitig seinen öffentlichen Schlüssel.

    Genau so ist es auch in der Gegenrichtung, wobei wie erwähnt, der Client sehr selten was vom Server will. Die TCP-Verbindung bleibt immer offen, bis einer der beiden die Verbindung kappt. Der Client kann sich jederzeit wieder neu Verbinden sofern es gewünscht wird.

    Ich habe mich ganz ehrlich gesagt nicht mehr weiter mit dem NegotiateStream befasst, müsste es also nochmals anschauen, wie ich die Umsetzung machen würde. Aber soviel es mir recht ist wird der Stream vom TcpClient in den NegotiateStream miteinbezogen, was auch wieder mit einem Using-Block realisiert werden kann. Aber genau da ist meine Frage, muss ich die Instanz von NegotiateStream immer wieder disposen, oder kann ich den offen lassen. (Auch für mehrere Clients und Instanzen über eine längere Zeit).

    Freundliche Grüsse

    exc-jdbi
    Der sitzt ja nur on Top auf dem Networkstream. Daher benötigt der Negotiate keine Sonderbehandlung, er verwendet den darunterliegenden Stream.
    Es gibt da sogar die Option den darunterliegendenen Stream auch zu Disposen wenn du den NegotiateStream disposed oder eben nicht.


    Ich vermute ja mal das du irgendeinen KeepAlive Mechanismus hast bzw. einen reconnect Teil. Denn bei Networkstreams die durchgehend offen sind kann es natürlich durch Netzwerkprobleme etc zu Verbindungsabbrüchen kommen.
    Das ist meine Signatur und sie wird wunderbar sein!
    Im Moment läuft es einwandfrei und nur auf Localhost.

    Ich werde mich wieder mal mit NegotiateStream und SSLStream befassen. Beide sind sicher sehr gute Werkzeuge. Möchte mich aber zuerst tiefgründiger damit beschäftigen, bevor ich sie irgendwie einsetze.

    Ich belass mein Programm mal so wie ich es gemacht habe, auch wenn es noch nicht perfekt ist. Werde immer wieder mal ein paar Optimierungen daran machen und auch neue Sachen ausprobieren.

    Danke dir für die Antwort.

    Freundliche Grüsse

    exc-jdbi