面板与 NAS

宝塔面板配置 SSL 证书教程

作者: · 最后核实

宝塔面板在站点的“设置 → 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 页面打开 强制 HTTPS 开关,宝塔会在站点配置里加上 HTTP 跳 HTTPS 的规则。不要在伪静态或配置文件里再手动加一遍跳转。确认全站正常后,可以按 开启 HSTS 加上 HSTS。

验证

配置正确时,证书颁发者是 Let's Encrypt(或你部署的 CA),HTTP 请求跳转到 HTTPS。用 SSL 证书检查 从外部检查,或在终端运行:

curl ssl.sh/example.com

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

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 监控(开发中)。

常见问题排查

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

常见问题

宝塔申请 Let's Encrypt 一直验证失败怎么办?

先确认三件事:域名解析指向这台服务器、80 端口在安全组和宝塔防火墙里都已放行、域名已备案。再检查网站是否开了防盗链、访问限制、伪静态规则或 WAF,这些都可能拦截 /.well-known/acme-challenge/。实在不行改用 DNS 验证。

宝塔里的证书能用在多个网站上吗?

可以。证书签发后会保存到证书夹,其他覆盖相同域名的网站可以直接从证书夹部署。通配符证书(*.example.com)适合一次覆盖多个子域名站点,需要用 DNS 验证申请。

不想用宝塔续签,能改用 acme.sh 吗?

可以。用 acme.sh + 阿里云 DNS/DNSPod 签发证书,用 --install-cert 把证书写到宝塔站点的证书目录并把 --reloadcmd 设为 nginx -s reload(按宝塔 Nginx 的实际路径调整),同时在宝塔里关闭这个站点的自动续签,避免两边互相覆盖。

资料来源

  1. 宝塔面板官方文档
  2. Let's Encrypt: Challenge Types
  3. Let's Encrypt: Rate Limits