跳到主要内容

Security 加密

本节是 SDK 加密相关 API 与证书工具.

子页跳转

三种 SecurityMode

enum class MessageSecurityMode : int {
Invalid = 0,
None = 1,
Sign = 2,
SignAndEncrypt = 3
};

构造 Session 时传:

ConnectionConfig cfg;
cfg.endpoint_url = "opc.tcp://server:4840";
cfg.security_mode = MessageSecurityMode::SignAndEncrypt;
cfg.client_cert_path = "C:/certs/client.pfx";
cfg.client_key_path = "123456";
Session s(cfg);
Mode数据完整性机密性适用
None××开发期 / 内网 / 调试
Sign×防篡改, 不防嗅探
SignAndEncrypt生产推荐

SecurityPolicyUri

支持 (当前实现):

  • http://opcfoundation.org/UA/SecurityPolicy#None
  • http://opcfoundation.org/UA/SecurityPolicy#Basic256Sha256 (主用)

security_policy_uri 留空时按 security_mode 自动选 (None → #None, 其他 → #Basic256Sha256).


UserToken

enum class UserTokenType : int {
Anonymous = 0,
Username = 1,
Certificate = 2,
Issued = 3
};

通过 ConnectionConfig 选择:

Token字段
Anonymous不设 username
Usernameusername = "...", password = "..."
Certificate(后续版本完善) 用户证书参数
Issued(本 SDK 暂不实现)

证书生成 (OpenSSL)

C++ SDK 当前不内置证书工具, 推荐用 OpenSSL 生成 PFX, 详细见 证书生成与配置.

简化命令:

openssl req -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -nodes \
-subj "/CN=MyClient/O=Darra/C=CN" \
-addext "subjectAltName=URI:urn:my-company:my-client"

openssl pkcs12 -export -out client.pfx -inkey key.pem -in cert.pem -password pass:123456

下一步