Ошибка при обращении SslStream

120
06 августа 2019, 00:30

Вот Ошибка:
Эта операция допустима только при использовании контекста, подлинность которого успешно подтверждена. Вот Код Сервера:

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));
Answer 1

Нельзя просто начать читать/писать с 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

READ ALSO
RunOnUiTread() вылетает приложение

RunOnUiTread() вылетает приложение

Проблема с потокамиПытаюсь изменить UI часть путем добавления сообщения к textView5

101
Почему не сообщает о попадании

Почему не сообщает о попадании

подскажите почему не пишет в консоль что попалвот скрипт ` void Update() {

140
Разделение текста на слова по заданным разделителям

Разделение текста на слова по заданным разделителям

Всем привет, есть задача, разделить текст на предложения, а их на слова и потом преобразовать всё в нижний регистрИ все условия вроде выполнены,...

105
Как убрать дублирующиеся товары woocommerce?

Как убрать дублирующиеся товары woocommerce?

Требуется убрать повторяющийся список в самом низу страницы - ссылка: shop

123