再深入看看OPC UA的协议架构

我们基本上对OPC UA进行了比较详细的了解,但是对内部的具体的协议内容没有进行介绍。

当然,我们整理了来自OPC Foundation的关于OPC UA的完整的说明,大家有兴趣可以自行文末领取链接下载:

那我们这期对协议内部架构再深入分享下。

OPC UA消息

每个 OPC UA 消息都以一个三字节 ASCII 码开始,该码构建了消息类型。四种主要消息类型是:

  • HEL: Hello message(HEL:Hello消息)
  • OPN:OpenSecureChannel message(OPN:打开安全通道消息)
  • MSG:A generic message container (secured with the channel’s keys)(MSG:一个通用消息容器(使用通道的密钥进行加密))
  • CLO: CloseSecureChannel message(CLO:关闭安全通道消息)

第一条消息是 HEL 消息。HEL 消息包含初始化连接的基本参数,例如客户端希望连接到的 URL 以及客户端期望接收的最大消息大小。HEL 消息通常随后是 OPN 请求。下图是使用 Wireshark 分析的一个 HEL 消息,展示了传递的不同参数:

OPN 通过连接打开一个安全通道,如果一切顺利,服务器会响应一个 SecureChannelID。现在客户端和服务器可以通过打开的通道交换 MSG 类型消息。单个客户端可以打开多个通道,这些通道通过它们唯一的 SecureChannelID 来识别。

接下来,客户端和服务器可以通过通道进行通信。例如,常用的消息是浏览,客户端使用它从服务器检索节点树。

最后,会话以 CLO 消息结束,该消息终止会话。

下图是一个典型的 OPC UA 数据包序列流示例,用于监控项目值:

实际上,客户端将通过端点 URL 连接到 OPC UA 服务器。OPC UA 端点 URL 是一个由四部分组成的格式化文本字符串

代码语言:javascript代码运行次数:0运行复制
方案:必须是 opc.tcp 或 opc.https

举例:

位与字节:OPC UA 协议结构解析

再让我们看看一个单独的 MSG 消息类型。它由基本头和正文构成。

标题(Header):

消息头 MSG 包含有关消息的基本信息,例如其类型(MSG)、长度以及其 SecureChannel 的信息。在 MSG 头部传递的其它重要信息包括 IsFinal 标志,该标志指示消息是否完整(F-完整)或只是一个单独的数据块(C-数据块),该数据块是正在发送的其它数据块系列的一部分,形成整个消息。这有助于各方重新组装大的 OPC UA 消息。

正文(Body):

OPC UA 定义了一系列服务(如浏览、读取请求、写入请求等),每个服务都有其独特的结构。这定义了请求结构,指定了如何使用 OPC 的内置类型构建对这一服务的请求。消息体由请求构建而成,指定了客户端希望访问的服务(例如,读取请求是 ns=0,i=631)。随后是针对特定服务定义的结构其余部分。

传输(Transport):

OPC UA 传输层负责在 OPC UA 客户端和服务器之间通过不同的通信协议进行数据的物理传输。传输层在网络层之上运行,负责建立、维护和终止客户端与服务器之间的连接。

OPC UA 规范定义了多个传输协议,可用于在客户端和服务器之间传输数据。这些协议包括 TCP、HTTPS 等。 OPC 服务器可以暴露多个具有不同传输层的端点。例如,服务器可以为同一服务器同时拥有 TCP 和 HTTPS 端点。

值得注意的是,传输协议不会直接影响发送的底层 OPC 数据结构。公开 HTTPS 端点的 OPC UA 服务器可以选择通过安全连接发送常规的 OPC UA 二进制、XML 或 JSON 格式消息

暴露的端点通过 URI 方案进行标识。TCP 端点以 opc.tcp://<主机名>:<端口>开头,而 HTTPS 端点以 opc.https://<主机名>:<端口>或 http://<主机名>:<端口>开头。

会话和安全 (Session and Security):

在会话初始化期间,使用 OpenSecureChannel 请求在已打开的连接之上创建一个 SecureChannel。在此请求期间,客户端和服务器就共享的安全模式达成一致,该模式将指示在此通道中使用的安全机制。安全模式可以是 None(无)、Sign(签名)或 SignAndEncrypt(签名并加密)。

根据所选的安全模式,服务器和客户端将展示各自的证书,在双方接受彼此的证书和身份后,通道将打开。对于每个 OPC-UA 服务器,存在一个受信任的证书列表,指定它信任哪些客户端以及它接受哪些连接。在过去,发现了漏洞,允许恶意客户端绕过此证书信任检查,这可能允许未经授权的客户端访问他们无权访问的服务器。

OPC UA 安全结构:

在 SecureChannel 初始化过程中,如果选择的 SecurityMode 启用了加密,客户端和服务器将交换用于后续消息加密过程的对称密钥。为了安全地分发对称密钥,将执行非对称密钥交换,使用服务器和客户端的证书和公钥。

OPC UA对称性加密和非对称性加密???

SecureChannel 支持不同的加密算法用于密钥交换和对称加密、密钥长度,甚至不同的哈希算法用于消息签名

在决定共享安全策略并依赖于服务器设置的情况下,服务器可能要求客户端使用用户名-密码对或证书进行身份验证。如果服务器配置中启用了匿名登录,则服务器将不会对用户进行身份验证。这特别不推荐,通常应避免。下表是安全的所有选项:

关于OPC UA安全,可以参考:

OPC UA的安全性不容忽视!!!

图片

分享链接

OPCUA相关文件资料具体的下载链接如下:

通过网盘分享的文件:8-OPC UA链接:

提取码:关注公众号后,直接发消息【opcua】获取。

参考链接:

  1. .10
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-15,如有侵权请联系 cloudcommunity@tencent 删除服务器架构客户端协议安全