一、安装 Certbot
pip3installcertbot certbot-nginx二、申请证书
单域名申请:
certbot certonly--manual--preferred-challenges dns-djk.xxx.cn泛域名申请:
certbot certonly--manual--preferred-challenges dns-d'*.xxx.cn'-dxxx.cn命令详解:
--manual:使用手动交互模式获取证书,不依赖 Web 服务或 DNS 插件。--preferred-challenges=dns:指定 DNS 方式验证,使用 DNS TXT 记录进行验证。-d '*.xxx.cn':泛域名,覆盖所有子域名(如 wiki.xxx.cn、jk.xxx.cn 等)。-d xxx.cn:主域名。
三、添加 DNS TXT 验证记录
执行申请命令后,Certbot 会暂停并提示你需要添加的 DNS TXT 记录值。此时请前往你的域名 DNS 管理后台,添加对应的主机记录(通常为_acme-challenge)及 TXT 记录值。
四、验证 DNS 生效
添加记录后,不要立即按回车,先在终端验证 DNS 是否已生效:
dig_acme-challenge.xxx.cn TXT注意:一定要等到命令返回的 TXT 记录值与 Certbot 提示的一致,再按回车继续。DNS 传播时间通常需要 1-5 分钟,也可能更长时间。
验证通过后,Certbot 将成功签发证书:
Successfully received certificate. Certificate is saved at: /etc/letsencrypt/live/xxx.cn/fullchain.pem Key is saved at: /etc/letsencrypt/live/xxx.cn/privkey.pem This certificate expires on 2026-09-08. These files will be updated when the certificate renews.五、配置 Nginx
手动配置 Nginx 以应用申请到的证书:
server { listen 443 ssl; server_name xxx.cn *.xxx.cn; ssl_certificate /etc/letsencrypt/live/xxx.cn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/xxx.cn/privkey.pem; # 其他配置... }附录:为什么 DNS-01 适合内网环境?
- 不依赖 80 端口:DNS-01 验证只需要在 DNS 管理后台添加 TXT 记录,Let’s Encrypt 服务器会通过 DNS 查询来验证域名所有权,完全绕过了 HTTP 请求。
- 适用于内网 IP:即使你的服务器只有内网 IP,只要域名能正常提供 DNS 服务(解析记录可查),就能成功申请证书。
- 支持泛域名:如果你想申请
*.xxx.cn这样的泛域名证书,DNS-01 是唯一支持的方式。
附录:自动续期问题
由于使用--manual模式,Certbot 无法自动续期证书,需要你每 90 天手动重复上述步骤(Let’s Encrypt 证书有效期为 90 天)。
如果你需要自动化续期,可以考虑以下方案:
- 使用 acme.sh 脚本:它支持多种 DNS API 的自动验证,可以完全自动化。
- 使用 Nginx Proxy Manager:它内置了 Let’s Encrypt 集成,支持 DNS 挑战方式,可以自动续期。