# HTTPS 证书申请与自动续期

Canonical: https://vpsmap.net/guides/https-certificates/
Updated: 2026-09-16

证书申请需要证明域名控制权。HTTP 验证依赖正确解析和可访问的验证路径；DNS 验证则需要正确的 DNS 记录或受限 API 凭据。

## 1. 先把域名和验证路径接通

HTTPS 需要证书包含你正在访问的域名，服务器使用匹配的私钥，并能提供完整证书链。只把网址从 http 改成 https 不会自动获得证书。

申请前确认 A/AAAA 指向正确位置，服务器时间同步，网站可访问。HTTP-01 验证通常需要公网 80 端口；DNS-01 通过 DNS TXT 验证，适合通配符证书或不能开放 HTTP 的环境。选择方式后，要同时考虑下次如何自动续期。

## 2. 宝塔中为单个站点配置证书

进入“网站 → 对应站点 → SSL”。使用面板支持的 ACME/Let's Encrypt 入口申请，或在已有证书入口填写匹配的私钥与证书链。域名列表只包含自己控制且需要服务的名称。

![宝塔站点的 SSL 证书配置入口](/tutorial-media/bt-ssl.png)

HTTP 验证失败时先检查解析、IPv6、80 端口和验证目录是否被重定向或认证拦截。DNS 验证使用最小权限令牌，限制到所需域名区域，不能把整个 DNS 账户的主密钥贴进公开教程。

## 3. 手工 Nginx 使用 Certbot

已经由宝塔或 Caddy 管理证书时，先沿用现有管理方式，避免多个客户端同时改配置。手工 Nginx 环境可按 Certbot 官方安装选择器安装适合系统的版本，再备份 Nginx 配置并申请。

```bash
sudo nginx -t
sudo certbot --nginx -d example.com -d www.example.com
```

这会启动域名验证并可能修改 Nginx 配置。只填写已经解析并准备使用的域名；没有 www 站点就不加它。按提示完成账户和证书选项，成功后检查生成的站点配置与证书路径。

## 4. 验证 HTTPS 后再强制跳转

```bash
curl -I https://example.com/
curl -I http://example.com/
```

HTTPS 应返回预期站点且没有证书错误。确认后让 HTTP 通过 301/308 跳到 HTTPS，避免多次跳转。WordPress 还要核对站点地址和数据库里的旧资源链接，不能只在代理层跳转就认为所有图片已改为 HTTPS。

如果有 CDN，浏览器到 CDN 与 CDN 到源站是两段连接，应使用有效源站证书和正确的加密模式。不要用关闭源站验证或浏览器忽略错误作为永久修复。

## 5. 实测续期，不只看定时器存在

```bash
sudo certbot certificates
sudo certbot renew --dry-run
systemctl list-timers --all
```

按安装方式检查自动续期任务。续期成功后，Web 服务还需要加载新证书；已有集成通常会处理，手动部署应配置正确的 deploy hook。DNS API 令牌失效、目录迁移或端口关闭，都可能导致几周后的续期失败。

HSTS 会让浏览器长期强制 HTTPS，确认所有相关域名和子域名都准备好后再考虑启用，初次部署不必直接加 preload。

## 6. 常见故障按证书链路处理

域名不匹配，检查 SAN 与访问地址；证书不受信任，检查链是否完整、是否用到测试证书；跳转循环，检查代理传递的 HTTPS 信息和应用站点地址；部分用户失败，检查错误 AAAA 或旧缓存。

维护时记录证书到期时间并设置外部检查。更多见[域名解析](/guides/dns/)、[WordPress 迁移](/guides/wordpress-migration/)与[站点监控](/guides/uptime-monitoring/)。
