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

.NET Core 8 OPC UA客户端连接KepServerEX无安全端点报错排查

解决OPC Foundation客户端连接KepServerEX 6的证书及安全配置问题

针对你遇到的三类连续错误,逐个拆解解决方案:

1. 解决> ArgumentNullException: Value cannot be null. (Parameter 'serverCertificate')

你手动创建EndpointDescription时仅指定了EndpointUrl,缺失服务器证书、安全策略等核心元数据,这是空指针错误的根源。永远不要手动构造EndpointDescription,应通过CoreClientUtils.SelectEndpoint从服务器拉取完整端点信息,该方法会自动查询服务器端点列表并返回匹配配置。

2. 解决> The chosen security policy is not supported by the client to connect to the server

当服务器禁用加密(MessageSecurityMode.None)时,必须同步将SecurityPolicyUri设置为SecurityPolicies.None,否则客户端会尝试使用默认安全策略,与服务器配置不匹配导致报错。

3. 解决> Certificate is not trusted

即使在client.Config.xml中设置AutoAcceptUntrustedCertificates=true,仍可能因配置加载顺序、权限问题导致设置不生效。此时需通过代码强制覆盖证书验证逻辑;另外KepServerEX的自签名证书,除安装到系统受信任存储外,测试环境可直接在代码中跳过验证(生产环境需严格校验)。


完整修正代码

var endpointUrl = "opc.tcp://192.168.21.75:49320";

// 初始化应用实例
ApplicationInstance application = new ApplicationInstance
{
    ApplicationName = "OPC UA Client",
    ApplicationType = ApplicationType.Client,
    ConfigSectionName = "client"
};

// 加载配置并检查客户端证书有效性
await application.LoadApplicationConfiguration(false);
bool appCertValid = await application.CheckApplicationInstanceCertificate(false, 0);
if (!appCertValid)
{
    throw new Exception("客户端应用证书无效!");
}

// 强制接受所有服务器证书(仅测试环境使用,生产环境需替换为合规验证逻辑)
application.ApplicationConfiguration.CertificateValidator.CertificateValidation += (sender, e) =>
{
    e.Accept = true;
};

// 获取服务器端点信息
EndpointDescription endpointDescription = CoreClientUtils.SelectEndpoint(endpointUrl, false);
// 匹配无加密安全配置
endpointDescription.SecurityMode = MessageSecurityMode.None;
endpointDescription.SecurityPolicyUri = SecurityPolicies.None;

// 创建配置端点
EndpointConfiguration endpointConfig = EndpointConfiguration.Create(application.ApplicationConfiguration);
ConfiguredEndpoint configuredEndpoint = new ConfiguredEndpoint(null, endpointDescription, endpointConfig);

// 设置用户身份凭证
var userIdentity = new UserIdentity("netdot", "12345");

// 创建会话
var session = await Session.Create(
    application.ApplicationConfiguration,
    configuredEndpoint,
    false,
    application.ApplicationName,
    60000,
    userIdentity,
    null
);

Console.WriteLine("会话创建成功!");

额外配置注意事项

  1. client.Config.xml 关键配置:确保以下配置正确,且文件已复制到程序输出目录:
<ApplicationConfiguration>
  <SecurityConfiguration>
    <AutoAcceptUntrustedCertificates>true</AutoAcceptUntrustedCertificates>
    <RejectSHA1SignedCertificates>false</RejectSHA1SignedCertificates> <!-- KepServerEX可能使用SHA1签名证书 -->
  </SecurityConfiguration>
</ApplicationConfiguration>
  1. 证书存储权限:.NET Core客户端证书默认存储在用户目录,需确保程序拥有读写权限;若证书创建失败,可手动指定证书存储路径。

内容的提问来源于stack exchange,提问作者Sergio Teijido

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:02:06