簡體   English   中英

eclipse milo opcua 客戶端連接到 prosys 服務器的問題

[英]eclipse milo opcua client connection to prosys server problems

我正在嘗試使用 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 空

來自idea調試會話的圖片

基本上我在這里卡住了,正如您從圖片中看到的那樣,我請求具有安全模式的端點並收到響應,我不知道是什么。 我嘗試了 milo 提供的所有可用 SecurityPolicy,但在所有情況下我都遇到了相同的情況。

所以第一個問題是必須在這個 securityAlgorithmUri 中指定什么,無論如何要指向 prosys 來填充它嗎?

我能說的最好的是這是 Prosys 堆棧或服務器中的錯誤。

使用標准 UA TCP 傳輸時似乎不會發生這種情況,因此請嘗試使用它而不是 HTTPS。

提醒一下: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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM