DV(Domain Validation,域名验证)证书 与 OV(Organization Validation,组织验证)证书 是 HTTPS 证书(SSL/TLS)的两种主要类型,核心区别在于 验证深度 与 信任展示。
对于个人开发者亦或是绝大多数小型项目和初创企业中,免费 DV 证书是绝对的主流。
而在过去2023 年底之前),各大云厂商(阿里云、腾讯云、华为云等)确实提供有效期为 1 年 的免费 DV 证书(主要由 TrustAsia 亚洲诚信等机构提供)。
但从 2023 年 开始,各大 CA 机构(证书颁发机构)及云平台陆续调整了策略,将免费 DV 证书的单次签发有效期统一缩短到了 3 个月(90 天)。
现在几乎没有公信力极高的“1 年期无脑免费”证书了,而为了高效应对“3 个月免费证书”,我结识了 Let's Encrypt (可颁发免费证书的主流公共信任 CA 机构)以及 ACME (自动证书管理环境)。
ACME 自动化运行的工作原理
-
发起请求:客户端向 Let's Encrypt 服务器(ACME Server)申请为目标域名签发证书。
-
触发挑战(Challenge Validation):Let's Encrypt 需要验证你确实拥有该域名的控制权,最常见的验证方式有两种:
- HTTP-01 验证:Let's Encrypt 随机给出一个令牌,客户端将其写入网站的
/.well-known/acme-challenge/路径下,Let's Encrypt 访问该 URL 成功即通过验证。 - DNS-01 验证:客户端通过 DNS 服务商的 API(如 Cloudflare、阿里云),在域名解析中自动添加一条
_acme-challenge的 TXT 记录,Let's Encrypt 检索到该 TXT 记录即通过验证(通配符证书*.domain.com必须使用此方式)。
- HTTP-01 验证:Let's Encrypt 随机给出一个令牌,客户端将其写入网站的
-
签发与下载:验证通过后,Let's Encrypt 签发新证书,客户端将其下载保存到服务器指定目录。
-
服务重载(Reload):客户端触发重载指令(如
nginx -s reload),使 Web 服务加载最新内存证书,整个过程用户无感知。
使用 Certbot
我采用的方案则是Let's Encrypt 官方推荐,适合单台 Linux/Nginx 服务器。
- 第一步:安装 Certbot
Bash1sudo apt update 2sudo apt install certbot python3-certbot-nginx -y
- 第二步:一键签发并自动配置 Nginx
Bash1sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
- 第三步:确认自动化定时任务安装 Certbot 后,系统会自动生成一个
systemctl定时器或 Cron 任务,每天自动运行两次certbot renew。 只有当证书剩余有效期不足 30 天时,它才会真正去续签,未到期时运行不做任何操作。 - 第四步:测试自动续签流程运行以下模拟命令,如果不报错,代表未来 100% 会自动续签成功:
Bash1sudo certbot renew --dry-run
其他
如果想要移除某个域名
Bash1# 找到你想删除的证书准确名称(Certificate Name) 2sudo certbot certificates 3 4# 找到目标证书的 Certificate Name 5sudo certbot delete --cert-name olddomain.com