Python连接Basic256Sha256的OPCUA服务器遇错误,求解决方法
解决OPC UA客户端连接时的BadSecurityPolicyRejected错误及证书生成方法
错误原因
BadSecurityPolicyRejected 错误表明目标OPC UA服务器要求客户端使用特定安全策略连接,而你最初的代码未启用符合要求的安全机制,因此被服务器拒绝。
生成cert.pem和key.pem证书文件
有两种简单方式生成所需证书和私钥:
方法1:使用OpenSSL命令行工具
依次执行以下命令:
- 生成RSA私钥:
openssl genrsa -out key.pem 2048 - 创建证书签名请求(CSR):
执行时会提示输入国家、组织名称等信息,测试场景下可直接按回车跳过部分字段。openssl req -new -key key.pem -out cert.csr - 生成自签名证书:
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
相关产品推荐
相关产品推荐

