GSSAPI для аутентификации NTLM

Можно ли использовать GSSAPI для аутентификации NTLM v1/v2? Я пытаюсь создать веб-сервер, совсем как squid / apache, но я бы хотел аутентифицировать клиентов, которые могли бы использовать IE / FireFox, используя протоколы NTLM / Negotiate. Я пытался использовать библиотеки Heimdal, но просто не могу заставить gss_accept_sec_context работать. Он просто завершается с ошибкой "Запрошен неподдерживаемый механизм". Я могу подтвердить, что имя участника службы, OID для spnego и т. Д. Действительно происходило правильно, когда gss_acquire_cred был вызван до попытки gss_accept_sec_context. Да, конечно, я извлек токен, полученный от клиента с помощью base64, расшифровав заголовки авторизации. Я использую C++ и экспериментирую с Debian. Я уверен, что один из фантастических хаков здесь знает больше, и надеюсь поделится некоторыми важными подсказками.

Заранее спасибо.

3 ответа

Библиотека NTLM Heimdal также поддерживает клиентскую сторону. Вы можете, используя библиотечные примитивы, генерировать сообщения типа 1, 2 и 3, и это будет работать. Я не знаю, однако, можете ли вы использовать GSS-API на вершине Heimdal для этих целей. Я предполагаю, что тест, вы можете сделать это тоже.

Библиотека Heimdal GSSAPI поддерживает SPNEGO, NTLMv1/v2 и KRB5. У них также есть необработанная библиотека NTLM, которую вы можете использовать для самостоятельной реализации протокола.

https://www.h5l.org/manual/HEAD/gssapi/

Я не уверен насчет библиотеки Heimdal и того, работает ли она с GSS, но gss ntlm ssp специально претендует на звание библиотеки gss. Я ожидаю, что вам нужно скачать и собрать его, а затем вам нужно будет установить /etc/gss/mech (или /usr/etc/gss/mech в Debian и Ubuntu), чтобы он указывал на библиотеку. Система сборки создаст пример того, что вам нужно, в файле mech в своем каталоге примеров.

Вы можете столкнуться с проблемой запуска этого под spnego. Когда Windows использует NTLM в качестве наиболее предпочтительного механизма с пакетом согласования, она отправляет необработанный токен NTLM, а не токен SPNEGO, как определено в RFC 4178. Этот код определенно поможет вам продвинуться дальше; он определенно пройдет мимо gss_accept_sec_context, указывая на неподдерживаемый механизм.

Другие вопросы по тегам