1. 项目概述:为什么要在FortiGate上折腾自签名证书?
如果你管理过FortiGate防火墙,尤其是那些需要对外提供Web管理界面(HTTPS)或者托管了内部Web服务的设备,大概率遇到过浏览器那个刺眼的“不安全”警告。用着设备自带的默认证书,每次登录都像在闯一个安全警告的关卡,不仅烦人,在有些严格的安全审计里,这甚至算是个“瑕疵”。所以,给自己管理的FortiGate配上一张“体面”的SSL证书,就成了很多网管进阶路上的必修课。
这个“体面”的证书,不一定非得是花钱从DigiCert、Sectigo这些权威机构买来的。对于内部管理、测试环境,或者一些不涉及公众访问的内部应用,自建(自签名)证书是完全可行且经济实惠的选择。它同样能实现HTTPS的加密通信,只是需要你手动告诉客户端(比如你的浏览器)“相信我,这个证书是安全的”。整个过程,就是从生成一个证书签名请求(CSR)开始,到最终在防火墙上配置好HTTPS服务,让那个小锁图标亮起来。
我经手过不少从零到一的FortiGate证书部署,也踩过几乎所有能踩的坑。今天,我就把这一整套流程,连同那些官方文档可能不会细说、但实际操作中一定会遇到的“坑点”和排查技巧,给你完整地捋一遍。无论你是想解决管理界面的警告,还是为防火墙上的虚拟服务器(Virtual Server)或SSL VPN门户提供加密,这篇内容都能给你一个清晰的路线图。
2. 核心思路与方案选型:自签名 vs. 私有CA
在动手之前,我们得先明确两个核心概念和一种更优的实践方案。很多人一提到自建证书,第一反应就是直接在设备上生成一个自签名证书(Self-Signed Certificate)。这确实是最快的方法,但并非最佳实践,尤其是在管理多台设备时。
2.1 自签名证书的利与弊
自签名证书,顾名思义,就是自己给自己签发的证书。在FortiGate的Web管理界面(系统 -> 证书)里,点击“生成”,选择“证书类型”为“自签名”,填上信息就能立刻获得一张证书。
优点:
- 极其快速便捷 :几分钟内就能完成创建和部署。
- 零成本 :不需要任何外部依赖或费用。
缺点:
- 信任问题 :每台设备生成的证书都是独立的“孤岛”。浏览器或客户端不信任它,会持续显示安全警告。你需要手动为每台设备的证书在每台访问电脑上安装并信任,管理成本随着设备数量增长而暴增。
- 缺乏集中管理 :无法统一吊销、更新或审计。
所以,自签名证书只适用于临时测试、或仅有单台设备需要管理的极简场景。
2.2 建立私有CA:一劳永逸的优雅方案
更专业、更 scalable 的做法是建立一个 私有证书颁发机构(Private CA) 。你可以把它想象成你自己公司内部的“DigiCert”。你先创建一台“根CA”设备(可以是一台专门的服务器,甚至就用一台主FortiGate防火墙来兼任),由它来签发所有其他设备(包括其他FortiGate、服务器、客户端)的证书。
这样做的好处是:
- 一次信任,处处通行 :你只需要在需要访问这些服务的客户端(电脑、手机)上,安装并信任你自建的“根CA证书”。之后,所有由这个根CA签发的设备证书,都会被客户端自动信任,不再有警告。
- 集中管理 :证书的签发、续期、吊销都可以在一个中心点进行控制,符合企业IT治理规范。
- 灵活性高 :可以为不同用途签发不同属性的证书(如服务器认证、客户端认证等)。
对于FortiGate环境,我强烈推荐采用“私有CA”方案。接下来的全流程,也将以 在一台FortiGate上建立私有CA,并为另一台FortiGate(或本机)签发服务器证书 为主线进行详解。即使你只有一台设备,建立私有CA再为自己签发证书,也比直接用自签名证书更规范,为未来扩展预留了空间。
3. 实操全流程:从创建私有CA到HTTPS配置
我们将流程分解为清晰的四个阶段,确保每一步都可操作、可验证。
3.1 第一阶段:创建私有根CA证书
这个CA证书是信任链的起点,必须妥善保管。我们将在作为CA的FortiGate上操作。
1. 登录FortiGate Web管理界面
,进入
系统 -> 证书
。
2. 点击“生成”
,打开证书创建向导。
3. 填写CA证书信息:
*
类型
:选择
证书颁发机构
。
*
方法
:选择
创建自签名的根CA证书
。这是最关键的一步,它创建的是顶级信任源。
*
证书名称
:起一个易于识别的名字,如
Company_Name_Root_CA
。
*
通用名称 (CN)
:这是CA的身份标识,建议格式如
Company_Name Root CA
。注意,这里不是服务器域名。
*
单位、部门等
:按实际情况填写,有助于标识。
*
有效期
:CA证书的有效期通常很长,建议设置为10年或20年。因为一旦根CA过期,所有它签发的证书都会立即失效,重新部署会非常麻烦。
4. 密钥参数设置:
*
类型
:选择
RSA
。这是最广泛兼容的算法。
*
大小
:选择
2048
位。这是目前安全与性能平衡的标准选择。4096位更安全,但加解密计算开销更大,对于CA根证书,2048位在可预见的未来是足够安全的。
5. 点击“确定”
,系统将生成CA证书和私钥。你会在证书列表中看到它,类型为“CA”。
注意 :生成CA证书的私钥是绝密的,FortiGate会将其安全存储。你不需要、也不应该导出私钥。只需导出证书(不含私钥)分发给需要信任的客户端。
6. 导出CA证书(供客户端信任):
在证书列表中,找到你刚创建的CA证书,点击右侧的“导出”图标(通常是一个向下的箭头)。选择
证书格式为
PEM
,然后下载。这个
.crt
文件就是你需要安装到客户端电脑上的“根证书”。
3.2 第二阶段:生成CSR并签发服务器证书
现在,我们需要为真正提供HTTPS服务的FortiGate(可能是另一台,也可能是本机)申请一张证书。这个过程模拟了向公共CA申请证书的流程:先生成CSR,再用CA签名。
1. 在目标FortiGate上生成CSR:
* 进入
系统 -> 证书
,点击“生成”。
*
类型
:选择
本地证书
。
*
方法
:选择
从证书颁发机构生成证书请求
。
*
证书名称
:如
FG-Edge-Firewall_Web_SSL
。
*
通用名称 (CN)
:
这是最重要的字段!
必须填写客户端访问该设备时使用的
完整域名(FQDN)
。例如,如果通过
https://firewall.company.local
访问管理界面,CN就填
firewall.company.local
。如果通过公网IP或域名访问,则填写对应的域名。
CN不匹配是导致证书错误的头号原因。
*
备用名称 (SAN)
:这是一个非常有用的扩展字段。如果你希望通过多个名称(例如,同时用IP地址、短主机名、其他域名)访问同一服务,可以在这里添加。格式是
DNS:firewall.company.local, DNS:192.168.1.1, DNS:fw
。这能极大增强证书的灵活性。
* 填写其他单位信息。
*
密钥参数
:同样选择
RSA 2048
。
* 点击“确定”。此时,你不会立即得到证书,而是生成一个
证书签名请求(CSR)
。系统会提示你下载一个
.csr
文件(PEM格式)。这个文件里包含了你的公钥和申请信息,
但不包含私钥
,可以安全地发送给CA。
2. 在CA FortiGate上签发证书:
* 登录作为CA的那台FortiGate。
* 进入
系统 -> 证书
,点击“生成”。
*
类型
:选择
本地证书
。
*
方法
:这次选择
从证书签名请求导入并生成证书
。
*
证书名称
:为即将签发的证书命名,如
Issued_for_FG-Edge_Web
。
*
证书文件
:点击“浏览”,上传刚才从目标设备下载的
.csr
文件。
*
颁发者CA
:在下拉列表中,选择你之前创建的私有根CA证书(如
Company_Name_Root_CA
)。
*
有效期
:设置服务器证书的有效期,通常1-2年。比CA证书短很多,便于定期轮换。
* 点击“确定”。CA将使用自己的私钥对CSR进行签名,生成一张完整的服务器证书。你需要将这张新生成的证书
导出
(同样选择PEM格式),得到一个
.crt
文件。
3. 将签发的证书导入目标FortiGate:
* 回到需要证书的目标FortiGate。
* 进入
系统 -> 证书
,点击“导入”。
*
类型
:选择
本地证书
。
*
文件
:上传从CA那里得到的
.crt
文件。
*
证书名称
:系统会自动填充,确认即可。
* 点击“确定”。现在,你的目标FortiGate就拥有了一张由私有CA签发的、受信任的服务器证书了。在证书列表中,你应该能看到其“颁发者”是你的私有CA名称。
3.3 第三阶段:配置HTTPS服务使用新证书
证书已经就位,现在要告诉FortiGate在哪些服务上使用它。
1. 配置管理接口HTTPS证书:
* 进入
系统 -> 设置
。
* 在“管理设置”部分,找到
HTTPS 服务器证书
下拉框。
* 从列表中选择你刚刚导入的服务器证书(如
FG-Edge-Firewall_Web_SSL
)。
* 点击页面底部的“应用”。系统可能会提示需要重启HTTP/HTTPS服务,确认即可。
* 操作完成后,尝试用
https://你的设备地址
重新登录管理界面。如果客户端已安装并信任了根CA证书,浏览器将显示安全的小锁图标。
2. 为SSL VPN或虚拟服务器配置证书: * SSL VPN :进入 VPN -> SSL-VPN 设置 ,在“服务器证书”选项中选择你的新证书。 * 防火墙策略(用于SSL解密) :如果你启用了SSL深度检测,需要在SSL/SSH检查配置中指定检测用的证书,通常也可以使用这张私有CA签发的证书。 * 虚拟服务器(Virtual Server) :如果你在FortiGate上配置了负载均衡或服务器发布,进入 策略 & 对象 -> 虚拟服务器 ,编辑对应的虚拟服务器,在“服务器证书”选项中选择。
3.4 第四阶段:客户端安装并信任根CA证书
这是让“小锁”出现的关键一步。你需要将第一步导出的
Company_Name_Root_CA.crt
文件安装到所有需要访问FortiGate服务的电脑上。
Windows系统示例:
-
双击下载的
.crt文件,会打开证书查看器。 - 点击“安装证书”。
- 选择“存储位置”为 本地计算机 ,点击“下一步”。
- 选择“将所有的证书都放入下列存储”,点击“浏览”。
- 选择 受信任的根证书颁发机构 ,点击“确定”,然后“下一步”。
- 点击“完成”,在安全警告中点击“是”。
- 完成后,建议重启浏览器,使其重新加载证书存储。
macOS系统示例:
-
双击
.crt文件,这会打开“钥匙串访问”应用。 - 确保将证书添加到“系统”钥匙串,而不是“登录”钥匙串。
- 找到刚添加的证书,通常显示为CA的名称。
- 双击该证书,展开“信任”部分。
- 将“使用此证书时”设置为 始终信任 。
- 关闭窗口,输入密码保存更改。
完成此步骤后,再访问配置了新证书的FortiGate,警告就会消失。
4. 核心细节解析与避坑指南
流程看似直接,但魔鬼藏在细节里。下面这些点,是决定成败的关键。
4.1 关于CSR和证书内容的深度解读
很多人对CSR和证书文件内容一知半解,排查问题时就会抓瞎。我们用OpenSSL命令(在Linux/macOS或Windows的Git Bash中)来透视它们。
-
查看CSR内容
:
openssl req -in your_request.csr -noout -text-
这个命令会输出CSR的详细信息。请务必检查
Subject下的CN字段,以及X509v3 Subject Alternative Name扩展字段,确保它们包含所有你计划用来访问的地址(域名和IP)。 签名算法信息 (如sha256WithRSAEncryption)和 公钥信息 (Subject Public Key Info)也包含在内,但CSR本身 没有数字签名 ,它只是待签名的请求。
-
这个命令会输出CSR的详细信息。请务必检查
-
查看证书内容
:
openssl x509 -in your_certificate.crt -noout -text-
这会显示已签名证书的全部内容。重点关注:
-
Issuer:颁发者,应该是你的私有CA信息。 -
Subject:主体,应该和CSR中的一致。 -
Validity:有效期,确认起止时间是否正确。 -
X509v3 extensions:扩展信息,特别是Subject Alternative Name和证书用途(X509v3 Key Usage,X509v3 Extended Key Usage)。服务器证书通常需要TLS Web Server Authentication。
-
-
这会显示已签名证书的全部内容。重点关注:
4.2 证书链完整性与中间CA
在我们的私有CA示例中,只有一级(根CA直接签服务器证书)。但在更复杂的组织里,可能会有多级CA(根CA -> 中间CA -> 服务器证书)。这时,服务器除了提供自己的证书,还必须提供 完整的证书链 (即从服务器证书到根证书之间的所有中间CA证书),否则客户端可能无法验证。
在FortiGate上导入证书时,如果存在中间CA,你需要将 服务器证书和中间CA证书合并到一个PEM文件 中再导入。顺序是:服务器证书在前,后面跟着中间CA证书。
-----BEGIN CERTIFICATE-----
(你的服务器证书内容)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(你的中间CA证书内容)
-----END CERTIFICATE-----
FortiGate在提供服务时,会自动发送这个证书链。
4.3 密钥管理与安全
- 私钥保护 :FortiGate生成的私钥存储在设备内部的安全存储中,通常无法直接导出。这是安全的设计。请务必保证FortiGate设备本身的管理员密码和物理安全。
- 证书备份 :定期备份你的 根CA证书 (不含私钥)和 已签发的服务器证书 。虽然私钥在FortiGate上,但有了CA证书和CSR,你可以在任何时候重新签发。备份证书文件时,确保文件名和用途清晰对应。
5. 常见错误排查实录
即使按照步骤操作,你也可能会遇到问题。下面是我遇到过的典型问题及解决方法。
5.1 浏览器显示“不安全”或证书错误
这是最常见的问题。请按以下顺序排查:
- 检查客户端是否已安装并信任根CA证书 :这是第一步,也是最容易忽略的一步。在浏览器中点击锁图标 -> “连接是安全的” -> “证书有效”,查看证书路径。根证书是否是你的私有CA?如果不是,回到第四阶段重新安装。
-
检查证书的CN和SAN
:用
openssl命令查看服务器证书的Subject CN和SAN。确保它们 完全匹配 你浏览器地址栏中输入的URL。https://192.168.1.1和https://firewall是两个不同的名称,如果证书只包含了其中一个,访问另一个就会报错。 解决方案 :重新生成CSR,在SAN字段中添加所有可能的访问方式(IP、短名、FQDN)。 -
检查证书有效期
:证书是否已经过期或尚未生效?检查证书的
Validity字段。 - 检查FortiGate服务配置 :确认你确实在正确的服务(管理接口、SSL VPN等)上选择了新导入的证书,并点击了“应用”。
5.2 FortiGate管理界面无法访问(应用证书后)
如果在更换管理接口证书后,突然无法通过HTTPS访问设备:
-
尝试HTTP访问
:FortiGate默认同时监听HTTP(80)和HTTPS(443)。尝试用
http://设备IP访问(注意是http)。如果能访问,说明是证书配置问题。 - 检查证书绑定 :通过HTTP登录后,立刻回到 系统 -> 设置 ,确认“HTTPS服务器证书”选择是否正确。有时可能误选了其他无效证书。
-
恢复默认证书
:如果无法解决,一个备选方案是通过Console口或SSH命令行登录,执行以下命令将管理接口证书恢复为默认的自签名证书:
执行后,即可用HTTPS(会有警告)或HTTP重新访问。config system global set admin-server-cert default end
5.3 证书导入失败或显示“无效”
-
文件格式错误
:FortiGate要求PEM格式。确保你的文件是文本格式,以
-----BEGIN CERTIFICATE-----开头。如果从某些Windows系统保存,注意编码问题(应为ANSI或UTF-8 without BOM)。可以用记事本打开检查。 - 证书链不完整 :如果证书由中间CA签发,只导入服务器证书本身会被视为“无效”。你需要将服务器证书和中间CA证书合并为一个PEM文件导入。
- 证书与私钥不匹配 :如果你是从其他系统(如OpenSSL命令行)生成的证书和私钥对,然后分别导入FortiGate,必须确保它们是一对。FortiGate在“从CSR生成”的流程中自动管理了密钥对,通常不会出现此问题。
5.4 SSL VPN客户端连接失败
配置了新的服务器证书后,SSL VPN用户无法连接:
- 客户端信任问题 :确保SSL VPN客户端(如FortiClient)所在的电脑也已安装了根CA证书。对于Always-On VPN或需要严格验证的场景,这点至关重要。
-
证书用途
:用
openssl x509 -text检查证书的Extended Key Usage是否包含TLS Web Server Authentication。没有此用途的证书不能用于SSL VPN服务器。 - FortiGate配置 :确认SSL-VPN设置中“服务器证书”已更新为新证书,并且SSL-VPN服务已启用且在正确的接口上监听。
整个流程走下来,你会发现为FortiGate自建SSL证书并不是一个黑盒魔法。它是一套逻辑清晰、步骤明确的操作。核心在于理解证书信任链的原理(根CA -> 签发 -> 服务器证书),并仔细核对每一个环节的匹配关系(CN/SAN、有效期、证书用途)。一旦你成功配置过一次,后续为其他设备或服务部署证书就会变得非常轻松。这套私有CA的方法,同样适用于你网络中的其他服务器(如内部Wiki、监控系统等),实现整个内网HTTPS化的统一信任管理,这才是其最大的价值所在。

113

被折叠的 条评论
为什么被折叠?



