2. 安全基础概念

聊 OPC UA 安全,绕不开这几个基础概念。很多工程师一上来就配证书,配完发现连不上,回头问我:“证书到底干嘛用的?”

说白了,OPC UA 的安全体系就是靠这几样东西撑起来的。咱们一个一个拆开讲。

一句话总结:数字证书是“身份证”,PKI 是“户籍系统”,CA 是“公安局”,CRL 是“通缉令”。

2.1 数字证书——OPC UA 通信的“身份证”

数字证书是什么?我习惯把它理解成一张电子身份证。你想想看,两个人第一次见面,怎么确认对方不是冒充的?看身份证。OPC UA 客户端和服务器第一次握手,也是互相看证书。

证书里装了什么?核心信息就这几条:

  • 公钥——加密通信的“锁”,别人用这把锁加密数据,只有你手里的私钥能解开。
  • 主体信息——谁持有这个证书,比如设备名称、组织、IP 地址。
  • 颁发者信息——谁签发的这个证书,通常是 CA 的名字。
  • 有效期——从哪天到哪天有效,过期了就得换。
  • 签名——CA 用私钥给证书打了个“防伪标签”,防止别人篡改。

我在项目中遇到过一件事:某工厂部署了 200 多台 OPC UA 服务器,结果上线当天发现一半连不上。查了半天,原来是证书里的 IP 地址写死了,后来网络调整换了 IP,证书就不认了。嗯,这里要注意——证书里的信息一旦签发就不能改,改了就失效。

我的建议:OPC UA 证书尽量用 DNS 名称或 URN 标识,别绑死 IP。除非你确定网络拓扑永远不会变。

2.2 公钥基础设施(PKI)——信任的“骨架”

PKI 不是某个具体的软件,而是一整套规则、流程和组件的集合。它解决的核心问题就一个:我凭什么相信你手里的证书是真的?

PKI 包含这些角色:

  • 证书颁发机构(CA)——签发证书的权威机构。
  • 注册机构(RA)——帮你审核身份,但不直接发证书。
  • 证书存储库——存放证书和 CRL 的地方,比如 LDAP 目录。
  • 终端实体——持有证书的客户端、服务器、设备。

OPC UA 的 PKI 架构其实比 HTTPS 简单。HTTPS 的 PKI 是树形结构,根 CA 下面有二级 CA、三级 CA。OPC UA 呢?大多数场景下,一个自签名的根 CA 就够了。工厂内部用,没必要搞那么复杂。

我记得有一次帮客户搭 OPC UA 安全环境,对方非要搞三层 CA 架构。我说:“你工厂就 50 台设备,一层 CA 完全够用。”他不信,结果配了一个月没跑通,最后还是回到单层 CA。你想想看,复杂度不是越高越好,够用就行。

2.3 证书颁发机构(CA)——信任的“源头”

CA 就是那个“盖章”的角色。它用自己的根证书(自签名)去签发其他证书。所有信任这个 CA 的设备,都会把 CA 的根证书放到“信任列表”里。

OPC UA 里 CA 有两种玩法:

方式 说明 适用场景
自签名证书 每个设备自己生成证书,自己签自己 测试环境、设备极少(<5台)
CA 签发证书 统一由 CA 生成和签名 生产环境、设备多、需要集中管理

我个人强烈建议:生产环境别用自签名证书。为什么?自签名证书没法统一撤销。假如某台设备被入侵了,你得跑到每一台信任它的设备上手动删除证书。50 台设备?你删到怀疑人生。

警告:OPC UA 规范要求,自签名证书只能用于测试。如果你在生产环境用了自签名证书,审计的时候可能会被开不符合项。

2.4 证书撤销列表(CRL)——信任的“黑名单”

证书不是发了就永远有效。设备报废了、私钥泄露了、员工离职了——这些情况下,证书必须作废。CRL 就是干这个的。

CRL 本质上是一个列表,里面记录了所有被撤销的证书序列号。CA 定期发布 CRL,OPC UA 客户端和服务器在验证对方证书时,会先查一下这个列表。

CRL 包含的关键字段:

  • 颁发者——哪个 CA 发布的这份 CRL。
  • 本次更新时间——这份 CRL 的生成时间。
  • 下次更新时间——下一份 CRL 什么时候发布。
  • 撤销的证书列表——每个被撤销证书的序列号和撤销时间。

我曾经踩过一个坑:某客户现场,OPC UA 服务器突然拒绝所有客户端连接。查日志发现是 CRL 过期了——CA 服务器硬盘满了,CRL 没更新。客户端发现对方拿的是过期 CRL,直接拒绝通信。从那以后,我养成了一个习惯:监控 CRL 的更新状态,设置告警。

避坑指南:CRL 的“下次更新时间”一定要设置合理。太短(比如 1 小时)会增加 CA 负载;太长(比如 30 天)会导致证书撤销不及时。我个人建议生产环境设 24 小时。

2.5 它们之间的关系——一张图说清楚

下面这张图展示了数字证书、PKI、CA、CRL 之间的协作关系。我画的时候尽量简化了,实际流程比这复杂,但核心逻辑不变。

OPC UA 安全基础概念关系图 根 CA(自签名) 中间 CA(可选) PKI 框架 CA 签发证书 CRL 发布 证书存储库 OPC UA 客户端 OPC UA 服务器 交换证书 + 验证 CRL 说明:客户端和服务器在握手时交换数字证书,并查询 CRL 确认证书未被撤销

2.6 实战中的常见误区

讲了这么多理论,说几个我亲眼见过的坑:

  1. 证书有效期设太长——有人把证书有效期设了 10 年。结果第 3 年私钥泄露,撤销都来不及。我建议 OPC UA 证书有效期不超过 2 年。
  2. CRL 不配置——很多工程师觉得 CRL 麻烦,干脆不配。结果设备被替换了,旧证书还在信任列表里,新设备死活连不上。
  3. 根证书私钥不保护——根证书的私钥一旦泄露,整个 PKI 体系就废了。我见过有人把根证书私钥放在共享文件夹里……嗯,不评价了。
  4. 忽略时间同步——证书验证依赖系统时间。如果 OPC UA 服务器的时间比客户端快了 5 分钟,证书可能被判定为“尚未生效”或“已过期”。

重要提醒:OPC UA 的证书验证是双向的。客户端验证服务器,服务器也要验证客户端。别只配一边,否则安全策略等于没开。

好了,这一章的基础概念就讲到这里。这些概念是后面所有配置的根基。你如果能把数字证书、PKI、CA、CRL 这四个东西的关系理清楚,后面配安全策略、配 GDS、配加密通信,都会顺很多。