You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过UA Expert使用Basic256Sha256安全策略建立连接?

用Milo实现Basic256Sha256安全策略+Sign/SignAndEncrypt模式的OPC UA连接

先确认核心前提

从UA Expert里复制对应端点的完整URL,务必保证端点的安全策略是Basic256Sha256,消息模式是Sign或SignAndEncrypt——别选错端点,很多服务器会同时提供多个不同安全配置的端点。

步骤1:配置客户端证书(关键)

Basic256Sha256安全策略要求客户端和服务器通过证书做双向身份校验,这是最容易踩坑的点:

  • 生成客户端证书:用Milo自带的工具快速生成,或者导入已有的证书文件(JKS/PFX格式)
  • 把客户端证书导入服务器的信任证书库:绝大多数OPC UA服务器默认只信任预配置的证书,你需要导出客户端证书(.der或.pem格式),添加到服务器的信任列表里;同时把服务器的证书导入客户端的信任列表
  • 代码示例(Milo客户端证书初始化):
// 证书存储目录,自动创建
File certDir = new File("./milo-client-certs");
certDir.mkdirs();

// 生成RSA密钥对和客户端证书
KeyPair keyPair = KeyPairGenerator.generateRsaKeyPair(2048);
X509Certificate clientCert = new X509CertificateGenerator()
    .setCommonName("Milo Client")
    .setOrganization("Your Org")
    .setValidity(365)
    .generate(keyPair);

// 证书管理器
DefaultCertificateManager certManager = new DefaultCertificateManager(keyPair, clientCert);

// 信任列表管理器(测试时可临时信任所有,生产环境要严格校验)
DefaultTrustListManager trustManager = new DefaultTrustListManager(certDir);
// 手动添加服务器证书到信任列表,或者实现自动信任逻辑
trustManager.addTrustedCertificate(serverX509Cert);

步骤2:配置安全策略与消息模式

创建客户端配置时,明确指定安全策略和消息模式,和端点完全匹配:

// 解析端点URL
EndpointDescription endpoint = EndpointUtil.parseEndpointUrl("opc.tcp://your-server-ip:port/endpoint-path");

// 选择消息模式:Sign或SignAndEncrypt
MessageSecurityMode securityMode = MessageSecurityMode.SIGN_AND_ENCRYPT;

// 构建客户端配置
OpcUaClientConfig clientConfig = OpcUaClientConfig.builder()
    .setEndpoint(endpoint)
    .setSecurityPolicy(SecurityPolicy.Basic256Sha256)
    .setSecurityMode(securityMode)
    .setCertificateManager(certManager)
    .setTrustListManager(trustManager)
    .setIdentityProvider(getAuthProvider()) // 传入身份认证提供者
    .build();

// 创建并连接客户端
OpcUaClient client = OpcUaClient.create(clientConfig);
client.connect().get(); // 同步连接,异步用CompletableFuture

步骤3:适配身份认证方式

根据你要用的认证类型,实现对应的身份提供者:

用户名密码认证

private IdentityProvider getAuthProvider() {
    return new UsernameProvider("your-username", "your-password");
}

证书认证

如果服务器要求用证书作为身份凭证,确保客户端证书已被服务器信任,然后配置:

private IdentityProvider getAuthProvider() {
    return new X509IdentityProvider(certManager.getCertificate());
}

常见问题排查

  • 证书不被信任:先临时关闭服务器的证书校验(仅测试),如果能连上,就是证书信任问题,检查两边的信任列表
  • 安全参数不匹配:确认代码里的安全策略、消息模式和UA Expert里的端点完全一致,别出现策略是Basic256但代码写Basic256Sha256的情况
  • 连接超时:检查服务器端口是否开放,防火墙有没有拦截OPC UA流量
  • 权限问题:确认服务器给对应的认证账号分配了访问该端点的权限

内容的提问来源于stack exchange,提问作者Leo R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 14:47:23