諸事情があって、BASIC認証やDigest認証を設定する必要があった。 ただ、そのための管理ファイル含めGitで管理+Dockerでデプロイみたいなことをしていたので、htpasswdやhtdigestコマンドが無くてファイルを作るのがちょっと手間がかかるということがあった。

その時はdockerの中に入ってhtpasswdやhtdigestを実行してファイルを取り出すみたいなことをしていたけど、それらのコマンドなしで認証用のファイルが作れないかなとおもったので、ちょっと調べてみることにした。

1.BASIC認証の場合

今まで知らなかったのだが、BASIC認証で使える暗号化方式は結構あるようだ。 公式ドキュメントを見てみると、Bcryptも使えるらしい。へー…。まぁ、今回は使わなくていいか。

ただmd5にしているわけではないようなので、opensslを使ってhtpasswdでデフォルトの方式(apr1)で暗号化をする。

echo "ユーザ名:$(openssl passwd -apr1 パスワード)"
[root@BS-PUB-CENT7-01 ~]# echo "test-user:$(openssl passwd -apr1 test-password)"
test-user:$apr1$yAcnmR4J$tY1TEhaQ15q4U69hxpTS90

2.Digest認証の場合

Digest認証の場合、ユーザ名とRealm、パスワードを組み合わせてMD5でhash化しているので、md5sumで対応できる。

echo ユーザ名 Realm パスワード | awk '{print "echo "$1":"$2":$(printf "$1":"$2":"$3"|md5sum|cut -d\\ -f1)"}'|bash
[root@BS-PUB-CENT7-01 ~]# echo test-user test test-password | awk '{print "echo "$1":"$2":$(printf "$1":"$2":"$3"|md5sum|cut -d\\ -f1)"}'|bash
test-user:test:7595a2a4e0d31ef3bbce746b3b65822f

これで、htpasswdやhtdigestがなくてもBASIC/Digest認証用のファイルが作れそうだ。