如何通过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
相关产品推荐
相关产品推荐

