# 宝塔面板 SSL 证书：Let's Encrypt 申请、强制 HTTPS 与自动续签

> 在宝塔 Linux 面板为网站申请 Let's Encrypt 免费证书（文件验证或 DNS 验证）、部署自己的证书、开启强制 HTTPS，并确认计划任务自动续签。

Source: https://ssl.sh/zh/guides/bt-panel-ssl/
Last updated: 2026-11-10

宝塔面板在站点的“设置 → SSL”页面申请 Let's Encrypt 免费证书（文件验证或 DNS 验证），签发后自动部署；再打开“强制 HTTPS”开关，HTTP 就会跳转到 HTTPS。宝塔的计划任务会在证书到期前自动续签。

适用于宝塔 Linux 面板 9.x 及以上版本，各版本菜单和标签名称略有差异，以面板实际界面为准。

## 前提条件

申请证书前，域名要解析到服务器，并满足文件验证或 DNS 验证其中一种条件。

- 已安装宝塔 Linux 面板，网站已在“网站”列表中创建，绑定了 `example.com` 和 `www.example.com`。
- 域名的 A 记录指向服务器公网 IP，例如 `203.0.113.10`。
- 服务器在中国大陆的，域名已完成 ICP 备案。
- 文件验证需要：云服务器安全组和宝塔“安全”页面都放行 80、443 端口。
- DNS 验证需要：域名 DNS 在阿里云、DNSPod、Cloudflare 等宝塔支持的服务商，并准备好只读写解析权限的 API 密钥。

## 第一步：打开网站的 SSL 设置

证书的申请、部署和强制 HTTPS 都在站点的 SSL 页面里完成。在宝塔面板的网站列表找到站点，点 **设置 → SSL**，页面会显示当前证书状态，以及申请免费证书、部署已有证书等选项。

## 第二步：申请 Let's Encrypt 证书

Let's Encrypt 证书有文件验证和 DNS 验证两种方式，通配符证书只能用 DNS 验证。在 SSL 页面选择 Let's Encrypt（部分版本放在“测试证书”或“申请证书”入口下）：

- **文件验证**：宝塔把验证文件写到网站目录下，Let's Encrypt 通过 80 端口访问。勾选要包含的域名（`example.com`、`www.example.com`），点击申请。
- **DNS 验证**：选择 DNS 接口（阿里云、DNSPod 等），首次使用填写 AccessKey/SecretKey 或 Token，宝塔会自动添加和删除 `_acme-challenge` TXT 记录。申请通配符证书 `*.example.com` 只能用这种方式。

签发成功后，宝塔会自动把证书部署到该站点并重载 Nginx/Apache。

## 第三步：部署自己的证书（可选）

使用阿里云、腾讯云或商业 CA 的证书时，在 SSL 页面选择部署已有证书（“当前证书”或“其他证书”，以面板为准）：

- **密钥（KEY）**：粘贴私钥，以 `-----BEGIN PRIVATE KEY-----` 或 `-----BEGIN RSA PRIVATE KEY-----` 开头。
- **证书（PEM 格式）**：粘贴完整证书链，站点证书在前、中间证书在后。云厂商下载的 Nginx 格式证书文件通常已经包含中间证书。

保存后宝塔会写入配置并重载服务。中间证书的原理见 [安装中间证书](https://ssl.sh/zh/guides/install-intermediate-certificate/)。

## 第四步：开启强制 HTTPS

证书部署成功后，在 SSL 页面打开 **强制 HTTPS** 开关，宝塔会在站点配置里加上 HTTP 跳 HTTPS 的规则。不要在伪静态或配置文件里再手动加一遍跳转。确认全站正常后，可以按 [开启 HSTS](https://ssl.sh/zh/guides/enable-hsts/) 加上 HSTS。

## 验证

配置正确时，证书颁发者是 Let's Encrypt（或你部署的 CA），HTTP 请求跳转到 HTTPS。用 [SSL 证书检查](https://ssl.sh/zh/tools/ssl-checker/) 从外部检查，或在终端运行：

```bash
curl ssl.sh/example.com
```

在服务器上检查宝塔保存的证书文件（目录名以站点名为准）：

```bash
openssl x509 -in /www/server/panel/vhost/cert/example.com/fullchain.pem -noout -subject -issuer -dates
curl -sI http://example.com | grep -iE '^(HTTP|location)'
```

## 自动续期

宝塔会添加一个续签 Let's Encrypt 证书的计划任务（在“计划任务”页面可以看到，名称以面板为准），每天检查，到期前自动续签并重新部署。续签要一直成功，需要注意三点：

- 计划任务没有被删除或停用，执行日志里没有报错。
- 续签时验证条件仍然成立：文件验证要 80 端口可访问、网站没有拦截验证路径；DNS 验证要 API 密钥仍然有效。
- 证书有效期在缩短：Let's Encrypt 默认证书 2027 年 2 月 10 日起为 64 天，2028 年 2 月 16 日起为 45 天，续签会更频繁。

Let's Encrypt 从 2025 年 6 月 4 日起不再发到期提醒邮件，宝塔自带的告警之外，建议再把域名加到 [ssl.sh 监控](https://ssl.sh/zh/monitor/)（开发中）。

## 常见问题排查

- **验证失败、连接超时**：80 端口不通、未备案被拦截、解析没生效或指向了 CDN，见 [certbot 连接超时](https://ssl.sh/zh/errors/certbot-timeout-during-connect/)，原因相同；改用 DNS 验证可以绕开端口问题。
- **验证文件返回 404 或 403**：伪静态规则、防盗链、WAF 拦截了 `/.well-known/acme-challenge/`，临时关闭或为该路径放行。
- **too many certificates already issued**：反复申请触发了频率限制，见 [Let's Encrypt 频率限制](https://ssl.sh/zh/errors/lets-encrypt-rate-limit/)。
- **CAA 记录阻止签发**：域名的 CAA 记录没有允许 `letsencrypt.org`，见 [CAA 记录阻止签发](https://ssl.sh/zh/errors/caa-record-prevents-issuance/)。
- **手机或小程序提示证书不可信**：部署自有证书时只粘贴了站点证书，见 [缺少中间证书](https://ssl.sh/zh/errors/missing-intermediate-certificate/)。
