问题标签 [milo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
milo - 使用 Kepware UA 服务器获取 BuildInfo 时引发 UaException
我使用ReadNodeExample
类来尝试获取 Kepware UA 服务器的节点信息。一切都很好,除了 BuildInfo,我得到以下异常:
这是 full 的结果serverStatus
:
我不太确定问题是由于 Kepware 还是 milo 客户端本身造成的。
java - 浏览服务器 NameSpace 并访问自定义引用
我是 OPC-UA 世界和 Milo SDK 的新手,所以我会尽力解释我想要做什么。
我有一个 OPC-UA 服务器实例正在运行,它将一些节点加载到服务器 NameSapce。另一方面,我有一个订阅此服务器并尝试浏览此节点的客户端。我可以看到客户端中的节点,并且可以访问为该节点定义的一些引用。我现在尝试做的事情是成功地访问在服务器中定义的引用并且 UA-Expert 可以看到它,但我的 Milo Client 实现不能。自定义引用是在服务器端定义的,我的目标是访问他们的“ BrowseName ”或“ DisplayName ”。
我相信这可能是一个简单的问题,但现在我正在努力解决这个问题。
我将留下一些打印屏幕来举例说明我在上面的文字中的意思:
在下图中,红色箭头指向我正在尝试读取的引用,因此在第二张图中,我们可以看到具有HasComponent类型的制造商和描述是正确的,但HasAMLRoleReference未在调试中列出窗户。
这段代码不是我的,所以我不能保证正确的实现,但在服务器端我知道会发生这种情况:
所以ReferenceTypeId是 a new NodeId(1, 4001)
,这是我试图在客户端读取的类型。我的代码基于 Milo git repo 中的 BrowseNode 示例。
在最后一张图片中,我们可以看到地址空间,所以这里我们有一些参数也作为HasComponent出现在引用中,所以我可能使用错误的方法来访问我无法访问的那个HasAMLRoleReference,我真诚地不要不知道。
在此先感谢您的帮助。
[编辑 1]
[编辑 2]
当我右键单击设备参考时,它会加载如下所示的信息。
opc-ua - 使用 Eclipse Milo 了解 OPC-UA 安全性
我是这个 OPC-UA 世界和 Eclipse Milo 的新手。我不明白这里的安全性是如何工作的,讨论 eclipse-milo 提供的客户端示例
我看到一些用于连接 OPCUA 服务器的安全属性:
SecurityPolicy、MessageSecurityMode、clientCertificate、clientKeyPair、setIdentityProvider、
- 上述配置如何相互关联?
我试图运行客户端示例-> BrowseNodeExample。此示例在内部运行 ExampleServer。ExampleServer 配置为使用 Anonymous 和 UsernamePassword Provider 运行。它也必须接受SecurityPolicy.None
, Basic128Rsa15
, Basic256
,Basic256Sha256
以及MessageSecurityMode
asSignandEncrypt
除了SecurityPolicy.None
where MessageSecurityMode
is None
too。
- 问题在于 AnonymousProvider 我可以使用上面提到的所有
SecurtiyPolicy
和MessageSecurityMode
配对连接到服务器(没有提供客户端证书)。但我不能做同样的事情UsernameProvider
,因为UsernameProvider
只有SecurityPolicy
MessageSecurityMode
配对None
成功运行。所有其他对抛出安全检查失败异常(当提供证书时)否则用户访问被拒绝(当未提供客户端证书时)。如何使这项工作?
最后,如果有人能给我指出 Eclipse Milo 的正确用户文档,那就太好了。因为除了示例代码之外我看不到任何文档,并且它们没有记录。
opc-ua - 保护 OpenSecureChannel 消息和 X509IdentityToken?
请澄清以下有关 OPC UA 规范第 4 部分服务的查询,
- 根据我在 GetEndpoints Service 消息后的理解,客户端向服务器发送 OpenSecureChannel 请求,这意味着该请求已根据所需端点中的安全策略进行签名或签名和加密。我在规范 Part 4 Services, pg.no 33 中看到了以下几行,
OpenSecureChannel 请求和响应消息应使用发送者的证书进行签名。这些消息应始终加密。如果传输层不提供加密,则这些消息应使用接收方的证书进行加密。
在此提到消息应始终被加密。它如何依赖传输层?
我还在 Wolfgang Mahnke、Stefan-Helmut Leitner、Matthias Damm 的 OPC 统一架构书中看到了另一种描述,如下所示,
如果证书被认为是可信的,那么作为第二步,根据安全策略和安全模式保护的 OpenSecureChannel 请求被发送到服务器的选定会话端点。(第 7 章,第 213 页)
在这里,它强调消息是根据安全策略和安全模式保护的,所以我要求澄清一下安全模式是否是签名的场景?
消息也会被加密吗?
一般来说,当 MessageSecurityMode 为 None 时,SecurityPolicy“必须”为 None?'Invalid' MessageSecurityMode 的确切用法是什么?
X509IdentityToken 规范第 4 部分服务第 7.35.4 节
如果 SecurityPolicy 需要,此令牌应始终伴随 ActivateSession 的 userTokenSignature 参数中的签名。如果 SecureChannel 的 SecurityPolicy 为 None,服务器应该为 UserTokenPolicy 指定一个 SecurityPolicy。
在第一行中提到“如果 SecurityPolicy 需要”,当 userTokenSignature 是 X509IdentityToken 的必填字段时,“如果需要”的上下文是什么?在第二行中提到,如果 SecureChannel 的 SecurityPolicy 为 None,则需要明确的安全策略,其中“None”表示没有交换证书,因此不能使用 X509IdentityToken,请参阅同一规范中的以下行(第5.6.3 激活会话,第 40 页)?
如果令牌是 X509IdentityToken,则证明是使用与证书关联的私钥生成的签名。要签名的数据是通过将最后一个 serverNonce 附加到 CreateSession 响应中指定的 serverCertificate 来创建的。
为了您的信息,我使用 2015 年 11 月发布的规范进行研究。请说清楚。
certificate - eclipse Milo 证书链在服务器上
我正在尝试设置一个示例服务器,该服务器将在使用 SignAndEncrypt 模式时提供正确的证书链。
使用提供的示例,即使我在 .pfx 文件中包含了根证书(未使用中间证书),服务器也只会将证书而不是链传递给根证书。
我以自己的方式访问 OpcUaServer.java 并包含证书链,但 OpcUaServer.java 调用:
获取证书链并没有超载,所以我有点卡住了。
如何设置(示例)OPC UA Milo 服务器来提供完整的证书链,而不是只提供服务器证书?
java - 具有历史数据访问功能的 Milo OPC UA 服务器
嗨,
我是milo(和 OPC-UA)的新手,并尝试使用历史数据访问实现 OPC-UA 服务器。我重用了当前的 milo 服务器示例并创建了一个历史节点。在这个节点上,我可以(使用 Prosys OPC UA 客户端)查询空历史记录。我知道我必须自己实现历史节点的持久性。到目前为止一切顺利——但我找不到任何有关处理历史读取请求以及如何返回响应的信息。更准确地说,如何HistoryData
将HistoryReadResult
server - 连接到 Milo 服务器
我创建了一个小型 Milo 服务器,但无法使用 Prosys OPC UA 客户端连接到它 - 其他客户端工作正常。我猜它类似于这个问题:Configuration OPC UA Server (Milo)? 但我不明白凯文在答案中建议的 setBindAddresses() 使用哪个地址。
这是我启动服务器并尝试与 prosys 客户端连接的日志:
服务器配置:
OpcUaServerConfig serverConfig = OpcUaServerConfig.builder()
.setApplicationUri(uri)
.setApplicationName(LocalizedText.english(description))
.setBindPort(port)
.setBindAddresses(newArrayList("0.0.0.0"))
.setBuildInfo(
new BuildInfo(
uri,
"test",
description,
OpcUaServer.SDK_VERSION,
"v.0.1", DateTime.now()))
.setCertificateManager(certificateManager)
.setCertificateValidator(certificateValidator)
.setIdentityValidator(identityValidator)
.setProductUri(uri)
.setServerName(name)
.setSecurityPolicies(
EnumSet.of(
SecurityPolicy.None,
SecurityPolicy.Basic128Rsa15,
SecurityPolicy.Basic256,
SecurityPolicy.Basic256Sha256))
.setUserTokenPolicies(
ImmutableList.of(
USER_TOKEN_POLICY_ANONYMOUS,
USER_TOKEN_POLICY_USERNAME))
.build();
java - Eclipse Milo:服务器事件生成
我正在尝试根据 milo GitHub 页面中的示例在 OPC 服务器上生成事件,但我无法弄清楚如何去做。我可以读取和写入节点,但主要是由于提供的示例,我设法做到了。
问候, 埃里克
java - 解码二进制 ExtensionObject
我正在测试 Eclipse Milo(版本 0.1.5)作为客户端与 TwinCAT PLC 的 OPC UA 服务器进行通信。我的 java 程序充当一种中间件。它从 TwinCAT OPC UA 服务器读取结构,将它们的值放入 JSON 并将其发送到其他服务器。
为了进行测试,我在 PLC 中创建了一个带有两个变量的示例结构:
stSimpleStruct(PLC 中的结构定义)
-bVar1(布尔)
-fVar2(浮点)
TwinCAT 中的结构图片
如果我读取节点,则该值是编码为 ByteString 的 ExtensionObject。应该读取结构变量(bVar1 和 fVar2)的值并将其放入 JSON 对象中。所以结果是这样的:
上面的结构只是一个例子。要读取的结构仅在运行时已知。如何解码二进制 ExtensionObject 以访问结构变量的值?
这是我的代码:
opc-ua - 区分 Milo OPC UA 项目中节点的“管理员”级别访问权限?
在尝试了解基于 OPC UA 的客户端和服务器的 milo 项目示例时,希望对以下场景进行澄清。
当我尝试使用命名空间字符串测试 WriteExampleHelloWorld/OnlyAdminCanWrite/
以连接使用UserNameIdentityToken
值“admin”(用户名)和 password2(密码)验证用户的服务器时,它无法写入值。
是不是因为在 ExampleNamespace.java 文件中的以下代码中看到的身份未被识别为管理员?
如何区分管理员和其他用户?测试属性,如 AccessLevel 和 UserAccessLevel,但它们对当前尝试访问的用户有效。