.htpasswd 檔案生成器

在瀏覽器中安全生成用於 Apache 和 Nginx Basic 認證的 .htpasswd 檔案。支援 bcrypt、APR1-MD5 和 SHA-1。密碼不會發送到伺服器。

什麼是 htpasswd 檔案

htpasswd 檔案是一種純文字檔案,每一行儲存一筆 使用者名稱:雜湊密碼 資料,用於 Apache 與 Nginx 的 Basic 驗證。一般會透過伺服器上的 htpasswd 指令產生,但許多環境難以直接存取命令列或伺服器,能在瀏覽器中直接產生相同格式檔案的工具便顯得相當實用。

本工具會依照你選擇的 bcrypt、APR1-MD5 或 SHA-1 演算法將密碼雜湊化,產生 使用者名稱:雜湊值 格式的一行內容。所有雜湊運算皆透過 JavaScript 在瀏覽器端完成,明碼密碼不會經由網路傳送。產生的檔案應放置於伺服器 DocumentRoot 之外,並透過 AuthUserFile 指令引用其路徑。

.htpasswd 檔案產生步驟

  1. 新增使用者列 依需求點擊「新增使用者」按鈕,每次新增一列,一列對應一位使用者。
  2. 輸入使用者名稱與密碼 在每一列輸入使用者名稱與密碼,可利用顯示/隱藏切換來核對輸入內容。
  3. 選擇演算法與成本值 為每一列選擇 bcrypt、APR1-MD5 或 SHA-1;選擇 bcrypt 時還須調整成本值(運算強度)。
  4. 點擊生成 點擊「生成」按鈕後會立即執行雜湊運算,下方會顯示 .htpasswd 檔案內容預覽。
  5. 複製或下載 將結果複製到剪貼簿,或下載為檔案後部署到伺服器上。

用好本工具的小技巧

  • 推薦使用 bcrypt:目前最安全的演算法,適用於 Apache 2.4+ 和 Nginx。成本值越高,雜湊計算越慢,抵禦暴力破解的能力越強(通常推薦值為 10)。
  • APR1-MD5$apr1$)適用於需要相容 Apache 2.2 或更舊版本的場景,幾乎所有 Apache 和 Nginx 版本都支援。
  • SHA-1{SHA})抗碰撞性較弱,不推薦使用。僅在必須向後相容的舊環境中使用。
  • 建議將 .htpasswd 檔案放置在 Web 根目錄(DocumentRoot)之外,防止被直接訪問。
  • 務必配合 HTTPS 使用。Basic 認證的憑據僅經過 Base64 編碼,未加密,在 HTTP 連線下相當於明文傳輸。

應用情境

保護上線前的測試環境

透過簡單的 Basic 驗證,避免搜尋引擎與第三方存取尚未正式公開的測試站台。

限制未內建登入功能的管理後台

為內部管理面板、維運工具等尚未自行實作登入功能的頁面加上存取限制。

與 IP 限制搭配形成雙重防護

當僅靠 IP 白名單難以因應外部協作需求時,疊加 Basic 驗證形成雙重防線。

僅保護特定 API 端點

透過 locationDirectory 指令,只針對特定路徑而非整個網站啟用驗證。

為既有服務新增使用者

在運作中的服務新增授權使用者時,只需產生要追加的列,附加到既有檔案末尾即可。

詞彙表

Basic 驗證
HTTP 標準驗證方式之一,將使用者名稱與密碼進行 Base64 編碼後隨每次請求送出,由伺服器端進行驗證。
bcrypt
一種帶鹽值的密碼雜湊演算法,可調整成本係數,即使硬體效能提升也能維持較慢的運算速度,是目前建議採用的演算法。
APR1-MD5
Apache 自訂的 MD5 雜湊格式,雜湊值以 $apr1$ 開頭,主要為相容舊版 Apache 而保留。
SHA-1({SHA})
雜湊值以 {SHA} 開頭的格式,不使用鹽值,抗碰撞能力較弱,不建議用於新專案。
鹽值(Salt)
在雜湊運算前附加到密碼上的隨機字串,使相同密碼每次產生的雜湊值都不同,藉此抵禦彩虹表攻擊。
DocumentRoot
Web 伺服器對外公開檔案的根目錄。若將 .htpasswd 放在其中,可能會被瀏覽器直接存取到。
AuthUserFile
Apache 設定指令,用於指定 Basic 驗證所使用的 .htpasswd 檔案路徑。

常見問題

.htaccesshttpd.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。

建議優先選擇 bcrypt,適用於 Apache 2.4+ 和 Nginx。APR1-MD5 僅在需要相容舊版 Apache 時使用。除非有特殊需求,否則不要選擇 SHA-1。

將生成的行(使用者名稱:雜湊值 格式)追加到檔案末尾即可。每行對應一個使用者,空行和以 # 開頭的註釋行會被忽略。

安全。所有雜湊計算均在瀏覽器中完成,密碼不會傳輸到伺服器。請確保在 HTTPS 頁面下使用本工具,並妥善保管生成的檔案。
工具君

閒話 ― Basic 認證為何歷久不衰

HTTP Basic 認證於 1999 年由 RFC 2617 定義(後更新為 RFC 7617),原理其實極為簡單:將使用者名稱與密碼以 : 拼接,經 Base64 編碼後放入 Authorization 請求頭即可完成身份宣告。誕生至今已有二十多年,它依然是 Web 世界裡最古老、也最廣泛支援的認證方式之一。

也正是這種簡潔性,讓它歷經二十多年依然沿用至今。它常被用於測試環境、內部工具,或與 IP 白名單結合構成雙重防護——只需兩三行配置,無需額外中介軟體或資料庫,可以說是最輕量的訪問控制方案之一。這也是為什麼即便認證技術已經發展出許多更精細的方案,Basic 認證仍然在快速搭建臨時防護時被反覆選用。

當然,它也並非沒有侷限:沒有登出機制(關閉瀏覽器前會話會一直持續),不支援密碼過期管理和多因素認證。因此對於安全要求較高的正式服務,通常還是建議考慮 OAuth 2.0 或 OIDC 等更完善的方案,把 Basic 認證留給那些"快、簡單、臨時"的場景。