При отправке заголовка WW-Authenticate дайджест-аутентификации с SHA-256 с сервлетом Java клиентская сторона не возвращает результат

#java #http #tomcat #curl #sha

Вопрос:

Я разрабатываю веб-API, который выполняет дайджест-аутентификацию, но когда я устанавливаю алгоритм дайджеста сообщений на SHA-256, на стороне клиента, похоже, происходит сбой. Есть ли что-то не так с реализацией на стороне сервера?

Язык: Java, Сервер: Tomcat7.0 ОС: Windows 10 как для сервера, так и для клиента

Дайджест-аутентификация не использует tomcat web.xml, server.xml, или tomcat-users.xml настройки, но реализует отправку заголовка WWW-аутентификации и получение заголовка авторизации в сервлете. В это время, если в качестве алгоритма дайджеста используется MD5, аутентификация пройдет успешно, но если вы перейдете на SHA-256, поскольку он устарел, клиентская сторона не вернет результат после отправки заголовка WW-Authenticate .

WWW-Аутентификация: Область дайджеста = «example.com», qop = аутентификация, nonce = «f5d6eeccc66664731c72e3300d3dfadf», непрозрачный = «56b2ea6d037b522661a3719ec48b7d9a», алгоритм = SHA-256

  • Успешно, когда алгоритм = MD5

(В случае браузера)

В состоянии Http 401 возникает ошибка без отображения диалогового окна для ввода пользователя и пароля. Глядя на состояние связи с инструментами разработчика, кажется, что WWW-Аутентификация: получена, но, похоже, заголовок авторизации не генерируется.

(команда скручивания)

curl -v -k —дайджест —использовать r «пользователь: пароль» «url»

После получения заголовка WWW-Authenticate curl завершает работу с сообщением об отсутствии памяти

Комментарии:

1. Какую версию curl вы используете?

2. Я использую curl 7.55.1(windows).

3. Если один из ответов решает вашу проблему, вы можете отметить их как принятые (большая галочка ✔ рядом с ответом).

Ответ №1:

Добавление других алгоритмов хэширования, помимо MD5, в схему ДАЙДЖЕСТ-аутентификации появилось сравнительно недавно (2015, см. RFC 7616).

Первая версия cURL для ее поддержки была опубликована два года спустя (версия 7.57.0, см. список изменений).

Поэтому вам необходимо обновить свою версию cURL.

Примечание: Вместо реализации алгоритма ДАЙДЖЕСТА с нуля, возможно, было бы лучше изменить Tomcat DigestAuthenticator для поддержки RFC 7616 и отправить PR на github.

Комментарии:

1. Спасибо вам за ваш комментарий. После обновления curl до версии 7.78 я попробовал еще раз. В следующий раз «канал: не удалось инициализировать безопасный контекст: SEC_E_QOP_NOT_SUPPORTED (0x8009030A)» я получил ошибку!! (Windows10)

2. Вы наткнулись на этот вопрос . Вам необходимо использовать версию, в которой не используется SSPI, например, в paehl.de (ссылка с официальной страницы загрузки ).

3. » paehld.de/open_source/?CURL_7.78.0 » Я скачал «Скачать версию SSH2 и SSL» и обновил curl. Ошибка больше не возникает. Спасибо!

Ответ №2:

Дайджест-аутентификация доступа — Википедия:

Однако по состоянию на июль 2021 года ни один из популярных браузеров, включая Firefox[1] и Chrome[2], не поддерживает SHA-256 в качестве хэш-функции.