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 身份生命周期管理

身份认证不是一锤子买卖。一个设备今天可信,不代表它明天还可信。一个员工今天有权限,不代表他离职后还能访问系统。这就是身份生命周期管理要解决的问题。

我把它总结为四个阶段:注册、激活、运营、注销。

身份生命周期管理流程 1. 注册 2. 激活 3. 运营 4. 注销 各阶段关键动作: • 注册:录入设备/用户/应用信息,生成唯一标识,颁发初始凭证(证书/密钥/密码) • 激活:首次验证身份,强制修改初始凭证,绑定多因素认证设备 • 运营:定期轮换凭证,监控异常行为,动态调整权限(最小权限原则) • 注销:吊销证书/密钥,清除会话,归档审计日志,回收资源

这里有几个关键点,我特别想强调:

  • 自动轮换:证书和密钥不能「一次颁发,终身有效」。我建议设备证书每90天轮换一次,API密钥每30天轮换一次。JWT的过期时间设短一些,比如15分钟。
  • 及时吊销:一旦发现设备被篡改、员工离职、应用下线,必须立即吊销其身份凭证。我习惯维护一个证书吊销列表(CRL)或使用在线证书状态协议(OCSP),网关每次验证时都检查一下。
  • 审计日志:每一次身份注册、激活、变更、注销,都要记录日志。出了问题,能追溯到是谁、在什么时候、做了什么操作。

我曾经犯过的错:早期做一个项目,我忘了给设备证书设置自动轮换。结果一年后,大批证书同时过期,现场几十台设备全部离线,生产停了整整半天。从那以后,我每次做身份管理方案,第一件事就是确认自动轮换机制是否到位。别让证书过期成为你的「定时炸弹」。

身份生命周期管理,说白了就是让每个身份「生得清楚、活得明白、死得干脆」。在零信任架构里,身份是信任的起点。如果身份管理做不好,后面所有的策略都是空中楼阁。