在服务器维护中,常因架构或服务变更,需要删除证书中某些域名(子域名),避免不必要的安全风险与维护成本。本文总结了使用 Certbot 安全移除域名的标准流程,适用于所有使用多域名(SAN)证书的场景。
🔎 背景
某服务器最初申请了包含十多个子域名的多域名证书(例如主域名、文件服务、聊天系统、监控面板等),后来由于业务调整,有三个子域名不再需要,计划将其从证书中移除。
🛠️ Certbot 的逻辑
Certbot 并不支持「直接编辑」证书来删除域名,而是通过重新申请证书并覆盖原证书来实现域名的更新。
核心原则:
在重新申请时,只需要在新的域名列表中省略要移除的域名,Certbot 会自动生成新的证书并移除不需要的域名。
✅ 操作流程
1️⃣ 查看当前证书
执行以下命令查看当前证书和域名列表:
certbot certificates
记录证书名称(比如 example.com),并核对所有包含的域名。
2️⃣ 准备新的域名列表
只保留当前仍在使用的域名。例如,原证书包含:
example.com
www.example.com
file.example.com
chat.example.com
db.example.com
app.example.com
...
如果计划移除 file.example.com、db.example.com、www.example.com,则新的域名列表只包含需要继续使用的域名。
3️⃣ 重新申请证书
根据实际环境选择使用 --nginx、--apache 或 --standalone 等插件,例如 Nginx:
certbot certonly --nginx \
-d example.com \
-d chat.example.com \
-d app.example.com \
... \
--cert-name example.com
这里使用 --cert-name 参数可以直接覆盖现有同名证书,而不是生成新证书。
4️⃣ 验证更新
执行以下命令确认新证书的域名列表已更新,且不包含被移除的域名:
certbot certificates
5️⃣ 重载或重启服务
完成证书更新后,需要重载 Web 服务(如 Nginx 或 Apache),让新证书立即生效。
systemctl reload nginx
# 或者
systemctl reload apache2
💡 注意事项
- 不需要手动删除
/etc/letsencrypt/live/下的证书文件夹,Certbot 会自动更新并管理文件。 - 若开启了 HSTS 或强制 HTTPS 策略,需确认 DNS 和应用配置也一并更新,以防出现访问异常。
- 所有删除的域名,如未关闭相关服务或 DNS 记录,用户仍可能访问到旧内容,需要同步调整。
✅ 总结
通过在重新申请命令中省略不需要的域名,Certbot 会自动更新证书并移除不再使用的域名。这种方式安全、简单、易于维护,适合所有多域名场景。