Как получить запрошенный целевой хост из SslStream в качестве сервера - PullRequest
0 голосов
/ 27 января 2019

С этим кодом, например:


        private static void OnConnect(IAsyncResult ar)
        {
            var clientConnection = listener.EndAcceptTcpClient(ar);
            listener.BeginAcceptTcpClient(OnConnect, ar.AsyncState);

            try
            {
                // SSL the client
                var clientStream = clientConnection.GetStream();
                var clientSecureStream = new SslStream(clientStream, false);
                clientSecureStream.AuthenticateAsServer(certificate);
                ...
                ...

Я могу успешно установить входящее SSL-соединение. Клиент, подключающийся к этому серверу, указывает целевой хост при аутентификации в качестве клиента: https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslstream.authenticateasclient?view=netframework-4.7.2#System_Net_Security_SslStream_AuthenticateAsClient_System_String_

Как мне получить значение этого целевого хоста в моем коде выше?

Я посмотрел на параметр RemoteCertificateValidationCallback для конструктора SslStream, но Интернет говорит мне, что этот обратный вызов предназначен только для стороны клиента, а не для стороны сервера (я пробовал, а аргумент targetHost всегда пустая строка) .

Я искал здесь и в Интернете, и у меня возникли проблемы с поиском решения ...

Разве SslServer не сможет отправлять разные данные в зависимости от целевого хоста? SslStream просто не поддерживает этот сценарий? Я что-то упускаю из виду?

...