一、安装 Certbot

pip3 install certbot certbot-nginx

二、申请证书

单域名申请:

certbot certonly --manual --preferred-challenges dns -d jk.xxx.cn

泛域名申请:

certbot certonly --manual --preferred-challenges dns -d '*.xxx.cn' -d xxx.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 挑战方式,可以自动续期。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