# HTTP-01（HTTP-01 验证）是什么？

> HTTP-01 是一种 ACME 验证方式，客户端通过 80 端口以普通 HTTP 提供 CA 指定的令牌内容来证明域名控制权。

Source: https://ssl.sh/zh/glossary/http-01/
Last updated: 2026-11-10

HTTP-01 是最常用的 [ACME](https://ssl.sh/zh/glossary/acme/) 质询类型。CA 给客户端一个令牌（token），客户端把密钥授权内容（令牌加账户公钥指纹）放到 http://example.com/.well-known/acme-challenge/TOKEN，CA 再按 [MPIC](https://ssl.sh/zh/glossary/mpic/) 要求从多个网络视角来访问。验证总是从 80 端口开始，CA 会跟随重定向，包括跳转到 443 端口的 HTTPS。宝塔面板申请 Let's Encrypt 时的“文件验证”就是 HTTP-01。

## 为什么重要
HTTP-01 不需要 DNS 权限，任何 Web 服务器都能用，Certbot 等客户端还能自动修改 nginx 或 Apache 配置。它的限制同样重要：不能用于[通配符证书](https://ssl.sh/zh/glossary/wildcard-certificate/)；80 端口必须能从公网访问；负载均衡后面的每台服务器都要返回同样的内容。在中国大陆的云服务器上，未完成 ICP 备案的域名访问 80/443 端口通常会被云厂商拦截，导致 HTTP-01 失败。证书签发本身与备案无关，这种情况可以改用 [DNS-01](https://ssl.sh/zh/glossary/dns-01/)。

## 例子
在 nginx 中放行验证路径，其余请求跳转到 HTTPS：

```nginx
server {
    listen 80;
    server_name example.com;

    location ^~ /.well-known/acme-challenge/ {
        root /var/www/html;
        default_type "text/plain";
    }

    location / {
        return 301 https://$host$request_uri;
    }
}
```

申请证书前先自测路径能否访问：

```bash
mkdir -p /var/www/html/.well-known/acme-challenge
echo ok > /var/www/html/.well-known/acme-challenge/test
curl -i http://example.com/.well-known/acme-challenge/test
```

## 常见误区
- **配置了 HTTP 跳转 HTTPS 就会导致 HTTP-01 失败。** CA 会跟随跳转，真正导致失败的是关闭 80 端口或被防火墙拦截。
- **只放行 CA 的 IP 就够了。** 验证来自多个且会变化的网络位置。
- **HTTP-01 可以申请 *.example.com。** 通配符域名必须用 DNS-01。

## 相关术语

- [ACME](https://ssl.sh/zh/glossary/acme/): ACME 是 IETF 标准协议（RFC 8555），让软件自动向 CA 证明域名控制权，并自动申请、续期和吊销证书。
- [DCV](https://ssl.sh/zh/glossary/dcv/): DCV 即域名控制权验证，是 CA 在签发证书前确认申请者确实控制证书中每一个域名的检查。
- [DNS-01](https://ssl.sh/zh/glossary/dns-01/): DNS-01 是一种 ACME 验证方式，客户端在 _acme-challenge 子域名下发布由 CA 质询计算出的 TXT 记录来证明域名控制权。
- [TLS-ALPN-01](https://ssl.sh/zh/glossary/tls-alpn-01/): TLS-ALPN-01 是一种 ACME 验证方式，服务器在 443 端口针对 acme-tls/1 协议出示一张特殊证书来证明域名控制权。
- [MPIC](https://ssl.sh/zh/glossary/mpic/): MPIC 是要求 CA 从多个网络位置重复进行域名验证和 CAA 检查、只有足够多位置结果一致才签发证书的规则。
- [通配符证书](https://ssl.sh/zh/glossary/wildcard-certificate/): 通配符证书是名称以星号开头（如 *.example.com）、可匹配该域名下任意一级子域名的 TLS 证书。
- [反向代理](https://ssl.sh/zh/glossary/reverse-proxy/): 反向代理是代表后端服务器接收客户端连接、再把请求转发给后端的服务器，通常同时承担 TLS 终止。
