C# Peer-To-Peer Chat mit SSL

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Tech-Essen

Mitglied
Hallo,
ich möchte einen Peer-To-Peer Chat programmieren, der mit SSL, oder ähnlichem, gesichert ist. Dabei soll man von einer IP zu einer anderen IP, an einen festen Port, (kurze) Textnachrichten senden. Wenn jemand eine andere Verschlüsselungsweise empfehlen kann, kann ich diese auch gerne verwenden! Einen zentralen Server soll es nicht geben und Gruppenchats damit auch nicht.

-> Bei SSL habe ich immer die Meldung bekommen, dass das Zertifikat ungültig ist. (Zertifikat erstellt mit https://bit.ly/2KtWxtP )

Würde mich über Hilfe freuen!
 
Meinst du mit ungültig das kein Vertrauen hergestellt werden konnte?

das schon probiert?
Code:
ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, ssl) => true;
sprich Callback ServerCertificateValidationCallback angeben und auf deiner Seite das Server Zertifikat erlauben.
 
Meinst du mit ungültig das kein Vertrauen hergestellt werden konnte?

das schon probiert?
Code:
ServicePointManager.ServerCertificateValidationCallback += (s, cert, chain, ssl) => true;
sprich Callback ServerCertificateValidationCallback angeben und auf deiner Seite das Server Zertifikat erlauben.
DANKE! Das hat mir sehr geholfen! Mit
Code:
SslStream sslStream = new SslStream(Client.GetStream(), false, (s, cert, chain, ssl) => true, null);
hat es jetzt funktioniert!
 
Wenn ich das richtig erahne (ohne die API zu kennen), dann akzeptierst du damit alle möglichen Zertifikate. Sprich SSL (bzw. TLS) bietet dir hier keine Authentizität mehr. Jeder könnte einen MitM-Angriff starten und als gültiger Server angesehen werden.
sprich Callback ServerCertificateValidationCallback angeben und auf deiner Seite das Server Zertifikat erlauben.
Wie Spyke hier richtig erwähnt hat, solltest du nur dein Zertifikat erlauben.
 
Wenn ich das richtig erahne (ohne die API zu kennen), dann akzeptierst du damit alle möglichen Zertifikate. Sprich SSL (bzw. TLS) bietet dir hier keine Authentizität mehr. Jeder könnte einen MitM-Angriff starten und als gültiger Server angesehen werden.

Wie Spyke hier richtig erwähnt hat, solltest du nur dein Zertifikat erlauben.
Wie kann man es denn dann überprüfen?
 
Ich sehe zwei Möglichkeiten:

  • Du fügst dein Zertifikat temporär zu den erlaubten hinzu, und zwar nur innerhalb des Sprach-Frameworks, nicht im Zertifikatsspeicher des OS. Ich bin mir nicht sicher, ob das in .NET möglich ist.

    Problem: Alle Anfragen, die zu dem Zeitpunkt von deinem Programm geschehen, sehen das Zertifikat als 'erlaubt' an.
  • Besser Möglichkeit: Du gibst den ServerCertificateValidationCallback für eine konkrete Anfrage an und prüfst (d.h. nicht "return true") Zertifikatsgleichheit mit deinem selbst ausgestellten Zertifikat: Using a self-signed certificate with .NET's HttpWebRequest/Response.
 
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…

Neue Beiträge

Zurück