bg-tutorials

如何在 FortiGate 上安装 ACME SSL 证书

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

Frotigate ACME SSL

您将学会两种部署方法:

  1. 与 EAB 凭证的原生 FortiGate ACME 集成
  2. 使用 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-idacme-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-regenerateauto-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 进行外部签发。

这两种方法都符合企业安全标准,并支持与商业证书颁发机构进行全自动更新。

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

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

龙飞行的详细图像
撰写人

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