

Digest認証を行うWebAPIの開発を行なっていますが、メッセージダイジェストのアルゴリズムをSHA-256にすると、クライアント側がクラッシュするようです。  
サーバー側の実装に何か問題あるのでしょうか。

言語：Java、サーバー：Tomcat7.0  
OS：サーバー、クライアントともにWindows10

Digest認証は、システムの認証情報の格納先が特殊である関係上、tomcatのweb.xmlやserver.xml、tomcat-
users.xmlなど設定ファイルによる認証設定ではなく、Servlet内でWWW-
Authenticateヘッダの送信やAuthorizationヘッダの受信を実装しています。  
この際、ダイジェストのalgorithmとしてMD５を使用すると認証が成功するのですが、非推奨であるためSHA-256に変更すると、WW-
Authenticateヘッダ送信後にクライアント側が結果を返せずに処理が止まってしまう状態になってしまいます。

### 送信したWW-Authenticateヘッダの例

[code]

    WWW-Authenticate: Digest realm="example.com",qop=auth,nonce="f5d6eeccc66664731c72e3300d3dfadf",opaque="56b2ea6d037b522661a3719ec48b7d9a",algorithm=SHA-256
    
[/code]

※algorithm=MD5にすると成功する

### クライアント側の挙動

  * ブラウザの場合  
ユーザー、パスワードを入力するダイアログが表示されないまま、Httpステータス401でエラーになる。  
開発者ツールで通信状態を見ると、WWW-Authenticate:は受け取っているようですがAuthorizationを生成している様子はない。

  * curlコマンドの場合  
`curl -v -k --digest --user "ユーザ:パスワード" "url"`  
WWW-Authenticateヘッダを受け取った後、curlがout of memory のメッセージを出して終了する


CC BY-SA 4.0
2021-08-01T05:34:00.670
80512
2021-08-01T22:56:34.270
2021-08-01T05:41:10.387
3060
29815
question
java http tomcat java-ee
Java Servletにおいて、SHA-256でダイジェスト認証のWW-Authenticateヘッダを送信するとクライアント側が結果を返して来なくなる


[英語版Wikipedia](https://en.wikipedia.org/wiki/Digest_access_authentication#Overview)によると

> However, as of July 2021, none of popular browsers, including
> Firefox[[1](https://bugzilla.mozilla.org/show_bug.cgi?id=472823)] and
> Chrome,[[2](https://bugs.chromium.org/p/chromium/issues/detail?id=1160478)]
> support SHA-256 as the hash function.

とのことで、サポートしている(メジャーな)実装が無いようです。  
(`curl`は[対応されているようにも見えます](https://github.com/curl/curl/commit/2b5b37cb9109e7c2e6bfa5ebf54016aff8a1fb48)が([#1018](https://github.com/curl/curl/issues/1018#issuecomment-349741628)))


CC BY-SA 4.0
2021-08-01T22:39:45.023
80526
2021-08-01T22:56:34.270
2021-08-01T22:56:34.270
2808
2808
80512
answer