本文へスキップ
App Museum
English

Basic認証・.htpasswd生成ツール

Basic認証の .htpasswd に書く「ユーザー名:ハッシュ」の行を、bcrypt・MD5($apr1$)・SHA-512($6$)・SHA-256($5$)・SHA-1 で作ります。パスワードはブラウザの中だけで計算します。.htaccess と nginx の設定、curl での確認コマンド、既存の .htpasswd とパスワードの照合、Authorization ヘッダーの読み取りもできます。

ユーザーとパスワード

ログインに使うユーザー名とパスワードを入れて「生成する」を押すと、.htpasswd に書く行ができます。パスワードはこのページの中だけで計算し、どこにも送りません。

一度に 20 人まで作れます。

Apache 2.4 で使えます。nginx はパスワードの確認を OS の crypt() に任せるため、bcrypt が通るかは OS しだいです。通らないときは $6$ か $apr1$ を選んでください。

1上げるごとに計算の時間がおよそ2倍になります。htpasswd の既定は 5 で、多くの解説は 10〜12 を勧めています。Basic認証はページを開くたびに照合するので、上げすぎるとサーバーが重くなります。

サーバーの設定

Basic認証をかけるための設定です。.htpasswd の置き場所に合わせて書き換えてください。

認証をかける範囲の名前です。同じサイトの同じ名前の範囲では、ブラウザが入力済みのユーザー名とパスワードを使い回すことがあります。ブラウザによってはダイアログに表示されません。

公開フォルダ(public_html など)の外に置くのが安全です。レンタルサーバーでは管理画面やマニュアルに書かれたフルパスを使います。

例: wp-login.php。<Files> で囲み、そのファイル名だけを守ります。

1行か空白区切りで1つずつ。203.0.113.5 や 198.51.100.0/24、IPv6 も書けます。ここにない IP からはパスワードを聞きます。

.htaccess に書く設定

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/example/.htpasswd
Require valid-user

AllowOverride が None だと .htaccess は読まれず、AuthConfig(または All)を含まないとサーバーエラー(500)になります。プロキシや CDN の後ろでは、Require ip が見るのはプロキシの IP です。

パスワードを照合する

いまの .htpasswd を貼り付けると、ユーザーと形式を一覧にします。パスワードを入れると、そのパスワードで通るかを確かめます。

Authorization ヘッダーを読む

「Authorization: Basic …」の値を貼ると、中のユーザー名とパスワードを取り出します。Base64 は暗号ではないので、HTTPS でない通信では誰でも読めます。

使い方

  1. 「ユーザーとパスワード」に、ログインに使うユーザー名とパスワードを入れます。「ランダム」を押すと、見間違えやすい文字(I O l 0 1)を除いた英数字20文字のパスワードが入り、表示に切り替わります。「ユーザーを追加」で20人まで並べられます
  2. 「ハッシュの形式」を選びます。最初は bcrypt($2y$)で、コストは10です
  3. 「生成する」を押すと、.htpasswd に書く行 に ユーザー名:ハッシュ の行が並びます。「コピー」か「htpasswd.txt を保存」で取り出し、サーバーでは .htpasswd という名前のファイルにします
  4. 「サーバーの設定」で Apache(.htaccess)か nginx を選び、.htpasswd の場所を入れると、Basic認証をかける設定ができます
  5. サーバーに置いた後は、結果の下の「動作確認」にある curl のコマンドで確かめられます

パスワードの計算はこのページの中だけで行い、入力も結果もどこにも送信・保存しません。ページを閉じると消えます。

ソルト(ハッシュに混ぜるランダムな文字列)は毎回作り直すので、同じパスワードでも「生成する」を押すたびに違う行になります。どの行も同じパスワードで通ります。

具体例

ユーザー名 alice、パスワード secret で作ると、たとえば次の行になります(ソルトの部分は毎回変わります)。

alice:$2y$10$7bz9yktCxPZex0cfR5gape2BAtykIt3Qkn9nqLzWPaQm7TOhhTja.
  • $2y$ が bcrypt、10 がコスト、続く22文字がソルト、残りの31文字がハッシュです
  • 複数のユーザーは1行に1人ずつ並べます。すでにある .htpasswd に足すときは、行を末尾に加えます

Apache で、.htpasswd を /home/example/.htpasswd に置いて wp-login.php だけを守り、事務所の IP 203.0.113.5 からはパスワードなしで通す .htaccess は次のようになります。

<Files "wp-login.php">
  AuthType Basic
  AuthName "Restricted Area"
  AuthUserFile /home/example/.htpasswd
  <RequireAny>
    Require ip 203.0.113.5
    Require valid-user
  </RequireAny>
</Files>

nginx で /admin/ を守る場合は次のとおりです。

location /admin/ {
    auth_basic "Restricted Area";
    auth_basic_user_file "/etc/nginx/.htpasswd";
}

形式の選び方

  • bcrypt($2y$): 新しく作るならこれです。Apache 2.4 で使えます。nginx はパスワードの確認を OS の crypt() に任せるので、bcrypt が通るかどうかは OS によります。nginx で通らなかったら SHA-512 か MD5 で作り直してください
  • MD5($apr1$): Apache 独自の形式で、htpasswd コマンドの既定です。Apache はどの OS でも、nginx も読めます。ただし MD5 を1,000回くり返すだけなので、bcrypt よりずっと短い時間で総当たりされます
  • SHA-512($6$)・SHA-256($5$): Linux などの crypt() が読む形式で、Apache と nginx で使えます。Windows 版の Apache では使えません。htpasswd では Apache 2.4.59 から -5・-2 で作れます。ラウンド数の既定は5,000で、そのときは行に rounds= を書きません
  • SHA-1({SHA}): ソルトなしの SHA-1 を1回かけるだけです。同じパスワードはいつも同じ値になり、事前に計算した表で破られます。古いサーバーからの移行の確認以外には使わないでください

