Каковы различия в безопасности между «NegotiateStream» и «WebRequest» с использованием SPNego / Kerberos? - PullRequest
0 голосов
/ 22 мая 2019

Следующая ссылка описывает традиционную интрасеть клиент-сервер связь через сокет с использованием Kerberos

public class NegotiateStream : System.Net.Security.AuthenticatedStream
... 
// Request authentication.
NetworkStream clientStream = client.GetStream();
NegotiateStream authStream = new NegotiateStream(clientStream, false); 
...
// Pass the NegotiateStream as the AsyncState object 
// so that it is available to the callback delegate.
IAsyncResult ar = authStream.BeginAuthenticateAsClient(
                  new AsyncCallback(EndAuthenticateCallback), authStream);
... 

С другой стороны, IIS имеет возможность аутентификации, используя, как я понимаю, «Kerberos с SPNego поверх SSL» ... (пожалуйста, исправьте мою терминологию!).

В этом режиме SPNego / SSL / Kerberos я не смог заставить работать NegotiateStream, однако мне удалось заставить машинный счет $ работать корректно с WebRequest.AuthenticationLevel, установленным на MutualAuthRequired

enter image description here

Вопрос

  • В чем разница между использованием NegotiateStream и WebRequest.AuthenticationLevel?

  • Какие стандарты (например, MS-SPNG ) используются в каждом решении?

  • Какие подсистемы Windows (SIP, GSS-API и т. Д.) Используются?

Любая информация, которая может помочь мне интегрировать агенты Linux в это решение Kerberos / SpNego, была бы идеальной.

1 Ответ

1 голос
/ 22 мая 2019

Это все о различиях в видах транспорта.Здесь у вас есть два разных транспорта:

  • Двоичный поток произвольных данных
  • Поток HTTP данных в кодировке HTTP

HTTP-запрос и ответ имеют оченьопределенная семантика о том, как вы аутентифицируете запрос, и это через заголовок Authorization: [scheme] [token] и инициируется заголовком ответа WWW-Authenticate: [Scheme], где [scheme] часто Negotiate.

Двоичный поток является произвольным иоставлено разработчику, чтобы он делал все, что он хочет.

Схема Negotiate представляет собой GSS-совместимый пакет, который представляет собой простой протокол, который позволяет клиенту и серверу согласовывать внутренний протокол аутентификации, такой как Kerberos или NTLM.В среде Windows это называется пакетом SSPI.

Пакет, GSS или SSPI, состоит из набора функций, которые запускают или принимают рукопожатия между сторонами, а затем потенциально шифруют / дешифруют данные между двумя.вечеринки (это опционально поддерживается).Эти функции генерируют сообщения, которые могут проходить через любой транспорт, и любая форма транспорта может вызывать эти функции.

В случае WebRequest класс достаточно умен, чтобы обнаружить заголовок Negotiate и вызовы в Windows SSPIфункции, чтобы получить билет, передавая имя пакета.В первую очередь это зависит от Kerberos для защиты самого билета, но он не защищает ничего другого в HTTP-запросе, поэтому используется SSL / TLS.

В случае NegotiateStream формат проводника несколько произвольный, но ограничен рукопожатием Negotiate.Клиент отправит только сообщение инициализации согласования по сети, сервер ответит, и если они согласятся, вы можете начать отправлять друг другу зашифрованные сообщения.

...