在宝塔面板安装SSL证书(Linux)

更新时间:
复制 MD 格式

本文介绍如何在宝塔面板配置SSL证书,以及如何验证安装结果。配置完成后,您可以通过 HTTPS 加密通道安全访问应用,确保数据传输安全。

前提条件

  • 已通过数字证书管理服务购买和申请证书(状态已签发)。如需购买和申请证书,请参见购买正式证书申请证书

  • 域名已正确解析至当前服务器,且已完成工信部 ICP 备案(适用于中国内地服务器)。

    如何查看域名解析记录以及 ICP 备案信息

    打开网络拨测工具,选择网络诊断分析,输入当前域名,确认以下信息:

    • DNS 服务商解析结果中 A 记录的 IP 为当前服务器的公网 IP。

    • 备案检查网站已备案。若显示“网站未备案,请咨询网站服务器提供商”,请完成备案后再安装证书。

  • 已在服务器上安装宝塔面板。如果尚未安装,请参见安装宝塔面板指导文档。

    说明
    • 如果您的服务器为阿里云 ECS,可参见部署宝塔面板快捷安装宝塔面板。

    • 关于宝塔面板的安装与使用,请参见宝塔官网

操作步骤

步骤一:下载SSL证书和私钥文件

  1. 进入SSL证书管理页面,定位需部署的目标证书,并确认以下信息:

    1. 证书状态:确保其为已签发。若为即将过期已过期,则需续费SSL证书

    2. 绑定域名:确保其能够匹配所有需保护的域名,否则未匹配的域名访问 HTTPS 时将出现安全警告。如需添加或修改,请参见追加和更换域名

      确认证书是否匹配目标域名

      证书的绑定域名可包含多个精确域名和通配符域名。每类域名的匹配规则如下:

      • 精确域名:仅对指定域名生效。

        • example.com 仅对 example.com 生效。

        • www.example.com 仅对 www.example.com 生效。

      • 通配符域名:仅对其一级子域名生效。

        • *.example.com 对 www.example.coma.example.com 等一级子域名生效。

        • *.example.com 对根域名 example.com 和多级子域名 a.b.example.com 不生效。

      说明

      如需匹配多级子域名,绑定域名中需包含该域名(如 a.b.example.com),或包含相应的通配符域名(如 *.b.example.com)。

  2. 单击操作列下的下载页签中,选择服务器类型其他,然后单击下载

  3. 解压下载的证书压缩包:

    • 若同时包含证书文件(.pem)和私钥文件(.key),请妥善保存上述文件,后续部署时均需使用。

    • 若仅包含证书文件(.pem),不含私钥文件(.key),需配合您本地保存的私钥文件一起部署。

      说明

      若申请证书时使用 OpenSSL、Keytool 等工具生成 CSR 文件,私钥文件仅保存在您本地,下载的证书包中不包含私钥。如私钥遗失,证书将无法使用,需重新购买正式证书并生成CSR和私钥。

步骤二:开放安全组和防火墙的443端口

启用SSL证书以支持 HTTPS 访问前,需确保 HTTPS 端口(默认 443)已开放,否则将无法通过 HTTPS 访问网站。

开放443端口

重要

如果使用非标准端口运行 HTTPS,请开放对应的端口。

Linux
  1. 在服务器终端执行以下命令,检测443端口的开放情况:

    RHEL/CentOS
    command -v nc > /dev/null 2>&1 || sudo yum install -y nc
    # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP
    sudo ss -tlnp | grep -q ':443 ' || sudo nc -l 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443

    如果输出 Ncat: Connected to <当前服务器公网 IP>:443,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。

    Debian/Ubuntu
    command -v nc > /dev/null 2>&1 || sudo apt-get install -y netcat
    # 请将以下的 <当前服务器的公网 IP> 替换为当前服务器的公网 IP
    sudo ss -tlnp | grep -q ':443 ' || sudo nc -l -p 443 & sleep 1; nc -w 3 -vz <当前服务器的公网 IP> 443

    若输出 Connection to <当前服务器公网 IP> port [tcp/https] succeeded![<当前服务器公网 IP>] 443 (https) open,则表明443端口已开放。否则需在安全组和防火墙中开放443端口。

  2. 在安全组配置开放443端口。

    请确保安全组已开放 443 端口 (TCP),否则外部无法访问服务。以下操作以阿里云 ECS 为例:

    1. 进入云服务器ECS实例页面,选择目标 ECS 实例所在地域,单击目标实例名称,进入实例详情页。

    2. 单击安全组 > 内网入方向全部规则,确保存在一条授权策略允许协议类型TCP目的端口范围HTTPS(443)授权对象任何位置(0.0.0.0/0)(或其它地址,确保 PC 可远程访问即可)的规则。

    3. 如不存在上述规则,请参照添加安全组规则在目标安全组中添加相应规则。

  3. 在防火墙中开放443端口。

    执行以下命令,识别系统当前的防火墙服务类型:

    if command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet firewalld; then
        echo "firewalld"
    elif command -v ufw >/dev/null 2>&1 && sudo ufw status | grep -qw active; then
        echo "ufw"
    elif command -v nft >/dev/null 2>&1 && sudo nft list ruleset 2>/dev/null | grep -q 'table'; then
        echo "nftables"
    elif command -v systemctl >/dev/null 2>&1 && systemctl is-active --quiet iptables; then
        echo "iptables"
    elif command -v iptables >/dev/null 2>&1 && sudo iptables -L 2>/dev/null | grep -qE 'REJECT|DROP|ACCEPT'; then
        echo "iptables"
    else
        echo "none"
    fi

    若输出为 none,则无需进一步操作。否则,请根据输出的类型(firewalldufwnftablesiptables),执行以下命令开放 443 端口:

    firewalld
    sudo firewall-cmd --permanent --add-port=443/tcp && sudo firewall-cmd --reload
    ufw
    sudo ufw allow 443/tcp
    nftables
    sudo nft add table inet filter 2>/dev/null
    sudo nft add chain inet filter input '{ type filter hook input priority 0; }' 2>/dev/null
    sudo nft add rule inet filter input tcp dport 443 counter accept 2>/dev/null
    iptables
    sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

    为避免 iptables 规则在系统重启后失效,请执行以下命令持久化 iptables 规则:

    RHEL/CentOS
    sudo yum install -y iptables-services
    sudo service iptables save
    Debian/Ubuntu
    sudo apt-get install -y iptables-persistent
    sudo iptables-save | sudo tee /etc/iptables/rules.v4 >/dev/null
