4、工业网关零信任身份基石:设备身份、用户身份、应用身份与生命周期管理
零信任的核心原则是什么?「永不信任,始终验证」。但验证什么?说白了,就是验证「你是谁」。在工业网关的场景里,这个「谁」不只是人,还包括设备、还包括应用。我做了这么多年工控安全,见过太多只做了用户密码认证就觉得「安全了」的项目,结果攻击者通过一个被篡改的固件或者一个泄露的API密钥就长驱直入。
这一章,我们就来拆解工业网关零信任架构里的三大身份基石:设备身份、用户身份、应用身份。以及,更重要的——怎么管好这些身份的生命周期。
4.1 设备身份:基于证书与TPM
工业网关面对的设备五花八门:PLC、RTU、传感器、摄像头……这些设备怎么证明「我是我」?靠IP地址?太容易伪造了。靠MAC地址?也能被篡改。
我个人习惯的做法是:给每个设备颁发一个数字证书。这就像给设备发了一张「身份证」。证书里包含了设备的唯一标识、公钥、颁发者等信息。当设备要接入网关时,网关会验证这个证书是否由可信的CA签发,以及证书是否在有效期内。
设备证书的核心要素:
- 设备唯一标识(Device ID):通常是设备的序列号或MAC地址的哈希值。
- 公钥:用于验证设备签名或建立加密通道。
- CA签名:证明证书是由受信任的证书机构颁发的。
- 有效期:防止证书被无限期滥用。
但光有证书还不够。证书本身是个文件,如果设备被物理入侵,证书文件可能被窃取。这时候就需要TPM(可信平台模块)出场了。
TPM是一个独立的硬件安全芯片。它能把私钥「焊死」在芯片里,永远不导出到内存或文件系统。攻击者就算拿到了设备的文件系统,也拿不到私钥。我在一个油田项目中遇到过这种情况:现场有几十台老旧PLC,没法升级固件,我们就给每台PLC前面加了一个带TPM的「安全适配器」,把证书和私钥锁在适配器里。效果很好,攻击者撬开适配器外壳也读不出私钥。
我的建议:对于新部署的工业网关,尽量选择板载TPM 2.0芯片的硬件。对于存量设备,可以考虑外接USB安全密钥或安全芯片适配器。记住,私钥永远不应该以明文形式存储在文件系统中。
4.2 用户身份:多因素认证
用户身份认证,很多工厂到现在还在用「用户名+静态密码」的方式。说实话,这跟把大门钥匙挂在门框上没什么区别。工控系统的操作员、工程师、管理员,他们的账号一旦被攻破,后果不堪设想。
零信任要求我们做到多因素认证(MFA)。什么是多因素?就是至少使用以下三类中的两种:
- 你知道的:密码、PIN码
- 你拥有的:手机令牌、硬件Key、智能卡
- 你是什么:指纹、人脸、虹膜
在工业网关的场景里,我推荐的做法是:密码 + 时间型一次性密码(TOTP)。为什么?因为生物识别在嘈杂、多尘、手套环境下经常失灵。硬件Key成本高,而且容易丢失。TOTP用手机上的认证器App就能生成,成本低,可靠性高。
| 认证因素 | 优点 | 缺点 | 工业场景适用性 |
|---|---|---|---|
| 密码 | 简单、成本低 | 易泄露、易被暴力破解 | 必须配合其他因素使用 |
| TOTP令牌 | 动态、不可预测 | 依赖手机或硬件 | 高,推荐使用 |
| 硬件Key(如YubiKey) | 物理隔离、抗钓鱼 | 成本高、易丢失 | 中,适合高安全区域 |
| 生物识别 | 方便、难以伪造 | 受环境影响大 | 低,不推荐在恶劣环境使用 |
我曾经踩过的坑:有一次给一个化工厂部署MFA,我选了短信验证码作为第二因素。结果现场信号极差,验证码经常延迟5分钟才收到。操作员急得跳脚。后来我换成了离线TOTP,问题才解决。所以,一定要考虑现场的网络环境。工业场景里,离线可用的认证方式往往比在线方式更靠谱。
4.3 应用身份:API密钥与JWT
工业网关不只是跟设备和用户打交道,它还要跟各种上层应用通信:SCADA系统、MES系统、云平台……这些应用之间的通信,谁来证明身份?
你想想看,如果两个微服务之间调用API,每次都要输入用户名密码,那得多麻烦?而且密码泄露的风险极高。所以,我们需要应用身份的认证机制。
常用的有两种方式:API密钥和JWT(JSON Web Token)。
API密钥
API密钥就是一个长字符串,相当于应用的「密码」。调用方在请求头里带上这个密钥,网关验证通过就放行。简单粗暴,适合内部服务之间的通信。
# 请求示例
GET /api/v1/telemetry
Headers:
X-API-Key: a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6
但API密钥有个问题:它通常是静态的。一旦泄露,除非手动轮换,否则攻击者可以一直用。所以,我建议API密钥只用于低风险、内部网络的场景。
JWT
JWT是一个更现代、更安全的方案。它是一个自包含的令牌,里面包含了用户或应用的身份信息、权限、过期时间等。JWT由服务端签发,客户端持有,每次请求时带上。网关不需要查数据库,只需要验证JWT的签名就能确认身份。
// JWT示例(解码后)
{
"sub": "app_scada_01",
"iss": "auth.industrial-gateway.com",
"iat": 1700000000,
"exp": 1700003600,
"roles": ["read_telemetry", "write_command"]
}
JWT最大的好处是无状态和可携带权限信息。网关不需要维护会话状态,每个请求都自带了完整的身份和权限信息。这在微服务架构里特别有用。
我的经验:在工业网关里,我通常把JWT用于外部应用(比如云平台、第三方系统)的认证。API密钥则用于内部微服务之间的快速调用。两者结合使用,既保证了安全,又兼顾了性能。
4.4 身份生命周期管理
身份认证不是一锤子买卖。一个设备今天可信,不代表它明天还可信。一个员工今天有权限,不代表他离职后还能访问系统。这就是身份生命周期管理要解决的问题。
我把它总结为四个阶段:注册、激活、运营、注销。
这里有几个关键点,我特别想强调:
- 自动轮换:证书和密钥不能「一次颁发,终身有效」。我建议设备证书每90天轮换一次,API密钥每30天轮换一次。JWT的过期时间设短一些,比如15分钟。
- 及时吊销:一旦发现设备被篡改、员工离职、应用下线,必须立即吊销其身份凭证。我习惯维护一个证书吊销列表(CRL)或使用在线证书状态协议(OCSP),网关每次验证时都检查一下。
- 审计日志:每一次身份注册、激活、变更、注销,都要记录日志。出了问题,能追溯到是谁、在什么时候、做了什么操作。
我曾经犯过的错:早期做一个项目,我忘了给设备证书设置自动轮换。结果一年后,大批证书同时过期,现场几十台设备全部离线,生产停了整整半天。从那以后,我每次做身份管理方案,第一件事就是确认自动轮换机制是否到位。别让证书过期成为你的「定时炸弹」。
身份生命周期管理,说白了就是让每个身份「生得清楚、活得明白、死得干脆」。在零信任架构里,身份是信任的起点。如果身份管理做不好,后面所有的策略都是空中楼阁。