所有入门指南 快速开始

HTTP-01 验证:工作原理与操作指南

HTTP-01 是获取 SSL 证书时最常用的 ACME 验证类型。证书颁发机构 (CA) 通过 HTTP 80 端口从你的 Web 服务器获取指定文件来验证域名控制权。它比 DNS-01 更简单,但不能用于 通配符证书

工作原理

  1. Let’s Encrypt 给你一个 token(随机字符串)
  2. 你在 http://yourdomain.com/.well-known/acme-challenge/{token} 创建一个文件
  3. 文件内容是 key authorization — token 与你 ACME 账户密钥指纹的组合
  4. Let’s Encrypt 从公网访问该 URL
  5. 如果内容匹配,验证通过,证书即被签发

使用 GetHTTPS 时,第 1 步和第 3 步自动完成 — 你只需将屏幕上显示的值放到服务器上的文件中。

如何放置验证文件

通过 SSH(Linux/Nginx/Apache)

# Create the directory
mkdir -p /var/www/html/.well-known/acme-challenge/

# Create the file with the exact values from GetHTTPS
echo "KEY_AUTHORIZATION_FROM_GETHTTPS" > /var/www/html/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS

# Verify it's accessible
curl http://yourdomain.com/.well-known/acme-challenge/TOKEN_FROM_GETHTTPS

通过 cPanel 文件管理器

  1. 进入 public_html
  2. 创建文件夹 .well-known → 在其中创建文件夹 acme-challenge
  3. 创建一个以 token 值命名的文件
  4. 将 key authorization 粘贴为文件内容
  5. 确保权限为 644(Web 服务器可读)

通过 FTP

  1. 连接到站点根目录
  2. 创建 .well-known/acme-challenge/ 目录路径
  3. 上传一个以 token 命名的文本文件,内容为 key authorization

服务器配置

某些 Web 服务器需要额外配置才能提供 .well-known 目录中的文件:

Nginx

# Add to your server block if .well-known returns 404
location /.well-known/acme-challenge/ {
    root /var/www/html;
    allow all;
}

Apache

Apache 通常默认提供 .well-known 目录。如果不行:

Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
<Directory "/var/www/html/.well-known/acme-challenge/">
    AllowOverride None
    Options None
    Require all granted
</Directory>

Node.js / Express

app.use('/.well-known/acme-challenge', express.static('challenges'));

要求

  • 域名必须解析到你服务器的公网 IP 地址
  • 80 端口必须开放 — Let’s Encrypt 始终通过 HTTP 验证,而非 HTTPS
  • 响应必须返回 HTTP 200 OK
  • 不能跨域重定向 — 同域名的 HTTP→HTTPS 重定向可以
  • 文件必须无需认证即可访问(不能有 Basic Auth 或登录拦截)

何时使用 HTTP-01

场景适合 HTTP-01?
单域名证书✅ 是 — 最简单的选项
域名 + www 证书✅ 是 — 每个名称一次验证
通配符证书(*.example.com❌ 否 — 使用 DNS-01
80 端口被封❌ 否 — 使用 DNS-01
在 Cloudflare 代理后面⚠️ 可能需要先将 DNS 切换为仅 DNS(灰色云朵)
完全没有服务器访问权限❌ 否 — 使用 DNS-01(只需 DNS 访问权限)

HTTP-01 与 DNS-01 对比

HTTP-01DNS-01
操作内容在服务器上放置文件在 DNS 中添加 TXT 记录
所需权限Web 服务器文件系统域名 DNS 设置
端口要求80 端口开放
通配符支持
速度即时(文件可访问的前提下)1-15 分钟(DNS 传播)
CDN 后是否可用⚠️ 可能需要绕过 CDN✅ 始终可用
最适合大多数单域名证书通配符、无服务器、CDN 场景

故障排除

验证文件返回 404

  • 检查路径是否正确 — 必须是 /.well-known/acme-challenge/TOKEN,不要多余的斜杠
  • 检查文件权限 — chmod 644
  • Nginx: 配置可能阻止了点文件(dotfiles)。添加上述 location
  • cPanel: 文件管理器可能隐藏了 .well-known — 启用”显示隐藏文件”

文件可访问但验证仍然失败

  • 从外部网络检查: 从另一台机器运行 curl http://yourdomain.com/.well-known/acme-challenge/TOKEN 或使用在线工具
  • DNS 可能指向其他服务器 — 用 dig +short yourdomain.com 确认返回的是你服务器的 IP
  • Cloudflare 代理: 验证期间临时切换为仅 DNS(灰色云朵)

80 端口被封

某些主机或防火墙会封锁 80 端口。解决方案:

  1. 开放 80 端口(哪怕只是在验证期间临时开放)
  2. 改用 DNS-01 验证 — 不需要 80 端口
  3. 联系主机商,要求允许 .well-known 路径通过代理

”too many requests” 错误

你触发了 Let’s Encrypt 的速率限制。等待后重试。GetHTTPS 的预检功能会在提交前验证文件是否可访问,帮助避免浪费请求次数。

常见问题

获取证书后可以删除验证文件吗?

可以。该文件仅在验证时需要。证书签发后,删除 .well-known/acme-challenge/ 目录及其内容即可。续签时会创建新文件。

文件需要通过 HTTPS 提供吗?

不需要。Let’s Encrypt 的 HTTP-01 验证始终通过**明文 HTTP(80 端口)**进行,即使你的站点支持 HTTPS。同域名的 HTTP→HTTPS 重定向会被跟随,但初始请求始终是 HTTP。

一张证书包含多个域名时能用 HTTP-01 吗?

可以。证书中的每个域名需要各自的验证文件。如果你申请 example.comwww.example.com 的证书,需要放置两个文件 — 每个域名一个 token。GetHTTPS 会依次处理它们。

GetHTTPS 中的”预检”是什么?

在向 Let’s Encrypt 提交之前,GetHTTPS 会验证你的验证文件是否能从公网访问(通过 Google 的 DNS-over-HTTPS)。这能在消耗速率限制次数之前捕获配置错误 — 这是其他浏览器端工具所没有的功能。

相关文章

快速开始 2026-05-08
如何获取免费 SSL 证书(分步指南)
5 分钟从 Let's Encrypt 获取免费 SSL 证书 — 无需安装软件、无需注册账号。涵盖 4 种方法、两种验证方式、6 个平台的安装教程和故障排除。
快速开始 2026-05-08
DNS-01 验证:工作原理与操作指南
DNS-01 验证通过在 DNS 中添加 TXT 记录来证明域名所有权。通配符证书必须使用此方式。涵盖 Cloudflare、Route 53、GoDaddy、Namecheap 等的设置方法。
快速开始 2026-05-07
如何免费获取通配符 SSL 证书
使用 GetHTTPS 从 Let's Encrypt 免费获取通配符 SSL 证书 (*.example.com)。仅需 DNS-01 验证。涵盖 Cloudflare、Route 53、GoDaddy 和 Namecheap DNS 设置。
在浏览器中获取免费 SSL 证书
无需安装,无需账号。私钥始终留在你的设备上。
获取证书