Security 加密
本节是 SDK 加密相关 API 与证书工具.
子页跳转
- 生成证书 / 服务端互信配置 / 故障排查请参考 证书生成与配置.
- Session 构造时如何传安全参数请参考 构造函数.
- 服务端支持的安全模式探测请参考 GetEndpoints.
三种 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#Nonehttp://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 |
| Username | username = "...", 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