bcrypt のコストは、1上げるごとに計算の時間がおよそ2倍になります。htpasswd -B の既定は5で、htpasswd の説明では -C に4〜17を指定します。このページでも17まで選べます。Basic認証はページや画像を読み込むたびにパスワードを照合するので、コストを上げすぎるとサーバーが重くなります。

Basic認証の注意

  • Basic認証のパスワードは、Base64 にしてリクエストのたびに送られるだけで、暗号化されません。HTTPS のサイトで使ってください
  • .htpasswd は公開フォルダ(public_html など)の外に置きます。Apache の標準の設定は .ht で始まるファイルを URL から読ませませんが、サーバーの設定しだいです
  • .htaccess の AuthUserFile は / で始まる絶対パスにします。レンタルサーバーでは、管理画面やマニュアルに書かれたフルパスを使います。管理画面に Basic認証の機能があれば、そちらでも設定できます
  • ユーザー名に : は使えず、# で始まる行はコメントとして読み飛ばされます
  • bcrypt はパスワードの先頭72バイト(UTF-8)しか使いません。それより長いと、後ろが違っていても通ります
  • 日本語などの英数字以外の文字は、ブラウザによって送る文字コードが違い、ログインできないことがあります。ユーザー名とパスワードは英数字と記号にするのが無難です
  • プロキシや CDN の後ろにあるサーバーでは、IP で通す設定が見るのはプロキシの IP になります

照合とヘッダーの読み取り

「パスワードを照合する」に今の .htpasswd を貼り付けると、ユーザーごとの形式と注意(弱い形式、同じユーザーの2行目など)を一覧にします。パスワードを入れて「照合する」を押すと、そのパスワードで通るかを確かめます。bcrypt($2y$ $2b$ $2a$)、MD5($apr1$ $1$)、SHA-256・SHA-512($5$ $6$)、SHA-1({SHA} {SSHA})、平文({PLAIN})を照合できます。13文字の DES crypt と yescrypt($y$)は形式の表示だけです。サーバーと同じく、ユーザー名が一致した最初の行だけを照合します。

「Authorization ヘッダーを読む」には、ブラウザの開発者ツールなどで見た Authorization: Basic … を貼ります。中の Base64 を戻して、ユーザー名とパスワードを表示します。

FAQ

パスワードはサーバーに送られますか?

送られません。ハッシュの計算も照合も、このページの JavaScript がブラウザの中で行います。入力した内容は保存せず、ページを閉じると消えます。

htpasswd コマンドで作った行と違うのはなぜですか?

ソルトがランダムだからです。同じパスワードでも、作るたびにハッシュは変わります。どちらの行も同じパスワードで通ります。「パスワードを照合する」に貼り付けると、通るかどうかを確かめられます。

nginx で bcrypt の行を使うとログインできないのはなぜですか?

nginx は $apr1$ と {SHA} などの一部を自分で読み、それ以外は OS の crypt() に任せます。OS の crypt() が bcrypt に対応していないと読めません。その場合は SHA-512($6$)か MD5($apr1$)で作り直してください。

パスワードを変えるにはどうすればいいですか?

そのユーザーの行を、新しく作った行に置き換えます。同じユーザー名の行が2つあると、サーバーは前の行だけを使います。

ログアウトはできますか?

Basic認証には決まったログアウトの方法がありません。ブラウザを閉じるか、ブラウザに保存された資格情報を消すまで、入力したユーザー名とパスワードが使われます。

種別
ユーティリティ
カテゴリ
開発者向け
タグ
htpasswd
basic-auth
bcrypt
htaccess
apache
nginx
password
hash
  • パスワード強度チェッカー

    入力したパスワードの強さを、よく使われるパスワード・単語・キーボードの並び・日付などの見つけやすさから判定。破られるまでの時間の目安、弱い部分、NISTと総務省の目安との照らし合わせも。日本の名字・名前のローマ字、和暦、JIS配列にも対応し、送信はしません。

    ユーティリティ開発者向けpasswordsecuritystrengthcheckerzxcvbn
  • カラーコード変換ツール

    HEX・RGB・HSL のカラーコードを相互に変換し、HSV・CMYK・OKLCH の表記も表示。カラーピッカーやプレビューで確認でき、白・黒や指定した文字色とのコントラスト比(WCAG)も分かります。

    ユーティリティ開発者向けcolorhexrgbhslhsvcmykoklchcontrastcontrast-checkerwcagconverterdeveloper
  • TOTP生成ツール(ワンタイムパスワード)

    Base32の秘密鍵から、2段階認証で使う6桁のワンタイムパスワード(TOTP)をブラウザ内で計算。前後のコードとの照合、SHA-256・8桁などの設定、otpauth:// URIの読み込みと作成、認証アプリで読み取るQRコードの表示に対応。

    ユーティリティ開発者向けtotpotp2faauthenticatorsecuritygeneratorqr