单域名、多域名、泛域名证书
HTTPS 与 SSL 证书详解:单域名、多域名、泛域名证书
示例域名:
lookstar.asia。本文延续前两篇,以 Nginx 部署网站为例。
一、HTTPS 与 SSL 证书
HTTP 传输的数据默认不加密;HTTPS 在 HTTP 和 TCP 之间使用 TLS 建立加密连接,保护数据传输,并通过证书验证服务器身份。
日常说的 SSL 证书,准确来说通常是 TLS 证书;SSL 是早期协议名称,目前网站主要使用 TLS。
HTTP → http://blog.lookstar.asia (常用 80 端口)
HTTPS → https://blog.lookstar.asia (常用 443 端口)DNS 负责将域名解析到 IP;Nginx 接收请求;证书负责让浏览器验证 HTTPS 连接的服务器身份。三者作用不同。
二、三种常见证书及覆盖范围
泛域名证书 *.lookstar.asia 不自动覆盖:
lookstar.asia # 根域名
dev.blog.lookstar.asia # 更深一层的子域名如果需要同时覆盖根域名与常见子域名,可以申请包含以下名称的证书:
lookstar.asia
*.lookstar.asia注意: 不同域名部署在不同服务器上时,可以各自申请证书,不必把同一份私钥复制到所有服务器。
三、使用 Let's Encrypt 和 Certbot 申请泛域名证书
Let's Encrypt 提供免费 TLS 证书;Certbot 用于申请和续期证书,需要在服务器上单独安装,并非 Java 8 自带组件。
以 lookstar.asia 为例,申请一张同时覆盖主域名和一级子域名的证书:
# 需要提前安装 Certbot
sudo certbot certonly --manual --preferred-challenges dns \
--cert-name lookstar.asia \
-d lookstar.asia -d '*.lookstar.asia'certonly:只申请证书,不自动修改 Nginx 配置。--manual --preferred-challenges dns:采用手动 DNS-01 验证。-d lookstar.asia:覆盖主域名。-d '*.lookstar.asia':覆盖blog.lookstar.asia、api.lookstar.asia等一级子域名。--cert-name lookstar.asia:指定 Certbot 管理的证书名称,方便引用证书路径。
DNS-01 验证原理: -d 指定需要写入证书的域名,DNS 验证用于证明你有权管理这些域名,并不是用来选择证书覆盖范围。 Let’s Encrypt 会检查 _acme-challenge.lookstar.asia 的 TXT 验证值;验证通过后才签发证书。 申请泛域名证书必须使用 DNS-01,但可通过 DNSPod API 自动添加 TXT 记录,不一定要手动操作,也不需要提前创建每个子域名。
执行后,按照 Certbot 提示,在 DNSPod 中添加 TXT 验证记录(通常是 _acme-challenge)。如果要求多个 TXT 值,应全部保留,确认 DNS 记录生效后再继续验证。
签发后可查看证书:
sudo certbot certificates一般情况下,证书文件位于:
/etc/letsencrypt/live/lookstar.asia/fullchain.pem # 证书链
/etc/letsencrypt/live/lookstar.asia/privkey.pem # 私钥续期注意: 上述手动 DNS 验证方式不能直接无人值守自动续期。生产环境建议通过 DNSPod API 配合支持 DNS-01 自动验证的 ACME 客户端或 Certbot 插件实现自动续期,并在续期后重新加载 Nginx。certbot renew --dry-run 不能代替手动验证的自动化配置。
四、常见问题与注意事项
实践建议: 多个子域名集中部署时,可采用包含 lookstar.asia 与 *.lookstar.asia 的证书;多台独立服务器应谨慎共享私钥。无论采用哪种方式,都应检查续期是否成功。
