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

OPC UA客户端连接子设备时证书URI不匹配错误求助

问题原因

错误BadCertificateUriInvalid的核心原因是:客户端发送的ApplicationDescription中的URI与证书内嵌的URI不匹配。

你的证书在subjectAltName字段中明确指定了客户端身份URI为urn:freeopcua:client,但asyncua的Client默认会根据目标服务器URL自动生成ApplicationURI,这就导致和证书里的固定URI不一致,触发了服务器的身份验证拦截。

UA Expert能正常连接,是因为它允许手动配置ApplicationURI,确保和证书内的URI完全对齐,而你的代码缺少了这一关键配置步骤。

解决方法

在创建Client实例后,显式设置客户端的application_uri属性,使其与证书中定义的urn:freeopcua:client完全一致即可。修改后的代码如下:

import asyncio
from asyncua import Client
    
async def connect_to_opcua_server():
    url = "opc.tcp://192.168.120.200:51310/CogentDataHub/DataAccess"
    username = "username"
    password = "password"
    policy = "Basic256Sha256"
    mode = "SignAndEncrypt"
    certificate_path = "certificate.pem"
    private_key_path = "private_key.pem"
    # 与证书subjectAltName中一致的客户端URI
    client_app_uri = "urn:freeopcua:client"

    # 创建客户端实例
    client = Client(url)
    # 显式设置客户端身份URI,匹配证书内容
    client.application_uri = client_app_uri

    # 配置安全策略
    security_string = f"{policy},{mode},{certificate_path},{private_key_path}"
    await client.set_security_string(security_string)
    
    # 设置账号密码
    client.set_user(username)
    client.set_password(password)
    
    # 连接服务器
    await client.connect()
    print("connected !\n")

额外说明

  • OPC UA的安全机制要求客户端声明的身份必须与证书绑定的身份严格一致,这是防止证书被非法复用的核心验证逻辑。
  • 若后续更换证书,需同步更新client.application_uri的值,确保与新证书subjectAltName中的URI完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:46