【问题标题】:eclipse milo opcua client connection to prosys server problemseclipse milo opcua客户端连接到prosys服务器问题
【发布时间】:2021-01-14 11:54:51
【问题描述】:

我正在尝试使用 milo (0.4.2) 连接到 Prosys opcua 模拟服务器

  1. 我使用 openssl 为用户生成了证书/密钥
  2. 我使用来自 milo sdk 的给定示例为应用程序生成了证书,并将它们导出为证书文件和未加密的 pkcs 8 pem 文件。
  3. 我将两个证书都复制到了 prosys 文件夹中

/home/user/.prosysopc/prosys-opc-ua-simulation-server/USERS_PKI/CA/certs

/home/user/.prosysopc/prosys-opc-ua-simulation-server/PKI/CA/certs

  1. 我检查了 prosys ui 中的两个证书都出现并且看起来受信任

  2. 最后,当我将身份验证模式作为证书和传输安全作为签名(使用在步骤 1 中生成的所有密钥和证书)时,我在 milo 内部遇到了一个相当有趣的异常,例如

Exception in thread "main" java.util.concurrent.ExecutionException: UaException: status=Bad_SecurityChecksFailed, message=unknown securityAlgorithmUri: null
    at java.base/java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:395)
    at java.base/java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1999)
    at de.api.snippets.derReader.main(derReader.java:68)
Caused by: UaException: status=Bad_SecurityChecksFailed, message=unknown securityAlgorithmUri: null
    at org.eclipse.milo.opcua.stack.core.security.SecurityAlgorithm.fromUri(SecurityAlgorithm.java:143)
    at org.eclipse.milo.opcua.sdk.client.session.SessionFsmFactory.lambda$createSession$49(SessionFsmFactory.java:852)
    at org.eclipse.milo.opcua.sdk.client.session.SessionFsmFactory$$Lambda$2643/0000000000000000.apply(Unknown Source)
    at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)

而且我实际上看到这些字段来自 prosys empty

基本上我在这里卡住了,从图片中可以看出,我请求具有安全模式的端点并收到响应,我不知道是什么。 我尝试了 milo 提供的所有可用的 SecurityPolicy,但在所有情况下我都遇到了同样的情况。

所以第一个问题是必须在这个 securityAlgorithmUri 中指定什么,并且无论如何要指向 prosys 来填充它吗?

【问题讨论】:

    标签: java opc-ua milo


    【解决方案1】:

    提醒一下:prosys 的问题实际上是由于使用 opc over https 协议连接到服务器。

    因此,在我通过 tcp 切换到 opc 后,我设法发现了使用证书来验证用户和消息级别安全签名和加密的端点。

    顺便说一句:如果有人要寻找使用 opensssl 生成用户证书的脚本,这里是一个示例 conf 文件:

    openssl req -x509 -config openssl_cert.conf -extensions 'my server exts' -nodes \
                -days 365 -newkey rsa:2048 -keyout user.key -out user.crt
    

    和文件内容:

    [ req ]
    prompt             = no
    distinguished_name = my dn
    
    [ my dn ]
    # The bare minimum is probably a commonName
                commonName = user
               countryName = DE
              localityName = DE
          organizationName = comp
    organizationalUnitName = comp Dept.
       stateOrProvinceName = DE
              emailAddress = user@example.com
                      name = user
                   surname = user
                 givenName = user
                  initials = uu
               dnQualifier = some
    
    [ my server exts ]
    extendedKeyUsage = clientAuth, codeSigning
    keyUsage = digitalSignature, keyAgreement, keyEncipherment, nonRepudiation, dataEncipherment, keyCertSign
    

    【讨论】:

      【解决方案2】:

      我可以说这是 Prosys 堆栈或服务器中的错误。

      使用标准 UA TCP 传输时似乎不会发生这种情况,因此请尝试使用 HTTPS 代替。

      【讨论】:

        猜你喜欢
        • 2018-08-03
        • 1970-01-01
        • 2022-11-07
        • 2021-03-09
        • 1970-01-01
        • 2018-10-05
        • 2016-12-21
        • 2012-07-04
        • 2012-08-31
        相关资源
        最近更新 更多