Я борюсь с аутентификацией сервера с помощью функции AuthenticateAsServer()
в .NET Core 5.0. У меня есть защищенный HTTPS веб-сайт с сертификатом, подписанным CA, к которому я получил закрытый ключ, и закрытый ключ связан с сертификатом на сервере, на котором я запускаю приложение .NET (не тот же компьютер, на котором размещен веб-сайт, если это имеет значение). Причина, по которой я пытаюсь это сделать, заключается в том, чтобы снова заставить WebSockets работать (в настоящее время я могу заставить их работать только по HTTP). Внутреннее исключение, которое я получаю:
При обработке сертификата произошла неизвестная ошибка
Я получаю это каждый раз, когда клиент загружает страницу (клиент WebSocket пытается подключиться автоматически после загрузки). Вот как я загружаю сертификат:
public static X509Certificate2 getCertBySNumber(string SerialNumber)
{
X509Certificate2 Certificate = new X509Certificate2();
try
{
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
try
{
X509Certificate2Collection Results = store.Certificates.Find(X509FindType.FindBySerialNumber, SerialNumber, false);
foreach (X509Certificate2 cert in Results)
{
Console.WriteLine(cert.GetExpirationDateString());
}
if (Results.Count == 0)
{
throw new Exception("Unable to find certificate!");
}
else
{
Certificate = Results[0];
Console.WriteLine("found a certificate " + Certificate.SerialNumber + " private key: " + Certificate.HasPrivateKey + " verified: " + Certificate.Verify()); //OUTPUT: found a certificate XXXX3FAF3A57F7D69XXXX34D3CD82B private key: True verified: True
}
}
finally
{
store.Close();
}
return Certificate;
}
catch (Exception e)
{
Console.WriteLine("EXCEPTION: {0}", e.Message);
return null;
}
}
Вот как я принимаю входящее соединение и пытаюсь аутентифицировать сервер
TcpListener listener = new TcpListener(port);
listener.Start();
X509Certificate2 Certificate = getCertBySNumber("XXXX3FAF3A57F7D69XXXX34D3CD82B");
try
{
while (true)
{
Console.WriteLine("Waiting for a connection...");
TcpClient client= listener.AcceptTcpClient();
SslStream sslStream = new SslStream(client.GetStream(), false);
try
{
sslStream.AuthenticateAsServer(Certificate, false, SslProtocols.Tls12, false);//<-- error here
Console.WriteLine("success");
}
}
}
Кто-нибудь сталкивался с этой проблемой раньше? Я попытался углубиться в исключение, но не получил никакой полезной информации. Любая помощь приветствуется!