.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 文件生成步骤
- 添加用户行 根据需要点击"添加用户"按钮,每次添加一行,一行对应一个用户。
- 输入用户名和密码 在每一行中输入用户名与密码,可通过显示/隐藏切换来核对输入内容。
- 选择算法与成本值 为每行选择 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 文件放置在 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。用户名:哈希值 格式)追加到文件末尾即可。每行对应一个用户,空行和以 # 开头的注释行会被忽略。
闲话 ― Basic 认证为何历久不衰
HTTP Basic 认证于 1999 年由 RFC 2617 定义(后更新为 RFC 7617),原理其实极为简单:将用户名与密码以 : 拼接,经 Base64 编码后放入 Authorization 请求头即可完成身份声明。诞生至今已有二十多年,它依然是 Web 世界里最古老、也最广泛支持的认证方式之一。
也正是这种简洁性,让它历经二十多年依然沿用至今。它常被用于测试环境、内部工具,或与 IP 白名单结合构成双重防护——只需两三行配置,无需额外中间件或数据库,可以说是最轻量的访问控制方案之一。这也是为什么即便认证技术已经发展出许多更精细的方案,Basic 认证仍然在快速搭建临时防护时被反复选用。
当然,它也并非没有局限:没有注销机制(关闭浏览器前会话会一直持续),不支持密码过期管理和多因素认证。因此对于安全要求较高的正式服务,通常还是建议考虑 OAuth 2.0 或 OIDC 等更完善的方案,把 Basic 认证留给那些"快、简单、临时"的场景。