.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 接口

通过 location 或 Directory 指令,只对特定路径而非整个站点启用认证。

为现有服务追加新用户

在正在运行的服务中新增授权用户时,只需生成追加的行,附加到现有文件末尾即可。

术语表

Basic 认证
HTTP 标准认证方式之一,将用户名和密码进行 Base64 编码后随每次请求发送,由服务器端进行校验。
bcrypt
一种带盐的密码哈希算法,可调节成本因子,即便硬件性能提升也能保持较慢的计算速度,是目前推荐使用的算法。
APR1-MD5
Apache 自有的基于 MD5 的哈希格式,哈希值以 $apr1$ 开头,主要为兼容旧版 Apache 而保留。
SHA-1({SHA})
哈希值以 {SHA} 开头的格式,不使用盐值,抗碰撞能力较弱,不建议用于新项目。
盐值(Salt)
在哈希计算前附加到密码上的随机字符串,使相同密码每次生成的哈希都不同,从而抵御彩虹表攻击。
DocumentRoot
Web 服务器对外公开文件的根目录。若将 .htpasswd 放在其中,可能会被浏览器直接访问到。
AuthUserFile
Apache 配置指令,用于指定 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。

建议优先选择 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 认证留给那些"快、简单、临时"的场景。