SslStream (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. Та же проблема.
Я тестирую 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. Та же проблема.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Я хочу зашифровать и расшифровать AES-GCM на языке C#, но не могу расшифровать
Anonymous » » в форуме C# - 0 Ответы
- 44 Просмотры
-
Последнее сообщение Anonymous
-