如何基于Milo实现无安全认证及证书的UA Server?
搭建无安全机制的Milo极简演示服务器
要搭建完全无安全机制的Milo演示服务器,你可以直接跳过所有和证书、密钥库相关的组件(包括KeyStoreLoader),只保留核心的服务器初始化和节点注册逻辑。以下是具体步骤和代码示例:
核心思路
KeyStoreLoader这类组件的作用是加载SSL/TLS证书、密钥库,用于建立加密的OPC UA安全连接。既然你要无安全机制的服务器,这些组件完全不需要,直接配置非安全端点即可。
代码实现
import org.eclipse.milo.opcua.sdk.server.OpcUaServer; import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfig; import org.eclipse.milo.opcua.sdk.server.api.config.OpcUaServerConfigBuilder; import org.eclipse.milo.opcua.sdk.server.nodes.UaVariableNode; import org.eclipse.milo.opcua.stack.core.Identifiers; import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy; import org.eclipse.milo.opcua.stack.core.types.builtin.LocalizedText; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.eclipse.milo.opcua.stack.core.types.builtin.QualifiedName; import org.eclipse.milo.opcua.stack.core.types.builtin.Variant; import org.eclipse.milo.opcua.stack.core.types.enumerated.MessageSecurityMode; import java.util.concurrent.CompletableFuture; public class MinimalNoSecurityServer { public static void main(String[] args) throws Exception { // 1. 构建服务器配置:完全禁用安全机制 OpcUaServerConfig config = new OpcUaServerConfigBuilder() .setApplicationName(LocalizedText.english("Minimal No-Security Milo Server")) .setApplicationUri("urn:milo:minimal-server") .setBindAddresses(new String[]{"0.0.0.0"}) .setPort(12685) // 设置安全模式为None,安全策略为None .setSecurityPolicies(SecurityPolicy.None) .setMessageSecurityModes(MessageSecurityMode.None) .build(); // 2. 创建服务器实例 OpcUaServer server = new OpcUaServer(config); // 3. 注册一个简单的变量节点(可选,让服务器有实际内容) server.getNamespaceManager().registerAndAddNamespace("urn:minimal:demo").thenAccept(namespaceIndex -> { NodeId nodeId = new NodeId(namespaceIndex, "DemoVariable"); QualifiedName browseName = new QualifiedName(namespaceIndex, "DemoVariable"); UaVariableNode variableNode = server.getNodeFactory().createVariableNode( nodeId, browseName, LocalizedText.english("Demo Variable"), Identifiers.Double, new Variant(0.0) ); server.getAddressSpaceManager().addNode(variableNode); }).join(); // 4. 启动服务器 CompletableFuture<Void> future = server.startup(); future.get(); // 保持服务器运行 Runtime.getRuntime().addShutdownHook(new Thread(() -> { server.shutdown().join(); })); Thread.currentThread().join(); } }
关键说明
- 配置时通过
setSecurityPolicies(SecurityPolicy.None)和setMessageSecurityModes(MessageSecurityMode.None)完全禁用安全机制,不需要任何证书或密钥库配置。 - 不需要初始化
KeyStoreLoader、CertificateManager这类安全相关组件,直接跳过即可。 - 示例中注册了一个简单的Double类型变量,你可以根据需求添加更多节点,或者只保留空的服务器。
内容的提问来源于stack exchange,提问作者CornCoder99
相关产品推荐
相关产品推荐

