AuthenticateAsServer() Произошла неизвестная ошибка при обработке сертификата

Я борюсь с аутентификацией сервера с помощью функции 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");
            }
        }
        }

Кто-нибудь сталкивался с этой проблемой раньше? Я попытался углубиться в исключение, но не получил никакой полезной информации. Любая помощь приветствуется!


person klacek139    schedule 26.12.2020    source источник