DNS‑01 和 HTTP‑01,是Let’s‑Encrypt证书的两种域名身份验证方式
目的:证书机构要确认这个域名确实属于你本人,才发给你HTTPS证书。
🔹DNS‑01(DNS验证)
原理:在Cloudflare的DNS里面增加一条特殊的TXT记录。证书服务商读取这条TXT记录,证明域名归你。
流程:
- acme‑sh程序 →调用Cloudflare API,自动往你的域名添加一条TXT解析记录(一串乱码文字)
- Let’s‑Encrypt服务器查询域名的DNS,读到这条TXT
- ✅确认域名是你的 →下发证书;然后acme‑sh自动删掉临时TXT记录
优点:
- ✅不需要服务器80端口必须开放;就算80被防火墙拦截也可以申请证书
- ✅可以给通配符证书(
*.xxx.top)申请
缺点:
- 需要Cloudflare的API令牌,程序有权修改你的DNS;还要邮箱验证,配置麻烦(就是你现在遇到的问题)
🔹HTTP‑01(HTTP网页验证,推荐你现在用)
原理:在你的VPS网站目录里面放一个临时小文本文件;证书服务器通过http访问你的网站读取这个文件。证明域名属于你。
流程:
- acme‑sh在你服务器
/var/www/html/.well‑known/acme‑challenge/下放一个随机文本小文件 - Let’s‑Encrypt 通过**http://域名/.well‑known/acme‑challenge/xxx**访问读取文件
- ✅验证成功下发证书,程序再删除临时文件
优点:
- ✅不需要Cloudflare任何API、不需要token! 不用操作DNS,简单。
缺点: - 📌VPS服务器80端口必须对外开放可以访问(你Nginx正好开放了80,符合条件)
- ❌不能申请通配符证书
*.myfamily2027.top,只能指定明确子域名(blog、stockapi,刚好你的场景够用)
📋对比简表
| 项目 | DNS‑01 | HTTP‑01(选这个) |
|---|---|---|
| 需要Cloudflare API令牌 | ✅ 需要 | ❌不需要 |
| 依赖服务器80端口 | 不依赖 | ✅必须开放80端口 |
| 可以申请通配符*证书 | ✅可以 | ❌不可以 |
| 适合你的情况 | 麻烦,邮箱验证问题 | ✅正好,blog、stockapi两个子域名 |
你的现状:域名是
blog.myfamily2027.top和stockapi.myfamily2027.top,不需要通配符,http‑01完全够用,避开cloudflare账号验证的坑。
一个重要注意
Cloudflare是橙色代理的时候,http‑01依然可以正常工作!
但是不能把80端口设置为“始终HTTPS(Always Use HTTPS)”,证书申请阶段http请求必须允许到达VPS。申请完证书之后,再打开Always‑Use‑HTTPS。
如果你需要,我可以直接给完整的nginx80配置代码。