使用用户名和密码连接时,UA_STATUSCODE_BADINTERNALERROR安全模式= NONE和安全策略= NONE

问题描述

我已经编写了OPC UA客户端,并且正在使用ProSys OPC UA Simulator Server对其进行测试。在匿名模式下运行,我的客户端已连接,我可以浏览服务器。但是,当我将客户端配置为使用用户名和密码时,它将失败,并且未为可能的端点找到合适的UserTokenPolicy。我已经调试了它,看来http://opcfoundation.org/UA/Se…..olicy#None不在端点userIdentityTokens数组中,尽管在ProSys中它指出了它。

在“ OPC UA模拟器用户名和密码”框中打勾的我已设置用户 安全模式=无 安全策略=未勾选

服务器端点列表 安全模式=无 安全策略=无 所以我希望可以在userIdentityTokens数组中看到它。

我的客户端是使用open62541库编写的

任何帮助将不胜感激。

谢谢

解决方法

我还没有使用过Open62541库,但似乎该标准允许OPC服务器要求对用户名和密码进行加密,即使未对传输的其余部分进行签名或加密也是如此。

似乎在某个时间点(可能仍然),Open62541无法处理加密密码。这是几个相关的github问题:

https://github.com/open62541/open62541/issues/934

https://github.com/open62541/open62541/issues/1548

https://github.com/open62541/open62541/issues/2757

我正在基于node-opcua库的node.js OPC UA客户端上进行工作,并且能够验证是否可以将安全模式设置为none并通过用户身份验证连接到ProSys OPC-UA仿真服务器。设置为用户名和密码。我不知道幕后在做哪种类型的密码加密node-opcua,但是可以。

-----其他信息-------

我找到了另一个澄清的论坛:https://forum.prosysopc.com/forum/opc-ua/clarification-on-opensecurechannel-messages-and-x509identitytoken-specifications/

关键部分:

如果发送密码,则密码将按照 UserTokenPolicy(与SecurityPolicy分开,但相似)。 应用实例证书将用于加密 在这种情况下,因此甚至需要交换 当MessageSecurityMode = None时。