姚令武 2025-10-15 14:35 采纳率: 98.6%
浏览 23
已采纳

OPC UA连接失败:KEPServerEX 6证书信任问题

在使用OPC UA客户端连接KEPServerEX 6时,常出现“证书信任失败”错误。典型表现为客户端提示“BadCertificateUntrusted”,原因是KEPServerEX默认启用强安全策略,对客户端证书进行严格校验。若客户端证书未被服务器信任或未正确导入至KEPServerEX的受信任证书存储区,连接即被拒绝。该问题多发于首次部署或跨域通信场景,需在KEPServerEX的“OPC UA Configuration”中手动批准或导入客户端证书,并确保证书路径完整、时间有效,方可建立可信连接。
  • 写回答

1条回答 默认 最新

  • Airbnb爱彼迎 2025-10-15 14:35
    关注

    1. 问题背景与现象描述

    在工业自动化系统集成中,OPC UA(Open Platform Communications Unified Architecture)作为跨平台、安全可靠的通信协议,广泛应用于KEPServerEX 6等主流工业网关。然而,在实际部署过程中,用户频繁遭遇“BadCertificateUntrusted”错误,导致客户端无法成功连接服务器。

    该错误的核心提示为证书信任失败,典型日志信息如下:

    [Error] OPC UA Client: Connect failed - Status: BadCertificateUntrusted
    Cause: The certificate provided by the client is not trusted by the server.

    此问题多出现在首次配置、跨网络域通信或证书更新后,根本原因在于KEPServerEX 6默认启用强安全策略(Security Policy: Basic256Sha256 或更高),要求双向证书认证(Mutual Authentication),若客户端证书未被服务器显式信任,则连接被强制拒绝。

    2. 核心机制解析:OPC UA 安全模型与证书链

    OPC UA 的安全架构基于 PKI(Public Key Infrastructure),依赖 X.509 数字证书实现身份验证和加密通信。KEPServerEX 6 内置多个证书存储区,关键目录包括:

    • Trusted Certificates:存放被服务器信任的客户端/服务器证书
    • Rejected Certificates:自动拦截的未知或无效证书
    • Issued Certificates:由本地 CA 签发的证书

    当 OPC UA 客户端发起连接时,KEPServerEX 会执行以下校验流程:

    graph TD A[客户端发起连接] --> B{服务器检查客户端证书} B --> C[证书是否存在于 Trusted Certificates?] C -->|否| D[检查是否在 Rejected 列表] D -->|是| E[返回 BadCertificateUntrusted] D -->|否| F[提示手动批准或导入] C -->|是| G[验证有效期、签名、CRL] G --> H[建立安全通道]

    3. 常见触发场景分析

    场景技术成因发生频率
    首次部署新客户端客户端证书未被导入至 KEPServerEX 受信任库
    跨域或跨主机通信域名/IP 不匹配证书 Subject 或 SAN 字段
    证书过期客户端证书有效期已过(默认 1 年)
    自签名证书未签发使用非 CA 签名证书且未手动信任
    时间不同步系统时间偏差导致证书被视为“未来生效”或“已过期”
    证书吊销列表(CRL)不可达服务器无法验证 CRL 状态
    证书路径不完整缺少中间 CA 证书链
    策略不匹配客户端请求 None 安全而服务器强制 Sign & Encrypt
    多网卡环境绑定混乱证书 DNS 名称与实际访问地址不符
    虚拟机克隆后证书复用相同证书指纹冲突或私钥暴露

    4. 解决方案分步实施指南

    1. 定位客户端证书位置
      通常位于客户端运行账户的 AppData 目录下,例如:
      C:\Users\[User]\AppData\Local\UaExpert\Certificates\own\certs\
    2. 登录 KEPServerEX 配置界面
      打开 “OPC UA Configuration” → “Certificates” 选项卡
    3. 查看被拒证书
      在 “Rejected Certificates” 列表中查找客户端证书条目
    4. 手动批准证书
      选中证书并点击 “Approve” 按钮,系统自动将其移入 Trusted Certificates
    5. 或手动导入证书
      通过 “Import Certificate” 功能上传客户端公钥证书(.der 或 .pem 格式)
    6. 验证证书有效性
      确保证书未过期、签名有效、且包含正确的 Subject Alternative Name(SAN)
    7. 同步系统时间
      确保客户端与服务器时间误差小于 5 分钟,建议启用 NTP 同步
    8. 重启 OPC UA 服务
      在 KEPServerEX 中重启 OPC UA 接口以加载新信任链
    9. 测试连接
      使用 UaExpert 或 Prosys OPC UA Client 进行连接测试
    10. 启用日志追踪
      在 KEPServerEX 的 Diagnostics 中开启 OPC UA Security Log,便于后续审计

    5. 高级配置建议与最佳实践

    为避免重复出现证书信任问题,建议采取以下长期策略:

    • 建立统一的内部 CA(如 OpenSSL 或 Windows AD CS),集中签发客户端证书
    • 在批量部署时,预先将根 CA 证书导入 KEPServerEX 的 Trusted Roots 存储区
    • 使用脚本自动化证书导出与导入过程,示例如下:
    # PowerShell 示例:导出客户端证书用于导入
    $cert = Get-ChildItem -Path Cert:\CurrentUser\My | Where-Object { $_.Subject -like "*OPCClient*" }
    Export-Certificate -Cert $cert -FilePath "C:\Temp\ClientCert.cer" -Type CERT

    此外,可通过组策略(GPO)在域环境中统一分发受信任的根证书,提升运维效率与安全性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 10月23日
  • 创建了问题 10月15日