.htpasswd ファイル生成
Apache・Nginx の Basic 認証で使用する .htpasswd ファイルをブラウザ上で安全に生成。bcrypt・APR1-MD5・SHA-1 に対応。パスワードはサーバへ送信されません。
htpasswdファイルとは
htpasswd ファイルは、Apache や Nginx の Basic 認証で使うユーザー名とハッシュ化パスワードの組を1行ずつ記録したテキストファイルです。本来はサーバー上で htpasswd コマンドを実行して作成しますが、コマンドラインの用意やサーバーへのログインが不要な環境も多く、その場合はこのツールのようにブラウザだけで同じ形式のファイルを作れると手早く済みます。
このツールは入力されたパスワードを bcrypt・APR1-MD5・SHA-1 のいずれかでハッシュ化し、username:hash 形式の行を生成します。ハッシュ計算はすべてブラウザ内の JavaScript で完結し、パスワードの平文がネットワークに出ることはありません。生成したファイルはサーバーの DocumentRoot の外に置き、AuthUserFile で参照させるのが前提です。
.htpasswd生成の使い方
- ユーザーの行を追加する 「ユーザーを追加」ボタンで認証させたいユーザー数ぶんの行を用意します。1行が1ユーザーに対応します。
- ユーザー名とパスワードを入力する 各行にログインさせたいユーザー名と、そのユーザーのパスワードを入力します。表示/非表示の切り替えで入力内容を確認できます。
- アルゴリズムとコストを選ぶ 行ごとに bcrypt・APR1-MD5・SHA-1 から選択します。bcrypt を選んだ場合はコスト値(計算回数の指数)も調整できます。
- 生成する 「生成」を押すとその場でハッシュ計算が実行され、下部のプレビューに .htpasswd ファイルの内容が表示されます。
- コピーまたはダウンロードする 生成結果をクリップボードにコピーするか、ファイルとして直接ダウンロードしてサーバーへ配置します。
使いこなすためのヒント
- bcrypt を推奨: 現在最も安全なアルゴリズム。Apache 2.4 以降と Nginx で使用できます。コスト値を上げるほどハッシュ計算が遅くなり、ブルートフォース攻撃に強くなります(10 が一般的な推奨値)。
- APR1-MD5(
$apr1$)は Apache 2.2 以前との互換性が必要な場合に使います。ほぼすべての Apache・Nginx バージョンで動作します。 - SHA-1(
{SHA})は衝突耐性が低く、現在は非推奨です。後方互換性が必要な古い環境でのみ使用してください。 - .htpasswd ファイルはウェブサーバーから直接アクセスできない場所(
DocumentRootの外)に配置することを強く推奨します。 - HTTPS と併用してください。Basic 認証の認証情報は Base64 エンコードされているだけで暗号化されていないため、HTTP では平文で送信されます。
活用シーン
公開前のステージング環境を保護する
本番リリース前の確認用サイトに検索エンジンや第三者からアクセスされたくない場合、手早く Basic 認証をかけて一時的にアクセスを制限できます。
社内向け管理画面へのアクセスを制限する
アプリケーション側にログイン機能がない社内ツールや管理パネルの手前に、サーバー設定だけで簡易的な認証の壁を追加できます。
IP制限とBasic認証の二重防御にする
IPアドレス制限だけでは社外からのアクセスに対応しづらい場合、Basic 認証を組み合わせることで手軽に防御層を1つ増やせます。
特定のAPIエンドポイントだけを保護する
サーバー設定の location や Directory ディレクティブを使い、公開APIの一部だけに認証を絞って適用する場合にも使えます。
既存の認証ユーザーを増やす
運用中のサービスで新しい担当者にアクセス権を渡したいとき、追加ぶんの行だけを生成して既存ファイルに追記できます。
用語集
- Basic認証
- HTTP の標準機能として定義された認証方式です。ユーザー名とパスワードを Base64 でエンコードして毎回のリクエストに添付し、サーバー側で照合します。
- bcrypt
- ソルト付きでパスワードをハッシュ化するアルゴリズムです。コスト値で計算量を調整でき、ハードウェアが高速化しても遅延を維持しやすいため現在の推奨とされています。
- APR1-MD5
- Apache が独自に拡張した MD5 ベースのハッシュ形式で、ハッシュ値の先頭に
$apr1$が付きます。古い Apache との互換性のために残されています。 - SHA-1({SHA})
- ハッシュ値の先頭に
{SHA}が付く形式です。ソルトを持たず衝突耐性も低いため、現在は新規利用が推奨されていません。 - ソルト(salt)
- ハッシュ化の前にパスワードへ付け足すランダムな文字列です。同じパスワードでもハッシュ値が毎回変わるため、レインボーテーブルなどを使った総当たり攻撃を難しくします。
- DocumentRoot
- Webサーバーが外部に公開するファイルの起点となるディレクトリです。.htpasswd はここに置くとブラウザから直接読み取られてしまうため、外側に配置します。
- AuthUserFile
- Apache の設定ディレクティブの1つで、Basic 認証に使う .htpasswd ファイルの配置パスを指定します。
よくある質問
.htaccess または httpd.conf に以下を追加し、AuthUserFile に生成した .htpasswd のパスを指定します。AuthType Basic AuthName "Restricted Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user
nginx.conf または該当する server ブロックに追加します。location /admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}Nginx は bcrypt と APR1-MD5 の両方に対応しています。username:hash 形式)をファイルの末尾に追記するだけです。各行が 1 ユーザーに対応し、空行やコメント行(# で始まる行)は無視されます。
余談ですが ― Basic 認証は古いのに今も使われる理由
HTTP Basic 認証は 1999 年の RFC 2617(現在は RFC 7617 に更新)で定義された非常にシンプルな認証方式です。仕組みは単純で、ユーザー名とパスワードを : で区切り、Base64 でエンコードして Authorization ヘッダーに載せるだけです。
シンプルさゆえに今も広く使われています。特にステージング環境や社内ツールへの「一次防衛線」として、IP 制限と組み合わせた二重防御、あるいはさっと API エンドポイントを保護したい場合に重宝します。設定ファイル 2〜3 行で動き、追加のミドルウェアやデータベースが不要なのが最大の利点です。
ただし注意点もあります。ログアウト機能がなく(ブラウザを閉じるまでセッションが続く)、パスワードの有効期限管理や多要素認証も標準では持ちません。本格的な認証が必要なサービスには OAuth 2.0 や OIDC などを検討してください。