在部署网站或服务时,SSL 证书已经成为必不可少的配置项。如果你使用 Nginx 或 Apache 托管多个域名,一个非常常见的问题就是:如何高效管理多个域名的 HTTPS 证书?
幸运的是,Certbot 提供了强大的功能,能够自动为多个域名签发和续期 Let’s Encrypt 的免费 SSL 证书。本文将介绍如何使用 Certbot 管理多个域名的证书,提升安全性同时减轻运维负担。
Certbot 简介
Certbot 是由 EFF(电子前哨基金会)开发的一个开源工具,用于从 Let’s Encrypt 获取免费 SSL/TLS 证书,并自动为 Web 服务器进行配置。
安装 Certbot
以 Ubuntu 为例:
sudo apt update
sudo apt install certbot python3-certbot-nginx
单次申请多个域名的证书
Certbot 支持一次为多个域名申请证书。这在多个子域名或绑定多个网站时非常有用。
例如:
sudo certbot --nginx -d example.com -d www.example.com -d blog.example.com
这会生成一个包含所有指定域名的通配证书,并自动配置到 Nginx 中。
分别申请多个域名的证书(推荐做法)
如果你希望不同的域名分开管理(例如每个域名一个项目、一个服务器块),可以为它们分别申请证书:
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot --nginx -d mysite.com -d www.mysite.com
这样每个证书会被保存到独立的路径中,方便你在配置时按域名归档管理。
自动续期
Certbot 安装时会自动创建系统定时任务,执行证书续期:
sudo certbot renew --dry-run
建议定期手动测试一次干运行以确保配置无误。
多证书与 Nginx 配置示例
你的 Nginx 配置可能长这样(两个域名对应两个 server):
server {
listen 443 ssl;
server_name example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
...
}
server {
listen 443 ssl;
server_name mysite.com;
ssl_certificate /etc/letsencrypt/live/mysite.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mysite.com/privkey.pem;
...
}
常见问题解答
Q1:多个域名用一个证书好,还是分开好?
A:如果这些域名属于同一个项目,统一管理没问题;但出于安全与维护分离的考虑,推荐每个域名一个证书。
Q2:是否支持通配符域名?
A:支持,但需要使用 DNS 方式验证。例如:
sudo certbot -d '*.example.com' --manual --preferred-challenges dns certonly
总结
通过 Certbot 管理多个域名的 SSL 证书不仅免费高效,而且配合 Nginx 可实现全自动配置与续期。对于部署多个项目或服务的开发者来说,是一个非常值得掌握的工具。