【问题标题】:Milo OPC UA - unable to connect to server from client when server restarts. server is set to 'USER_TOKEN_POLICY_USERNAME'Milo OPC UA - 服务器重新启动时无法从客户端连接到服务器。服务器设置为“USER_TOKEN_POLICY_USERNAME”
【发布时间】:2021-01-29 09:28:28
【问题描述】:

我正在启用 USER_TOKEN_POLICY_USERNAME 的 milo opcua 服务器并使用 UsernameIdentityValidator 设置用户名和密码。

在 milo 客户端,我使用UsernameProvider 设置setIdentityProvider

当我运行此设置时,一切正常。

但是当我重新启动 opcua 服务器时,milo 客户端不会重新连接。我遇到了以下异常:

[milo-shared-thread-pool-2] 跳过证书验证:C=DE, ST=" ", L=Locality, OU=OrganizationUnit, O=Organization, CN=AggrServer@7aaf488fd8d6

29.01.2021 09:25:48.282+0000 INFO [m.o.serv.KafkaConsumer(1bc715b8)] [org.springframework.kafka.KafkaListenerEndpointContainer#0-0-C-1] 成功发送记录到主题:NSCH_TEST_Data。 29.01.2021 09:26:55.681+0000 WARN [o.e.m.opcua.sdk.client.SessionFsm] [milo-shared-thread-pool-3] [2] Keep Alive failureCount=4 超过 failuresAllowed=3 29.01.2021 09:26:55.681+0000 WARN [o.e.m.opcua.sdk.client.SessionFsm] [milo-shared-thread-pool-3] [2] Keep Alive failureCount=5 超过 failuresAllowed=3 29.01.2021 09:26:55.682+0000 信息 [moMiloConnectorRemote(7b76b59d)] [milo-shared-thread-pool-6] opc.tcp://192.168.56.101:4840: onSessionInactive: OpcUaSession{sessionId=NodeId{ns =1, id=会话:fc6fdb4f-0e8a-441d-ba25-45d067d434e7}, sessionName=OpcUa@0b8bc292754c} 29.01.2021 09:26:55.682+0000 信息 [moMiloConnectorRemote(7b76b59d)] [milo-shared-thread-pool-6] opc.tcp://192.168.56.101:4840: sessionInactive: OpcUaSession{sessionId=NodeId{ns =1, id=会话:fc6fdb4f-0e8a-441d-ba25-45d067d434e7}, sessionName=OpcUa@0b8bc292754c} 29.01.2021 09:26:55.682+0000 信息 [moMiloConnectorRemote(7b76b59d)] [milo-shared-thread-pool-6] opc.tcp://192.168.56.101:4840: 通知 Observer-opc.tcp:// 192.168.56.101:4840 关于 ConnectionEvent(state=Connecting, prevState=Connected, label=opc.tcp://192.168.56.101:4840) 29.01.2021 09:26:55.683+0000 INFO [m.opcua.OpcUaObserverImpl(754d0f4a)] [milo-shared-thread-pool-6] Observer-opc.tcp://192.168.56.101:4840: 处理事件 ConnectionEvent (state=Connecting, prevState=Connected, label=opc.tcp://192.168.56.101:4840) 29.01.2021 09:26:55.683+0000 信息 [m.o.OpcUaObserverImpl$ModelReadyChangeChecker(3dd6dea0)] [milo-shared-thread-pool-6] OpcUaObserverImpl-opc.tcp://192.168.56.101:4840: 停止 29.01.2021 09:26:55.683+0000 INFO [m.opcua.OpcUaObserverImpl(754d0f4a)] [milo-shared-thread-pool-6] Observer-opc.tcp://192.168.56.101:4840: 通知 2 个听众ModelUnavailableEvent@1791022155[uri=opc.tcp://192.168.56.101:4840,nodesCount=0,label=Observer-opc.tcp://192.168.56.101:4840] 29.01.2021 09:26:55.683+0000 INFO [m.opcua.OpcUaObserverImpl(754d0f4a)] [DefaultDispatcher-worker-1] Observer-opc.tcp://192.168.56.101:4840: 通知 Subscriber-opc.tcp:/ /192.168.56.101:4840 关于 ModelUnavailableEvent@1791022155[uri=opc.tcp://192.168.56.101:4840,nodesCount=0,label=Observer-opc.tcp://192.168.56.101:4840] 29.01.2021 09:26:55.683+0000 信息 [opcua.MiloSubscriber(364cd1b9)] [DefaultDispatcher-worker-1] 订阅者-opc.tcp://192.168.56.101:4840: 取消订阅 1 个订阅 29.01.2021 09:26:55.683+0000 信息 [m.opcua.OpcUaObserverImpl(754d0f4a)] [DefaultDispatcher-worker-2] Observer-opc.tcp://192.168.56.101:4840: 通知 SyncProcessor-opc.tcp:/ /192.168.56.101:4840 关于 ModelUnavailableEvent@1791022155[uri=opc.tcp://192.168.56.101:4840,nodesCount=0,label=Observer-opc.tcp://192.168.56.101:4840] 29.01.2021 09:26:55.683+0000 INFO [m.opcua.serv.SyncProcessor(2474528)] [DefaultDispatcher-worker-2] SyncProcessor:忽略事件 ModelUnavailableEvent@1791022155[uri=opc.tcp://192.168.56.101 :4840,nodesCount=0,label=Observer-opc.tcp://192.168.56.101:4840] 29.01.2021 09:26:55.686+0000 信息 [opcua.MiloSubscriber(364cd1b9)] [DefaultDispatcher-worker-1] SyncExecutor-Subscriber(364cd1b9)-opc.tcp://192.168.56.101:4840: SyncExecutor-Subscriber(364cd1b9 )-opc.tcp://192.168.56.101:4840:取消订阅,subscriptionId=1 29.01.2021 09:26:55.686+0000 INFO [opcua.MiloSubscriber(364cd1b9)] [DefaultDispatcher-worker-1] Subscriber-opc.tcp://192.168.56.101:4840:删除订阅 SyncExecutor-Subscriber(364cd1b9)-opc .tcp://192.168.56.101:4840(SyncExecutor-Subscriber(364cd1b9)-opc.tcp://192.168.56.101:4840) 29.01.2021 09:27:11.685+0000 WARN [opcua.MiloSubscriber(364cd1b9)] [DefaultDispatcher-worker-1] [Subscriber-opc.tcp://192.168.56.101:4840: deleteSubscription(1) of SyncExecutor-Subscriber( 364cd1b9)-opc.tcp://192.168.56.101:4840] 返回 null,因为 UaException:status=Bad_ConnectionRejected,message=io.netty.channel.AbstractChannel$AnnotatedConnectException:连接被拒绝:/192.168.56.101:4840 29.01.2021 09:27:27.703+0000 WARN [oemoscsClientCertificateValidator$InsecureValidator] [milo-shared-thread-pool-5] 跳过证书验证:C=DE,ST="",L=Locality,OU=OrganizationUnit, O=组织,CN=AggrServer@7aaf488fd8d6 29.01.2021 09:27:31.782+0000 WARN [oemoscsClientCertificateValidator$InsecureValidator] [milo-shared-thread-pool-2] 跳过证书验证:C=DE,ST="",L=Locality,OU=OrganizationUnit, O=组织,CN=AggrServer@7aaf488fd8d6 29.01.2021 09:27:39.806+0000 WARN [oemoscsClientCertificateValidator$InsecureValidator] [milo-shared-thread-pool-6] 跳过证书验证:C=DE,ST="",L=Locality,OU=OrganizationUnit, O=组织,CN=AggrServer@7aaf488fd8d6 29.01.2021 09:27:55.830+0000 WARN [oemoscsClientCertificateValidator$InsecureValidator] [milo-shared-thread-pool-3] 跳过证书验证:C=DE,ST="",L=Locality,OU=OrganizationUnit, O=组织,CN=AggrServer@7aaf488fd8d6

新日志

02.02.2021 18:32:55.541+0000 WARN [opcua.MiloSubscriber(3c5d9688)] [DefaultDispatcher-worker-3] [Subscriber-opc.tcp://192.168.56.101:4840: SyncExecutor 的 deleteSubscription(1) -Subscriber(3c5d9688)-opc.tcp://192.168.56.101:4840] 返回 null,因为 UaException:status=Bad_ConnectionRejected,message=io.netty.channel.AbstractChannel$AnnotatedConnectException:连接被拒绝:/192.168.56.101:4840 02.02.2021 18:32:55.542+0000 信息 [opcua.MiloBrowser(1d141b2d)] [DefaultDispatcher-worker-2] idNameTypeSet.nodes.size 02.02.2021 18:32:55.542+0000 INFO [m.o.OpcUaObserverImpl$ModelReadyChangeChecker(3c8bf12c)] [DefaultDispatcher-worker-2] OpcUaObserverImpl-opc.tcp://192.168.56.101:4840:退出模型检查,因为在外部停止 02.02.2021 18:33:59.790+0000 信息 [moMiloConnectorRemote(74c9951c)] [milo-shared-thread-pool-3] opc.tcp://192.168.56.101:4840: onSessionActive: OpcUaSession{sessionId=NodeId{ns =1, id=会话:d27e7db7-4401-4f08-8c17-7bfaf9075fe4}, sessionName=OpcUa@154c9f72aa09} 02.02.2021 18:33:59.790+0000 信息 [moMiloConnectorRemote(74c9951c)] [milo-shared-thread-pool-3] opc.tcp://192.168.56.101:4840: 通知 Observer-opc.tcp:// 192.168.56.101:4840 关于 ConnectionEvent(state=Connected, prevState=Connecting, label=opc.tcp://192.168.56.101:4840) 02.02.2021 18:33:59.790+0000 INFO [m.opcua.OpcUaObserverImpl(ff09afd)] [milo-shared-thread-pool-3] Observer-opc.tcp://192.168.56.101:4840: 处理事件 ConnectionEvent (state=Connected, prevState=Connecting, label=opc.tcp://192.168.56.101:4840) 02.02.2021 18:33:59.790+0000 信息 [m.o.OpcUaObserverImpl$ModelReadyChangeChecker(3c8bf12c)] [milo-shared-thread-pool-3] OpcUaObserverImpl-opc.tcp://192.168.56.101:4840: 开始 02.02.2021 18:33:59.790+0000 信息 [moOpcUaObserverImpl$ModelReadyChangeChecker(3c8bf12c)] [milo-shared-thread-pool-3] OpcUaObserverImpl-opc.tcp://192.168.56.101:4840: modelReadyChecking=MinMaxInterval(min =10, max=30, timeUnit=SECONDS, current=10, step=3), modelChangeChecking=MinMaxInterval(min=60, max=1800, timeUnit=SECONDS, current=60, step=180), modelReadyMinNodesCount=0 02.02.2021 18:33:59.804+0000 信息 [moOpcUaObserverImpl$ModelReadyChangeChecker(3c8bf12c)] [DefaultDispatcher-worker-2] OpcUaObserverImpl-opc.tcp://192.168.56.101:4840:-> check(modelReadyMinNodesCount=0,modelChangeCheckRunning =假) 02.02.2021 18:33:59.804+0000 信息 [opcua.MiloBrowser(1d141b2d)] [DefaultDispatcher-worker-2] 在 nodesCount 方法中 02.02.2021 18:33:59.817+0000 信息 [opcua.MiloBrowser(1d141b2d)] [DefaultDispatcher-worker-2] nodesCount=3605

【问题讨论】:

  • 这不是一个例外,并且与导致它无法重新连接的任何原因无关。您必须提供更多信息或日志。
  • 刚刚添加 '.setIdentityProvider(UsernameProvider(getSystemEnv("USERNAME"), getSystemEnv("PASSWORD")))' 到客户端,它停止工作
  • "onSessionActive:" 没有被触发
  • 您必须提供更多日志或 Wireshark 捕获或其他内容。
  • @KevinHerron 添加了更多日志

标签: milo


【解决方案1】:

似乎客户端/服务器证书验证存在问题。

UA PKI、X509 等复杂难懂,更难正确配置,几句话无法回答。如果您刚开始使用 OPC UA,请尝试跳过服务器策略和用户识别,直到您了解为止。

服务器和客户端需要证书才能解密或加密用户身份验证。

但是做一些检查:

  • 检查客户端是否在其受信任的路径中有服务器证书。
  • 检查服务器证书是否已更改。服务器不应在每次服务器启动时重新生成其自签名证书,而只能在安装设置或管理时重新生成。

解决方法:

【讨论】:

    【解决方案2】:

    我认为从您的新日志中提取的有意义的异常是:

    io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: /192.168.56.101:4840
    

    简单的网络错误。服务器不存在,没有运行,防火墙挡住了,等等......

    您现在在客户端代码中没有做错任何事情。

    【讨论】:

    • 在没有身份验证功能的情况下运行相同的代码。即使超出 netty 异常,客户端也会重新连接到服务器。添加日志供参考(上)
    • 你能获取 Wireshark 捕获吗?这些日志大部分来自您的应用程序,而不是 Milo,它们对我没有多大帮助。
    • 让我给你更多细节,我在 docker 环境中运行它。当 milo 客户端在 docker 环境中连接到 millo 服务器时,它似乎在重新连接时将容器 id 作为端点 URI。我们在调试时注意到了这一点。肯定会造成问题。在第一次连接时,它选择服务器 IP (192.168.56.101:4840) 重新启动它选择容器 ID 这只是我的观察。我想知道我的扣除是否可能是它无法连接的原因
    • 也许吧。您是否试图强制它重新连接而不是允许它自己这样做?如果您让它自行重新连接,它没有理由进行发现并选择新的端点 URL。
    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 2016-05-10
    • 2021-04-06
    • 2020-05-26
    • 2020-03-08
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多