Что вы действительно спрашиваете: есть ли способ проверить токены «WWW-Authenticate: NTLM», отправленные IE и другими HTTP-клиентами при выполнении единого входа (SSO). Единый вход - это когда пользователь вводит свой пароль «один раз», когда он нажимает Ctrl-Alt-Del, и рабочая станция запоминает и использует его по мере необходимости для прозрачного доступа к другим ресурсам, не запрашивая у пользователя пароль снова.
Обратите внимание, что Kerberos, как и NTLM, также может использоваться для реализации аутентификации SSO. При наличии заголовка «WWW-Authenticate: Negotiate» IE и другие браузеры будут отправлять токены Kerberos и / или NTLM в оболочке SPNEGO. Подробнее об этом позже, но сначала я отвечу на вопрос в том виде, в котором он был задан.
Единственный способ проверить «ответ» пароля NTLMSSP (подобно тем, которые закодированы в заголовках «WWW-Authenticate: NTLM», отправленных IE и другими браузерами), с помощью вызова NetrLogonSamLogon (Ex) DCERPC с помощью службы NETLOGON Контроллер домена Active Directory, который является доверенным лицом или имеет «доверие» с полномочиями для целевой учетной записи. Кроме того, для надлежащей защиты связи NETLOGON следует использовать шифрование безопасного канала, которое требуется начиная с Windows Server 2008.
Нет необходимости говорить, что очень мало пакетов, которые реализуют необходимые сервисные вызовы NETLOGON. Единственные, о которых я знаю:
Windows (конечно)
Samba - Samba - это набор программ для UNIX, который реализует ряд протоколов Windows, включая необходимые сервисные вызовы NETLOGON. Фактически, в Samba 3 есть специальный демон для этого, называемый «winbind», с которым могут (и могут) взаимодействовать другие программы, такие как модули PAM и Apache. В системе Red Hat вы можете сделать yum install samba-winbind
и yum install mod_auth_ntlm_winbind
. Но это самая легкая часть - настройка этих вещей - другая история.
Jespa - Jespa (http://www.ioplex.com/jespa.html) - это 100% -ная библиотека Java, которая реализует все необходимые вызовы службы NETLOGON. Она также обеспечивает реализации стандартных интерфейсов Java для аутентификации клиентов различными способами, например с помощью Фильтр сервлетов HTTP, сервер SASL, модуль входа в систему JAAS и т. Д.
Остерегайтесь того, что существует ряд акцепторов аутентификации NTLM, которые не реализуют необходимые сервисные вызовы NETLOGON, а вместо этого делают что-то еще, что в конечном итоге приводит к сбою в том или ином сценарии. Например, в течение многих лет способ сделать это в Java был с помощью фильтра сервлетов аутентификации HTTP NTLM из проекта под названием JCIFS. Но этот Фильтр использует технику «человек посередине», которая несет ответственность за давнюю «ошибку икоты» и, что более важно, он не поддерживает NTLMv2. По этим и другим причинам его планируется удалить из JCIFS. Есть несколько проектов, которые были непреднамеренно вдохновлены этим пакетом, которые теперь также в равной степени обречены. Также на форумах Java размещено много фрагментов кода, которые декодируют маркер заголовка и отбирают домен и имя пользователя, но абсолютно ничего не делают для проверки ответов на пароли. Достаточно сказать, что, если вы используете один из этих фрагментов кода, вы могли бы также ходить с брюками вниз.
Как я уже говорил ранее, NTLM является лишь одним из нескольких поставщиков поддержки безопасности Windows (SSP). Есть также Digest SSP, Kerberos SSP и т. Д. Но SSP Negotiate, также известный как SPNEGO, обычно является поставщиком, который MS использует в своих собственных клиентских протоколах. Согласовать SSP фактически просто согласовывает либо NTLM SSP, либо Kerberos SSP. Обратите внимание, что Kerberos можно использовать только в том случае, если и у сервера, и у клиента есть учетные записи в целевом домене, и клиент может достаточно обмениваться данными с контроллером домена, чтобы получить билет Kerberos. Если эти условия не выполняются, NTLM SSP используется напрямую. Так что NTLM ни в коем случае не устарел.
Наконец, некоторые люди упоминают об использовании «простого связывания» LDAP в качестве службы проверки паролей. LDAP на самом деле не предназначен для аутентификации, и по этой причине он неэффективен. Также невозможно реализовать SSO с использованием LDAP. SSO требует NTLM или SPNEGO. Если вы можете найти акцептор NETLOGON или SPNEGO, вы должны использовать его вместо этого.
Mike