本指南介绍如何使用外部账户绑定(EAB)ACME 协议在FortiGate 防火墙上安装 SSL 证书并使其自动化,EAB 是商业证书颁发机构用于安全自动化的标准方法。

您将学会两种部署方法:
- 与 EAB 凭证的原生 FortiGate ACME 集成
- 使用 ACME.sh 进行外部发行,然后导入 FortiGate
这两种方法都与通过KID + HMAC身份验证颁发证书的商用 ACME 终端兼容。
开始之前
您需要
- FortiGate 7.6.0 或更新版本(早期版本不支持 EAB)
- FortiGate CLI 的root 或管理员访问权限
- 证书提供商提供的ACME 目录 URL
- EAB 凭证(密钥 ID + HMAC 密钥)
- 具有指向 FortiGate 公共 IP 的有效 A/AAAA DNS 记录的域名
- 可从互联网连接的80 端口用于 HTTP-01 验证
步骤 1:检查固件版本
使用命令行界面检查 FortiOS 版本:
get system status
确保出现FortiOS 7.6.0 或更新版本。如果没有,请先升级。旧版本不包括acme-eab-key-id 和acme-eab-key-hmac 字段。
步骤 2:为 ACME 创建本地证书对象
运行以下命令
config vpn certificate local
edit "acme-vpn-cert"
set enrollment acme
set acme-ca-url "https://acme.yourca.com/v2/acme"
set acme-eab-key-id "YOUR_EAB_KID"
set acme-eab-key-hmac "YOUR_EAB_HMAC_KEY"
set acme-email "[email protected]"
set acme-domain "vpn.example.com"
set acme-auth-url "http://vpn.example.com/.well-known/acme-challenge"
set auto-regenerate-days 30
set auto-regenerate enable
next
end
此命令创建名为acme-vpn-cert 的新本地证书对象,并告诉 FortiGate 使用 ACME 协议和外部帐户绑定自动向商业 CA 申请和更新证书。
关键部分说明:
set enrollment acme:告诉 FortiGate 将通过 ACME 管理此证书,而不是手动导入。set acme-ca-url:证书颁发机构的 ACME 目录端点。-
set acme-eab-key-id/set acme-eab-key-hmac:您的 EAB 凭证(KID 和 HMAC),用于授权您在 CA 的账户。 set acme-email用于更新通知和 CA 联系。set acme-domain:FortiGate 将验证和保护的域。set acme-auth-url指 CA 放置和验证 ACME 挑战的 HTTP 位置。-
set auto-regenerate和auto-regenerate-days:启用到期前自动续订。
步骤 3:验证验证路径
您的 FortiGate 必须响应http://vpn.example.com/.well-known/acme-challenge/。
如果已启用 HTTPS 重定向,请添加旁路规则,以便在验证过程中挑战路径仍为纯 HTTP。
下面是虚拟服务器的操作方法:
config firewall vip
edit "acme-http"
set extintf "wan1"
set extip <your-public-ip>
set mappedip "192.168.1.99"
set extport 80
set mappedport 80
set protocol tcp
next
end
将<your-public-ip> 和192.168.1.99 替换为实际的外部和内部 IP 地址。这些值是占位符,仅供参考。
步骤 4:触发初始请求
既然 FortiGate 知道如何到达 CA 以及在何处放置验证文件,您就可以开始实际的证书注册过程了:
execute vpn certificate local generate "acme-vpn-cert"
此命令指示 FortiGate 联系 CA、执行域验证并自动检索已签名的证书。
步骤 5:检查证书状态
要检查证书状态,请运行以下命令:
get vpn certificate local
你应该看看
Status: valid
Issuer: Your CA Name
如果状态仍为待定或无效,请重新检查 DNS 和端口 80 的可达性。
第 6 步:申请证书
使用图形用户界面或 CLI 将其分配给 SSL VPN、HTTPS 管理或代理服务:
config vpn ssl settings
set servercert "acme-vpn-cert"
end
下面介绍如何通过图形用户界面进行操作:
转到VPN > SSL-VPN 设置 > 服务器证书 > 选择 acme-vpn-cert。
步骤 7:故障排除和续订
如果证书没有立即签发,最常见的原因是
- ACME 服务器无法访问您的验证 URL(开放端口 80)。
- 您的 KID 或 HMAC 密钥与 CA 期望的不一致。
- 您遇到了临时重放或速率限制;几分钟后重试即可。
一旦证书有效,FortiGate 将根据您的auto-regenerate-days 设置自动处理续期。您可以随时通过以下方式测试续期:
execute vpn certificate local renew "acme-vpn-cert"
回退:外部发布 (ACME.sh) 和导入 FortiGate
如果 CA 的 ACME 端点不能直接与 FortiGate 协同工作,则可使用ACME.sh从外部签发证书并导入。 方法如下
步骤 1:安装 ACME.sh
在任何可以上网的Linux、macOS 或 BSD 系统上运行这些命令。您不能在 FortiGate 上运行这些命令(FortiGate 不支持自定义 shell 脚本)。
curl https://get.acme.sh | sh
source ~/.bashrc
这将在你的主目录中安装acme.sh 客户端,并将其加载到你的 shell 中。用实际 CA 和详细信息替换占位符。
步骤 2:在 EAB 注册您的 ACME 账户
acme.sh --register-account \
--server https://acme.yourca.com/v2/acme \
--eab-kid "YOUR_EAB_KID" \
--eab-hmac-key "YOUR_EAB_HMAC_KEY" \
-m [email protected]
步骤 3:颁发证书
acme.sh --issue \
-d vpn.example.com \
--webroot /var/www/html \
--server https://acme.yourca.com/v2/acme \
--eab-kid "YOUR_EAB_KID" \
--eab-hmac-key "YOUR_EAB_HMAC_KEY"
第 4 步:找到证书文件
成功签发后,证书文件会存储在你的主目录下的 ~/.acme.sh/vpn.example.com/
在该文件夹中,您可以找到
- fullchain.cer– 完整的证书链
- vpn.example.com.key– 您的私人密钥
- ca.cer– 中间 CA 证书
您可以使用文本编辑器打开它们,或通过 OpenSSL 验证详细信息:
openssl x509 -in fullchain.cer -noout -dates -issuer -subject
第 5 步:导入 FortiGate
您可以通过图形用户界面导入证书:
转到系统 > 证书 > 导入 > 本地证书,然后
上传证书和私钥。
或者使用 CLI:
config vpn certificate local
edit "acme-vpn-cert"
set private-key "-----BEGIN PRIVATE KEY-----..."
set certificate "-----BEGIN CERTIFICATE-----..."
next
end
第 6 步:分配和续订
证书更新后,确保将其重新分配给 SSL VPN 或 FortiGate Web 界面(如果没有自动应用)。如果您在不同的服务器上使用外部 ACME 客户端,请设置一个计划任务(如 cron job),使用 SCP 或 API 调用将新证书文件自动复制到 FortiGate。
例如
scp ~/.acme.sh/vpn.example.com/fullchain.cer admin@fortigate:/root/
scp ~/.acme.sh/vpn.example.com/vpn.example.com.key admin@fortigate:/root/
然后重新加载证书:
execute vpn certificate local import "acme-vpn-cert"
常见问题
如果您是第一次使用商用 CA设置 ACME,往往会遇到一些问题。以下是我们对最常见问题的快速解答:
这种设置可以用于任何商用 CA 吗?
是的,只要您的提供商支持ACME + 外部账户绑定 (EAB)。Sectigo 和 DigiCert 等主要 CA 已经提供 ACME 目录 URL 和 EAB 凭证。
是否需要同时打开 HTTP 和 HTTPS 端口进行验证?
ACME 的 HTTP-01 验证只需要80 端口(HTTP)。保持 HTTPS (443) 对正常流量开放,但不要将验证请求从 HTTP 重定向到 HTTPS。
如果我的证书不能自动更新会怎样?
您可以通过以下方式随时触发手动续订:
execute vpn certificate local renew "acme-vpn-cert"
如果仍然失败,请重新检查您的 EAB 凭据、域 DNS,以及防火墙是否仍然允许对 CA 的 ACME 端点进行出站访问。
我可以在多个 FortiGate 上使用相同的 EAB 凭据吗?
这取决于您的 CA。有些 CA 允许在多个设备上重复使用一个账户,有些 CA 则会为每个订单或域签发唯一的凭证。请始终遵循 CA 的政策,以避免费率限制或账户冲突。
最后的话
现在您已经知道如何在 FortiGate 上安装 ACME SSL 证书,可以通过其本地 EAB 集成或通过 ACME.sh 进行外部签发。
这两种方法都符合企业安全标准,并支持与商业证书颁发机构进行全自动更新。

