bg-tutorials

如何在Pound上安装SSL证书

本指南将向您展示如何在 Pound(轻量级 HTTP/HTTPS 反向代理)上安装 SSL/TLS 证书。内容涵盖了大多数操作者容易出错的部分:按正确顺序构建 Pound 所需的单一合并 PEM 文件,然后编写一个可正常工作的 ListenHTTPS 配置块——该配置块会禁用过时的协议、将 Pound 指向后端,并在重启服务前通过配置检查。

关于本指南针对的是哪个 Pound 版本,先简要说明一下。最初的 Apsis Pound 项目已于 2022 年 9 月停止维护。活跃的开发工作转移到了由 Sergey Poznyakoff 维护的分支上,地址为 github.com/graygnuorg/pound,该分支现已成为规范的上游版本,也是当前 Linux 发行版打包使用的版本。以下指令与现代 4.x 系列相匹配。

为 Pound 生成 CSR

如果您已经生成了 CSR 并已拿到签发的证书文件,请直接跳转到在 Pound 上安装 SSL 证书部分。

在证书颁发机构签发证书之前,您需要提交一份 CSR(证书签名请求):一个包含您的域名信息和公钥的小文本块,与保留在服务器上的私钥配对。您有两种方式:

  • 使用我们的CSR 生成器自动生成 CSR。该工具会同时返回 CSR 和对应的私钥,您随后将其转移到服务器上。
  • 按照我们的教程如何在 Pound 上生成 CSR,直接在服务器上使用 OpenSSL 生成 CSR。私钥将保留在服务器上。

申请证书时,请粘贴完整的 CSR 内容块,包括 —–BEGIN CERTIFICATE REQUEST—–—–END CERTIFICATE REQUEST—– 这两行。如果想在提交前确认 CSR 内容,可以将其粘贴到我们的CSR 解码器中。请将对应的私钥文件(通常命名为 yourdomain.key)妥善保存在安全位置,并仅允许 root 用户读取;安装过程中您将需要用到它。

在 Pound 上安装 SSL 证书

证书颁发机构签发证书后,您通常会收到以下文件:

  • 您的主(服务器)证书,通常是以您的域名命名的 .crt.pem 文件。
  • 一个或多个中间证书,可能是单独的文件,也可能打包在一个 .ca-bundle 文件中。
  • 与您的 CSR 一起生成的私钥(一个 .key 文件)。

Pound 需要一个单一的 PEM 文件,其中包含证书、中间证书链以及未加密的私钥。graygnuorg 的官方文档明确规定了顺序:先是证书,然后是中间证书(如果有的话),最后是私钥,依此顺序排列。跳过证书链是最常见的安装错误:证书在桌面浏览器中看起来正常,但在 Android、iOS 以及命令行客户端中却会验证失败。

步骤 1:构建合并的 PEM 文件

本指南假设证书文件存放在 /etc/pound/ 目录中。请根据您的实际情况调整路径。将三个文件合并为一个 PEM 文件。下面这种通过管道传给 tee 命令的写法,是以 root 权限执行重定向操作,这是必要的,因为 /etc/pound/ 通常只有 root 用户才有写入权限(如果直接用 sudo cat … > /etc/pound/… 会失败,因为 shell 在 sudo 执行之前,就已经以您的普通用户身份打开了输出文件):

cat your_domain.crt intermediate.crt your_domain.key | sudo tee /etc/pound/your_domain.pem > /dev/null

如果 CA 提供的中间证书是一个单独的 .ca-bundle 文件,请改用以下命令:

cat your_domain.crt your_domain.ca-bundle your_domain.key | sudo tee /etc/pound/your_domain.pem > /dev/null

请将文件名替换为您自己的文件名。合并文件中的私钥必须是未加密的,因为 Pound 是以非交互方式启动的,无法提示输入密码短语。请锁定生成的文件权限,使其仅能被 root 读取:

sudo chown root:root /etc/pound/your_domain.pem
sudo chmod 600 /etc/pound/your_domain.pem

步骤 2:编辑 pound.cfg

打开 Pound 配置文件(在 Debian 和 Ubuntu 上通常是 /etc/pound/pound.cfg,在其他一些发行版上是 /etc/pound.cfg),添加一个指向合并 PEM 文件的 ListenHTTPS 配置块。一个精简的现代配置块如下所示:

ListenHTTPS
    Address 0.0.0.0
    Port 443
    Cert "/etc/pound/your_domain.pem"

    # Modern TLS only: disables SSLv2, SSLv3, TLSv1.0 and TLSv1.1,
    # leaving TLSv1.2 and TLSv1.3 enabled.
    Disable TLSv1_1
    Ciphers "ECDHE+AESGCM:ECDHE+CHACHA20:!aNULL:!MD5:!DSS"

    Service
        Backend
            Address 127.0.0.1
            Port 8080
        End
    End
End

