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

Python连接Basic256Sha256的OPCUA服务器遇错误,求解决方法

解决OPC UA客户端连接时的BadSecurityPolicyRejected错误及证书生成方法

错误原因

BadSecurityPolicyRejected 错误表明目标OPC UA服务器要求客户端使用特定安全策略连接,而你最初的代码未启用符合要求的安全机制,因此被服务器拒绝。

生成cert.pem和key.pem证书文件

有两种简单方式生成所需证书和私钥:

方法1:使用OpenSSL命令行工具

依次执行以下命令:

  1. 生成RSA私钥:
    openssl genrsa -out key.pem 2048
    
  2. 创建证书签名请求(CSR):
    openssl req -new -key key.pem -out cert.csr
    
    执行时会提示输入国家、组织名称等信息,测试场景下可直接按回车跳过部分字段。
  3. 生成自签名证书:
    openssl x509 -req -days 365 -in cert.csr -signkey key.pem -out cert.pem
    

方法2:使用python-opcua自带工具

python-opcua库提供了内置的证书生成脚本,直接执行以下命令即可:

python -m opcua.tools.generate_certificate -o cert.pem -k key.pem

该工具会自动生成符合OPC UA规范的证书和私钥,无需手动填写额外信息。

正确的连接代码示例

确保安全策略字符串与服务器要求匹配(比如服务器要求Sign或SignAndEncrypt),完整代码如下:

from opcua import Client

client = Client(url='opc.tcp://192.168.0.5:4840')

# 设置用户名密码
client.set_user('user1')
client.set_password('password')

# 配置安全策略,根据服务器要求调整Sign/SignAndEncrypt
client.set_security_string("Basic256Sha256,Sign,cert.pem,key.pem")

try:
    client.connect()
    print("OPC UA服务器连接成功")
    # 此处可添加后续操作,如获取节点、读取数据等
    # root_node = client.get_root_node()
    # print(f"根节点: {root_node}")
finally:
    client.disconnect()
    print("连接已断开")

额外注意事项

  • 确保生成的cert.pem和key.pem与Python脚本在同一目录,或在代码中指定完整文件路径。
  • 部分OPC UA服务器需要将客户端证书加入信任列表,否则会出现BadCertificateUntrusted错误,此时需将你的cert.pem导入服务器的信任证书库。
  • 若不确定服务器的安全策略,可使用UA Expert等OPC UA客户端工具连接服务器,查看其支持的安全策略类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 20:25:39