跳到主要内容

启用加密

生产环境强烈建议走 SignSignAndEncrypt + Basic256Sha256. 步骤就三件: 生成证书 → 服务端导入信任 → 客户端构造时传 PFX.

配套阅读

1. 生成客户端证书 (PFX)

# Darra OPCUA Client GUI 自带证书工具
DarraOpcUaClient.exe gen-cert --out client.pfx --pwd 123456 --cn "MyClient"

2. 服务端导入并信任

cert.pem (或导出的公钥 .der) 复制到服务端的"受信任客户端证书"目录. 各 Server 路径不同:

  • Darra SimulatorServer: <simulator>/pki/trusted/certs/
  • open62541: <server>/pki/trusted/certs/
  • UaExpert: 设置 → Certificates → Trust

3. 客户端构造时传证书

using var ua = new DarraOpcUa(
endpointUrl: "opc.tcp://server:4840",
securityMode: MessageSecurityMode.SignAndEncrypt,
clientCertPath: @"C:\certs\client.pfx",
clientKeyPath: "123456" // PFX 密码
);
ua.Connect();

SecurityMode 选择

模式防篡改加密性能开销何时用
None××0内网, 开发, 性能敏感
Sign×低 (~5%)防 MITM, 流量可见无所谓
SignAndEncrypt中 (~15%)公网, 工厂内网, 默认推荐

SecurityPolicy

当前实现支持两种:

  • http://opcfoundation.org/UA/SecurityPolicy#None — 仅 None mode 用
  • http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 — Sign 与 SignAndEncrypt 默认
SDK 默认行为

不传 securityPolicyUri 时 SDK 按 securityMode 自动选: None → #None, 其他 → #Basic256Sha256.

UserToken (登录身份)

加密通道与登录身份是两件事:

// 加密 + 用户名密码
using var ua = new DarraOpcUa(
endpointUrl: "opc.tcp://server:4840",
securityMode: MessageSecurityMode.SignAndEncrypt,
username: "operator",
password: "secret",
clientCertPath: @"C:\certs\client.pfx",
clientKeyPath: "123456");

证书互信故障排查

错误原因解决
BadCertificateUntrusted服务端没把客户端证书加到 trusted把客户端 .der 拷到服务端 trusted/ 目录
BadCertificateInvalid证书过期 / 未生效 / SAN 缺 URI重新生成 (含 subjectAltName URI)
BadSecurityChecksFailed证书指纹与 ApplicationUri 不匹配客户端 ApplicationUri 必须 = 证书 SAN.URI
BadSecurityModeRejected服务端不支持该模式换更弱的模式或检查服务端配置

详细排查见 FAQ → 加密配置.


相关链接