关于上述指令,有几点需要说明:

  • Cert 指定您在步骤 1 中构建的合并 PEM 文件。官方文档明确指出,Cert 必须位于监听器内所有其他 SSL 相关指令之前,因此请将其保留在配置块的顶部。
  • Disable 会关闭指定的协议以及所有比它更旧的协议。因此,Disable TLSv1_1 会禁用 SSLv2、SSLv3、TLSv1.0 和 TLSv1.1,只保留 TLSv1.2 和 TLSv1.3,这符合当前的行业指导规范。
  • Ciphers 设置 OpenSSL 密码套件列表(用于 TLS 1.2;TLS 1.3 会自行协商密码套件)。上述列表将代理限制为使用带 AEAD 的现代 ECDHE 套件;如果您需要支持较旧的客户端,可以换用来自 ssl-config.mozilla.org 的 Mozilla “intermediate”(中级)配置方案。
  • Service / Backend 是 Pound 转发解密后流量的目标位置。示例中将流量转发到本地回环接口(端口 8080)上的单一后端;请将地址和端口替换为您应用程序实际监听的地址和端口,如果希望 Pound 进行负载均衡,可以添加更多 Backend 配置块。

如果您还希望 Pound 接受普通 HTTP 请求并转发(通常仅用于重定向到 HTTPS,参见步骤 4),请在同一文件中添加一个单独的 ListenHTTP 配置块。

步骤 3:检查配置并重启 Pound

在重新加载服务之前,请先验证配置文件,以避免因拼写错误导致代理离线。Pound 内置了检查模式:

sudo pound -c -f /etc/pound/pound.cfg

检查成功时会以状态码 0 退出,且不输出任何内容;检查失败时会以状态码 1 退出,并显示指出具体文件和行号的错误信息。如果想要明确看到”配置正常”的确认信息,可以加上 -v 参数。检查通过后,重启 Pound 使其加载新的监听器配置:

sudo systemctl restart pound

在没有 systemd 的系统上,请改用旧版的初始化脚本:

sudo /etc/init.d/pound restart

确认服务正在运行并监听 443 端口:

sudo systemctl status pound
sudo ss -tlnp | grep ':443'

步骤 4(推荐):将 HTTP 重定向到 HTTPS

为了确保直接输入裸域名的访问者能够跳转到安全的 URL,请添加一个普通的 HTTP 监听器,使其对每个请求都以永久重定向的方式响应,跳转到同一路径的 HTTPS 版本:

ListenHTTP
    Address 0.0.0.0
    Port 80
    Service
        Redirect 301 "https://example.com$1"
    End
End

example.com 替换为您自己的域名。$1 反向引用会保留原始的请求路径。再次运行 sudo pound -c -f /etc/pound/pound.cfg,然后重启服务。

测试 SSL 安装情况

在浏览器中通过 https:// 打开您的网站,检查锁形图标是否已闭合,以及证书是否与您的域名相匹配。然后使用我们的SSL 检测工具进行更深入的扫描,即时获取有关证书、证书链以及 Pound 提供的协议和密码套件的报告。检测结果干净无误,就意味着包括移动端和 API 客户端在内的所有主流平台上的客户端都会信任该证书。

常见问题

我应该安装哪个 Pound 版本?

最初的 Apsis 项目已于 2022 年停止维护。目前积极维护的分支是由 Sergey Poznyakoff 维护的 graygnuorg/pound,目前处于 4.x 系列,也是各大 Linux 发行版打包时使用的 pound 版本。如果您运行的是旧版 2.x 系列的任何版本,请计划迁移到当前版本:本指南中的配置指令均以现代分支为基础。

证书、证书链和私钥在 PEM 文件中的顺序应该是怎样的?

根据 Pound 官方文档:先是服务器证书,然后是中间证书(如果有的话),最后是私钥,全部采用 PEM 编码,放在同一个文件中。私钥不能设置密码保护,因为 Pound 是以守护进程方式启动的,无法提示输入密码。

如何在 Pound 中禁用旧版 TLS 协议?

ListenHTTPS 配置块中使用 Disable 指令。Pound 的 Disable 会关闭指定的协议以及所有比它更旧的协议,因此 Disable TLSv1_1 会禁用 SSLv2、SSLv3、TLSv1.0 和 TLSv1.1,只保留 TLSv1.2 和 TLSv1.3。这是新部署环境推荐使用的设置。

我可以在同一个 Pound 实例上托管多个 HTTPS 站点吗?

可以。Pound 支持 SNI,因此您可以在同一个 ListenHTTPS 监听器中声明多个 Cert 语句(或者让 Cert 指向一个存放 PEM 文件的目录)。Pound 会按顺序遍历这些证书,并使用第一个 Common Name 或 SAN 与请求主机名匹配的证书,因此请将更具体的证书(主机名)排在通配符证书之前。

如何在不重启的情况下测试 Pound 配置?

运行 sudo pound -c -f /etc/pound/pound.cfg-c 参数用于检查配置文件是否存在语法错误,并在不启动代理的情况下退出;退出状态码 0 表示正常,状态码 1 表示存在错误(错误信息会告知您具体是哪个文件、哪一行)。加上 -v 参数可以获得明确的成功提示信息。

我需要多久更新一次证书?

截至 2026 年 3 月 15 日,公开信任的 SSL/TLS 证书有效期上限为 200 天,且 CA/浏览器论坛已计划进一步缩短有效期(2027 年缩短至 100 天,2029 年缩短至 47 天)。请计划在每次到期之前,及时重复上述安装步骤,或使用 ACME 实现自动续期。

立即订购 SSL 证书, 可节省 10% 的费用!

快速发行, 强大加密, 99.99% 的浏览器信任度, 专业支持和 25 天退款保证. 优惠券代码 SAVE10

龙飞行的详细图像
撰写人

经验丰富的内容撰稿人, 擅长 SSL 证书. 将复杂的网络安全主题转化为清晰, 引人入胜的内容. 通过有影响力的叙述, 为提高数字安全作出贡献.