ダイジェスト認証
~とりあえずパスワードをつけてほしいと言われた~
2020/2/20, 2020/2/29
パスワードとかやめて、クライアント証明書でユーザ認証を済ませようとしていたが、クライアントから言われた「とりあえずパスワードでセキュリティ確保して」。
一部ユーザからは「パスワードを省略したい(内緒で)」と悪魔のような発言も。
当初はクライアント証明書を使ってパスワードなしにするつもりだったし、これが本当にやりたいことだったのだが、いまさらのパスワードとなると納期の問題が発生する。
パスワードの変更画面とか、(「そのユーザ本物ですよね」をどう保証するとか)、いろいろ用意するのが面倒だったので、apacheの機能でパスワードを要求するようにした。
以前、「お試し」「形だけ」のつもりでBasic認証を使ったが、今回はもう少しだけマシなものにする。
Digest認証
http://webserver/index.htmlを含むDocumentRootにダイジェスト認証を適用する。
/etc/httpd/conf/httpd.confに追記
#/etc/httpd/conf/httpd.confを修正
<Directory "/var/www/html">
...
##Digest Authrization
AuthType Digest
AuthName "会員限定"
AuthUserFile /etc/httpd/conf/.htdigest
Require valid-user
#特別なアドレスを許可する
Require ip 192.168.xx.xx 192.168.yy.yy
</Directory>
ユーザーごとにバスワードを生成・記録
#
touch /etc/httpd/conf/.htdigest
#htdigest /etc/httpd/conf/.htdigest AuthName userName :パスワードはこの後入力する
htdigest /etc/httpd/conf/.htdigest "会員限定" member
htdigest /etc/httpd/conf/.htdigest "会員限定" user1
htdigest /etc/httpd/conf/.htdigest "ユーザー名とパスワードをお願いします" user1
htdigest /etc/httpd/conf/.htdigest "ユーザー名とパスワードをお願いします" user2
/etc/httpd/conf/.htdigestはこの1つのファイルで複数のユーザー名とパスワードを管理する。
httpd.conf中のAuthName "会員限定"とあるので、ユーザ名memberまたはuser1だけが閲覧許可を持っている。それぞれのパスワードはxxxxxxxxxxxxx以下にハッシュ値が記録されている。
他のDirectoryでは「ユーザー名とパスワードをお願いします」を使用していて、user1,user2だけが閲覧許可を持っている(持つ予定である?)こともわかる。htdigestはユーザの追加がでできるが、削除はできない。削除するにエディタで1行分削除する。
member:会員限定:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
user1:会員限定:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
user1:ユーザー名とパスワードをお願いします:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
user2:ユーザー名とパスワードをお願いします:xxxxxxxxxxxxxxxxxxxxxxxxxxxx
設定がおわったので、設定を確認する。設定に問題がなければ、apache httpに設定を読み込ませる。
#http.conf他設定ファイルを確認
apachectl configtest
#Syntax OKがでないときはhttpd.confを修正
#設定を読み込む
systemctl reload httpd
#systemctl restart httpdでhttpdを再起動してもよい
アクセスしてみる(http)
http://webserver.takahashi.lab/へアクセスしてみる。

ユーザー名とパスワードの入力欄が表示される。を選ぶと、「認証できませんでした。」ページになる。

「このサイトへの接続ではプライバシーが保護されません」と説明がでている。
httpでパスワードを扱うのはちょっと嫌だけど、ユーザー名とパスワードを入力すると、index.htmlが表示される。

アクセスしてみる(https)
すでにサーバー証明書の発行とインストールができているので、httpsで接続を試みる。
見た目はhttpと似ているが、「このサイトへの・・・」は表示しない。

ユーザー名とパスワードを入力すると、index.htmlが表示される。

特別なアドレス(192.168.xx.xx)からアクセスしてみる(https)
IPアドレス192.168.xx.xxからhttps://webserver.takahasi.lab/へアクセスするときは、パスワードを省略する。

apache2.4系でBasic認証 or Digest認証、特定IPアドレスからは認証なしで(https://qiita.com/mmotoi/items/5d7dcbb9e461feba98cd)
Apache > HTTP サーバ > ドキュメンテーション > バージョン 2.4 > How-To / チュートリアル(https://httpd.apache.org/docs/2.4/ja/howto/auth.html)
Apache2.4 のRequireディレクティブでアクセス制御を行う - 闘うITエンジニアの覚え書き (https://www.magata.net/memo/index.php?Apache2.4%20%A4%CERequire%A5%C7%A5%A3%A5%EC%A5%AF%A5%C6%A5%A3%A5%D6%A4%C7%A5%A2%A5%AF%A5%BB%A5%B9%C0%A9%B8%E6%A4%F2%B9%D4%A4%A6)