SslStream (C#) проходит аутентификацию, а затем не может расшифровать из-за обработки сертификата.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Гость
 SslStream (C#) проходит аутентификацию, а затем не может расшифровать из-за обработки сертификата.

Сообщение Гость »


Я тестирую SslStream. У меня простой сервер:

static void Main() { X509Certificate2 serverCertificate = GetSslCertificate(); TcpListener serverListener = новый TcpListener(IPAddress.Any, 12345); серверпрослушиватель.Старт(); Console.WriteLine("Сервер ожидает подключения..."); Клиент TcpClient = serverListener.AcceptTcpClient(); Console.WriteLine("Клиент подключен."); используя (SslStream sslStream = новый SslStream(client.GetStream(), false)) { пытаться { sslStream.AuthenticateAsServer(serverCertificate, false, SslProtocols.Tls12, true); буфер байт[] = новый байт[1024]; int bytesRead = sslStream.Read(buffer, 0, buffer.Length); строка полученного сообщения = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine($"Сервер получил: {receivedMessage}"); string responseMessage = "Привет от сервера!"; byte[] responseBuffer = Encoding.UTF8.GetBytes(responseMessage); sslStream.Write(responseBuffer); sslStream.Flush(); Console.WriteLine($"Сервер отправил: {responseMessage}"); } поймать (AuthenticationException ex) { Console.WriteLine($"Исключение аутентификации: {ex.Message}"); } } клиент.Закрыть(); серверпрослушиватель.Стоп(); } частный статический X509Certificate2 GetSslCertificate() { Магазин X509Store = новый X509Store(StoreName.My, StoreLocation.LocalMachine); магазин.Открыть(OpenFlags.ReadOnly); пытаться { X509Certificate2Collection сертификаты = store.Certificates.Find(X509FindType.FindByThumbprint, "d74cb2b...660d", true); если (сертификаты.Количество > 0) { вар сертификат = сертификаты [0]; RSA rsaServerPrivateKey = cert.GetRSAPrivateKey(); сертификат возврата; } еще { throw new Exception($"Сертификат с отпечатком d74cb2bd0866e615b8f5505d31bf10bc94c4660d не найден или закрытый ключ недоступен."); } } окончательно { магазин.Закрыть(); } } Используемый здесь SSL-сертификат представляет собой рабочий рабочий SSL-сертификат. Позволяет экспортировать.

Клиент:

static void Main() { Клиент TcpClient = новый TcpClient("localhost", 12345); Console.WriteLine("Клиент подключен."); используя (SslStream sslStream = новый SslStream(client.GetStream(), false)) { пытаться { sslStream.AuthenticateAsClient("localhost", null, SslProtocols.Tls12, false); string message = "Привет от клиента!"; буфер byte[] = Encoding.UTF8.GetBytes(сообщение); sslStream.Write(буфер); sslStream.Flush(); Console.WriteLine($"Клиент отправил: {сообщение}"); буфер = новый байт[1024]; int bytesRead = sslStream.Read(buffer, 0, buffer.Length); строка полученного сообщения = Encoding.UTF8.GetString(buffer, 0, bytesRead); Console.WriteLine($"Клиент получил: {receivedMessage}"); } поймать (AuthenticationException ex) { Console.WriteLine($"Исключение аутентификации: {ex.Message}"); } } клиент.Закрыть(); } В строке сервера «int bytesRead = sslStream.Read(buffer, 0, buffer.Length);» выдается следующее исключение:

System.IO.IOException HResult=0x80131620 Сообщение=Операция расшифровки не удалась, см. внутреннее исключение. Источник=Система Трассировки стека: в System.Net.Security._SslStream.ProcessReadErrorCode(SecurityStatus errorCode, буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest, Byte[] extraBuffer) в System.Net.Security._SslStream.ProcessFrameBody (Int32 readBytes, буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security._SslStream.StartFrameBody (Int32 readBytes, буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security._SslStream.StartFrameHeader (буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security._SslStream.StartReading (буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security._SslStream.ProcessRead (буфер Byte[], смещение Int32, счетчик Int32, AsyncProtocolRequest asyncRequest) в System.Net.Security.SslStream.Read (буфер Byte[], смещение Int32, счетчик Int32) в Server.Main() в C:\Users\frank\source\repos\.NET Framework\SslStream example\SslStream server\Server.cs:line 37 Внутреннее исключение 1: Win32Exception: при обработке сертификата произошла неизвестная ошибка. HResult: -2146232800

В чем проблема?

Я пытался передать SslProtocols.None. Та же проблема.
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»