Windows

1. 在安全组中开放 443 端口

请确保安全组已开放 443 端口 (TCP),否则外部无法访问服务。以下操作以阿里云 ECS 为例:

  1. 进入云服务器ECS实例页面,选择目标 ECS 实例所在地域,单击目标实例名称,进入实例详情页。

  2. 单击安全组 > 内网入方向全部规则,确保存在一条授权策略允许协议类型TCP目的端口范围HTTPS(443)授权对象任何位置(0.0.0.0/0)(或其它地址,确保 PC 可远程访问即可)的规则。

  3. 如不存在上述规则,请参照添加安全组规则在目标安全组中添加相应规则。

2. 在服务器本地防火墙中开放 443 端口

  1. 登录Windows服务器,单击左下角开始菜单,打开控制面板

  2. 点击

  3. 如果防火墙处于如下图的关闭状态,无需额外操作。image

  4. 如果防火墙已开启,请参考以下步骤放行HTTPS规则。

    1. 单击左侧,检查是否存在协议TCP,本地端口443,操作阻止的入站规则。

    2. 若存在此类规则,需要右键单击相应规则并选择属性,在常规页签,将其修改为允许连接应用

步骤三:登录宝塔面板安装SSL证书

  1. 在浏览器中登录宝塔面板。

    说明

    如果无法登录宝塔面板,可参考无法访问宝塔面板的排查思路寻求解决方案。

    如果忘记宝塔面板地址或账号密码,可通过以下方式找回:

    如何查看宝塔面板地址及账号密码?

    宝塔Linux面板

    1. 登录服务器。

    2. 执行查询命令。

      • 如果是首次登录宝塔面板,执行以下命令即可获取登录信息。

        说明

        初始密码仅在首次登录面板时显示,请妥善保管。

        bt 14
      • 如果非首次登录且忘记密码,请执行以下命令修改密码。修改成功后,使用新密码登录即可。

        bt 5

    宝塔Windows面板

    1. 登录服务器并打开宝塔配置界面。

    2. 宝塔Windows面板工具箱对话框中,查看宝塔面板地址。

    3. 在具有公网访问能力的Windows主机的浏览器中,输入宝塔面板地址访问宝塔面板。

  2. 登录后,在左侧导航栏单击网站,找到目标网站,在SSL证书列单击未部署

  3. 在本地使用文本编辑器打开步骤一中保存的证书文件(.pem)和私钥文件(.key),复制全部内容并粘贴到对应的输入框中。

  4. (可选)开启强制HTTPS:在步骤3的配置页面中,单击强制HTTPS开关。

    网站绑定 HTTPS 后,系统默认同时保留 HTTP 访问通道。直接移除 HTTP 可能导致依赖 HTTP 协议的用户无法正常访问。开启强制 HTTPS 后,所有 HTTP 请求将自动跳转至 HTTPS,既保障访问连续性,又确保通信安全。

  5. 单击保存并启用证书。完成后,页面将显示证书的有效期。

步骤四:验证SSL证书是否配置成功

  1. 在浏览器中通过 HTTPS 访问已绑定证书的域名,例如 https://yourdomain.com(需将 yourdomain.com 替换为您的实际域名)。

  2. 如果浏览器地址栏显示安全锁图标,说明证书已成功部署。如果访问异常或未显示安全锁,请先清除浏览器缓存或使用无痕(隐私)模式重试;如果问题仍然存在,请参考常见问题进行排查。

    说明

    Chrome 浏览器自 117 版本起,地址栏中的image已被新的image替代,需单击该图标后查看安全锁信息。

    单击后弹窗中将显示连接是安全的,表示该网站已启用 HTTPS 安全连接。

后续步骤(可选)

开启域名监控

建议在证书部署完成后,为域名开启域名监控功能。系统将自动检测证书有效期,并在到期前发送提醒,帮助您及时续期,避免服务中断。具体操作请参见购买并开启公网域名监控

常见问题

安装或更新证书后,证书未生效或HTTPS无法访问

常见原因如下:

如何在宝塔面板中更新(替换)SSL证书?

  1. 将新的 SSL 证书(.pem 文件)和私钥(.key 文件)下载到本地。

  2. 在宝塔面板左侧导航栏,单击网站。找到目标网站,在操作列单击设置

  3. 在站点修改弹窗中,单击左侧导航栏的SSL

  4. 在证书内容区域,将新证书的内容覆盖至对应的文本框中。

    1. .key 文件中的内容复制并替换宝塔面板中密钥(KEY)文本框中的内容。

    2. .pem 文件中的内容复制并替换宝塔面板中证书(PEM 格式)文本框中的内容。

  5. 单击保存