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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:21:23