宝塔面板部署SSL证书的方法
最近帮好几个朋友用宝塔面板部署SSL证书,宝塔是国内用得最多的服务器管理面板,部署SSL比命令行简单很多,但有几个细节不注意还是会踩坑。这篇把完整流程和注意事项写一下。
宝塔面板简介
宝塔面板(BT Panel)是国内使用最广泛的服务器管理面板,支持CentOS、Ubuntu、Debian等主流Linux系统,图形化管理Nginx/Apache、数据库、文件、SSL证书。如果你买的是阿里云、腾讯云的ECS,宝塔几乎是标配。
部署SSL证书前,确保:
- •宝塔面板已安装并能正常登录
- •网站已添加到宝塔(”网站”菜单里有对应站点)
- •域名已解析到服务器IP
- •已申请SSL证书文件
证书可以去 sslmianfei.com 免费申请,支持单域名、通配符、IP证书,操作很方便。
方法一:手动部署证书
适合已在外部申请证书的情况,比如在sslmianfei申请的ZeroSSL证书。
第一步:准备证书文件
申请下来的证书通常有三个文件:
- •
certificate.crt:域名证书 - •
private.key:私钥 - •
ca_bundle.crt:CA中间证书
需要把 域名证书和中间证书合并成一个文件:
cat certificate.crt ca_bundle.crt > fullchain.crt
合并后的 fullchain.crt 内容长这样:
-----BEGIN CERTIFICATE-----
你的域名证书内容
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中间证书内容
-----END CERTIFICATE-----
顺序不能反,域名证书在前,中间证书在后。
第二步:宝塔后台上传证书
登录宝塔后台,按以下路径操作:
- 左侧菜单点击 网站
- 找到要部署证书的网站,点击 设置
- 在弹出窗口左侧选择 SSL
- 切换到 其他证书 标签页(不要选Let’s Encrypt,那是自动申请)
第三步:粘贴证书内容
页面上有两个文本框:
密钥(KEY) 框:粘贴 private.key 的完整内容,包括 -----BEGIN PRIVATE KEY----- 和 -----END PRIVATE KEY-----。
证书(PEM格式) 框:粘贴刚才合并的 fullchain.crt 完整内容。
粘贴完点击 保存 按钮。
第四步:开启强制HTTPS
保存证书后,下方会出现 强制HTTPS 按钮,点击开启。宝塔会自动在网站配置里添加HTTP跳转HTTPS的规则。
第五步:验证
打开浏览器访问 https://你的域名.com:
- •地址栏出现绿色小锁
- •HTTP访问会自动跳转到HTTPS
- •用 SSL证书测试工具 检测配置是否完整
方法二:宝塔自动申请Let’s Encrypt
如果不想手动申请,宝塔内置了Let’s Encrypt自动申请功能。
操作步骤
- 网站设置 → SSL → Let’s Encrypt 标签页
- 勾选要申请的域名(主域名和www子域名)
- 点击 申请
宝塔会自动完成:
- •生成CSR和私钥
- •完成DNS或文件验证
- •下载证书
- •部署到网站
- •设置自动续期
整个过程1-2分钟,完全自动化。
限制
- •只支持Let’s Encrypt品牌
- •不支持通配符证书(要通配符需要DNS API验证,配置较复杂)
- •免费版宝塔每站点最多3个域名
- •80端口必须可访问(文件验证需要)
方法三:部署通配符证书
通配符证书(*.example.com)覆盖主域名下所有子域名,部署方法略有不同。
申请通配符证书
在 sslmianfei.com 输入 *.example.com,选择DNS验证。验证通过后下载证书文件。
宝塔部署
通配符证书部署到主域名:
- 网站设置 → SSL → 其他证书
- 粘贴fullchain和私钥
- 保存
- 开启强制HTTPS
注意:通配符证书不能直接用于主域名 example.com,需要在申请时同时包含 *.example.com 和 example.com(SAN多域名),否则访问主域名会报证书不匹配。
Nginx配置优化
宝塔默认的SSL配置已经可用,但可以做进一步优化。网站设置 → 配置文件,找到SSL部分,建议改成:
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
# OCSP装订
ssl_stapling on;
ssl_stapling_verify on;
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
保存后点击 重载配置 生效。
常见问题排查
证书不匹配错误
访问域名提示证书不匹配,常见原因:
- •申请证书时填的域名和实际访问域名不一致
- •通配符证书没覆盖主域名
- •部署到了错误的网站
解决:用 证书查看工具 解析证书,确认SAN字段覆盖了你要访问的域名。
证书链不完整
浏览器报”证书不受信任”但证书本身有效。检查fullchain是否包含了中间证书。宝塔后台部署时如果只填了域名证书没填CA Bundle,就会出现这个问题。
私钥不匹配
宝塔保存证书时提示”私钥不匹配”。原因:
- •复制私钥时少了开头或结尾的标记
- •私钥和证书不是同一对
- •私钥被加密了(带ENCRYPTED字样)
解决:重新下载证书文件,确保私钥以 -----BEGIN PRIVATE KEY----- 开头、-----END PRIVATE KEY----- 结尾,中间内容完整无空格。
HTTP跳转HTTPS失效
强制HTTPS按钮已开启但还是能用HTTP访问。检查网站配置文件:
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
这段代码应该在server 80端口的配置块里。如果没有,手动添加。
端口443未开放
阿里云、腾讯云的安全组要放行443端口。宝塔的防火墙也要放行:
- •云服务商控制台 → 安全组 → 添加规则 → 放行443/TCP
- •宝塔 → 安全 → 防火墙 → 放行443端口
续期问题
Let’s Encrypt证书90天过期,宝塔会自动续期。ZeroSSL证书也是90天,需要手动续期。建议在宝塔的 计划任务 里添加提醒,或者用脚本定时检查证书到期时间。
多站点部署
一台服务器上多个网站每个都需要单独部署SSL证书:
- 每个网站在宝塔”网站”菜单单独添加
- 每个网站单独设置SSL
- 通配符证书可以一份证书部署到多个子域名站点
宝塔免费版支持多站点,但每个站点SSL配置独立保存。
部署后检查清单
部署完成后建议做一次全面检查:
- •[ ] HTTPS访问正常,地址栏有绿锁
- •[ ] HTTP自动跳转到HTTPS
- •[ ] 证书链完整(用浏览器查看证书路径有3层)
- •[ ] HSTS头部已发送
- •[ ] TLS 1.0和1.1已禁用
- •[ ] 443端口外部可访问
- •[ ] 证书有效期还有60天以上
可以用 SSL测试工具 一次性检测所有项目。
最后
宝塔部署SSL证书整体来说比命令行简单很多,手动部署三部曲:合并证书链 → 粘贴fullchain和私钥 → 开启强制HTTPS。最容易踩的坑是证书链合并和私钥格式,这两点注意了基本就稳了。
自动申请方案虽然省事,但功能有限,需要通配符或多品牌证书还是建议手动部署。希望这篇教程对使用宝塔的朋友有帮助。