Различия в реализации Java HTTP NTLM - PullRequest
2 голосов
/ 22 августа 2011

Эта ссылка подробно описывает различные реализации Java-клиента http.Я ищу любые ссылки, которые могли бы предоставить информацию об их различиях реализации протокола NTLM.

На одном из компьютеров с Windows я обнаружил, что реализация клиента 3.1 commons-http завершается неудачно с ошибкой авторизации (код состояния http 401), но реализация java 1.5 завершается успешно.Поскольку реализация java 1.5 протокола аутентификации NTLM не является открытым исходным кодом, я не могу сравнить две реализации, чтобы понять, что может быть не так.

Обновление 1

Iосведомлен о том, что http-клиент commons не поддерживает NTLM v2.Эта ссылка обеспечивает сравнение между различными реализациями Java-клиента Java и упоминает, что Apache http-клиент обеспечивает частичную реализацию протокола NTLM.Более подробно об этом не говорится.

При дальнейшем устранении проблемы я также обнаружил, что реализация NTLM, предоставляемая этой ссылкой в сочетании с HTTPClient , работает в Windows.машина (реализация http-клиента commons не работает, как я уже упоминал выше).

Update 2

По сниффингу пакетов (с помощью wirehack) я понял, что http-клиент commons3.1 Реализация протокола ntlm не генерирует отклик NTLM в сообщении типа 3.Это генерируется реализацией JDK.Известны ли вам какие-либо настройки сервера / клиента, которые указывают, что аутентификация не будет выполнена, если данные ответа NTLM будут пустыми?(поскольку ошибка аутентификации, с которой мы сталкиваемся, воспроизводима только на одном компьютере. Аутентификация в другом месте успешна.)

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Мы нашли причину этой проблемы.Параметр конфигурации, приводящий к ошибке аутентификации, контролировался политикой безопасности NoLMHashPolicy.Включение этой политики означает, что сервер Windows больше не будет хранить значение LM Hash для любого пароля и будет использовать хэш ответа NT для выполнения аутентификации.Поскольку реализация протокола NTLM из библиотеки commons http client 3.1 вообще не вычисляет отклик NT, при включении этого параметра может возникнуть эта ошибка.Подробнее об этом параметре можно узнать здесь .

. В качестве решения можно просто добавить реализацию интерфейса AuthScheme и извлечь код из более высоких версий клиентской библиотеки commons http (например, 4.1.2), который вычисляет ответ NT в сообщении типа 3.Не забудьте обновить длину и значения смещения для полей отклика NT.Когда реализация интерфейса AuthScheme будет готова, его можно внедрить с помощью метода AuthPolicy.registeryScheme ().

1 голос
/ 22 августа 2011

Commons httpclient 3.1 не реализует NTLMv2, он только реализует более старую спецификацию NTLM (иначе NTLMv1).

...