本文介绍如何将 HAProxy 配置为使用 LetsEncrypt 自动管理证书,以确保 HAProxy 后面的 Web 服务器上的证书受到 SSL 安全保护。
在开始配置之前,有以下要点需要说明:
- 你必须有权管理 Web 服务器域名所在的 DNS 区域。
- LetsEncrypt 分发证书时必须证明你是域的所有者。有两种验证方式:一是让 LetsEncrypt 使用公开可用的 DNS 记录与客户端(本示例中为 HAProxy)通信;二是检查 DNS 区域内的特定记录,若找到则证明你拥有管理权限。本示例使用第二种方法。
基本操作流程:
互联网上的 Web 浏览器访问网站时,浏览器通过 DNS 解析到的 IP 地址发送请求。HAProxy 接收该请求,并建立到内部 Web 服务器的连接,充当浏览器与 Web 服务器之间的代理。
LetsEncrypt 的信任建立分为两个阶段:初次获取证书或旧证书即将到期时获取新证书。信任阶段的流程如下:
- 请求 HAProxy 生成密钥,并根据你的密钥将所需的身份信息发送给 LetsEncrypt。
- LetsEncrypt 为你创建一个帐户并回复验证信息。
- LetsEncrypt 要求你在相应的 DNS 区域中创建并填充一个新的 TXT 记录。
- 你创建 TXT 记录,并通知 LetsEncrypt 进行验证。
- LetsEncrypt 验证 TXT 记录后,确认你的帐户与该域关联。
下面开始配置步骤。
1. 安装并配置 LetsEncrypt 插件
登录 pfSense,安装 “acme” 插件。

安装完成后,依次进入 服务 > Acme > 帐户密钥 选项卡。
按下方示例填写信息,ACME Server 选择 Production(也可以选用 Test 服务器)。点击 Create New Account Key,注册 ACME 帐户密钥后点击 Save 保存。

切换到 Certificates 选项卡,点击 Add 添加新证书。

按下方示例填写:域名字段输入完整的 FQDN,Method 选择 DNS-Manual(你也可以根据所用 DNS 供应商选择其他方法)。后续需要将 TXT 记录手动添加到域中。填写完成后点击 Save。

返回证书列表,点击 Issue 按钮颁发证书。

页面上会显示大量“绿色”字符的输出信息,类似如下:

从输出中需要关注以下内容(示例): [Fri Jan 8 17:19:38 ACDT 2021] Add the following TXT record: [Fri Jan 8 17:19:38 ACDT 2021] Domain: ‘_acme-challenge.secure.agix.com.au’ [Fri Jan 8 17:19:38 ACDT 2021] TXT value: ‘lkjHJGfKUyFgJH78YUiJLHkgfRTfKUYJHiH’
将上述 TXT 值 添加到对应域名的 DNS 管理界面,作为新的 TXT 记录。本示例在 Cloudflare 上的添加结果如下:

添加完成后,回到 LetsEncrypt 的设置页面,点击 Renew 按钮,即可获取新的证书。
2. 设置自动续订
进入 General Settings 选项卡,勾选 Cron Entry 选项,点击 Save 保存。这样 LetsEncrypt 将按照计划任务自动更新证书。

3. 安装并配置 HAProxy
在 pfSense 中安装 HAProxy 插件。

进入 服务 > HAProxy > 设置 选项卡。

将 Max SSL … 的值设置为 2048,然后点击 Save。

配置后端服务器
切换到 Backend 选项卡,参照下图进行配置。
本示例中的内部 Web 服务器侦听端口为 5000(如需端到端加密可改为 80 或 443,本文不做展开)。

HAProxy 需要一种方法来确定内部 Web 服务器的运行状态(启动或关闭)。本示例中该功能已关闭,你可以根据需要启用并选择合适的检测方法。

完成配置后,点击 Save 并 Apply Changes。
配置前端
切换到 Frontend 选项卡,参照下图设置。

将 Default Backend 选择为之前创建的后端。

接着指定要使用的 SSL 证书。

点击 Save 并 Apply Changes。
4. 添加防火墙规则
最后,需要在防火墙的 WAN 接口上添加一条允许规则,确保外部能够访问所配置的端口。

注意事项
- 确保不要在 HAProxy 使用的同一端口或接口上运行 pfSense 强制门户(Captive Portal)。如需使用,可将强制门户的端口更改为其他值(例如 8443)。
- 如果在使用证书时出现错误,你可以随时重新 Issue 并 Renew。但建议先通过 pfSense 的 证书管理 删除旧证书,再进行重新颁发。
觉得内容不错?我要