Вот Ошибка:
Эта операция допустима только при использовании контекста, подлинность которого успешно подтверждена.
Вот Код Сервера:
using System.Net.Security;
internal static SslStream sslStream;
tcpListener = new TcpListener(IPAddress.Any, 8000);
tcpListener.Start();
TcpClient сlient = tcpListener.AcceptTcpClient();
Stream = client.GetStream();
sslStream = new SslStream(Stream);
string message = Console.ReadLine();
byte[] data = Encoding.Unicode.GetBytes(message);
sslStream.Write(data, 0, data.Length);
Код Клиента:
using System.Net.Security;
internal static SslStream sslStream;
client = new TcpClient();
client.Connect("127.0.0.1", 8000);
stream = client.GetStream();
sslStream = new SslStream(stream);
sslStream.AuthenticateAsClient("127.0.0.1");
string message = userName;
byte[] data = new byte[1024];
sslStream.Read(data, 0, data.Length);
Console.WriteLine(Encoding.Unicode.GetString(data, 0, bytes));
Нельзя просто начать читать/писать с SslStream, предварительно нужно вызвать один из методов: AuthenticateAsClient/AuthenticateAsServer. На стороне сервера вы не вызываете ничего, поэтому получаете ошибку.
Что бы всё работало, вам нужно создать/получить сертификат.
Минимальный рабочий пример:
static void Main(string[] args)
{
var serverThread = new Thread(() =>
{
var server = new TcpListener(IPAddress.Any, 12345);
server.Start();
var client = server.AcceptTcpClient();
var ssl = new SslStream(client.GetStream());
var cert = new X509Certificate2(@"rsa-4096.pfx", "hh87$-Jqo");
ssl.AuthenticateAsServer(cert);
ssl.Write(Encoding.ASCII.GetBytes("Hello world"), 0, 11);
ssl.Flush();
ssl.Close();
server.Stop();
});
var clientThread = new Thread(() =>
{
var client = new TcpClient();
client.Connect(IPAddress.Loopback, 12345);
// последний параметр отключает проверку серверного сертификата
var ssl = new SslStream(client.GetStream(), false, (a, b, c, d) => true);
ssl.AuthenticateAsClient("localhost");
using (var sr = new StreamReader(ssl, Encoding.ASCII))
{
string recivedText = sr.ReadToEnd();
Console.WriteLine(recivedText);
}
});
serverThread.Start();
clientThread.Start();
serverThread.Join();
clientThread.Join();
}
Сертификат для примера: https://github.com/Zergatul/ZergatulLib/blob/master/ConsoleTest/rsa-4096.pfx
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости