Eclipse Milo Opcua Client-Verbindung zu Prosys Server-Problemen

Sep 29 2020

Ich versuche, mit milo (0.4.2) eine Verbindung zum Prosys opcua-Simulationsserver herzustellen.

  1. Ich habe Zertifikate / Schlüssel für Benutzer mit openssl generiert
  2. Ich habe ein Zertifikat für die Anwendung anhand eines Beispiels von milo sdk generiert und es als Zertifikatdatei und unverschlüsselte pkcs 8 pem-Datei exportiert.
  3. Ich habe beide Zertifikate in Prosys-Ordner kopiert

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

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

  1. Ich habe überprüft, ob in prosys ui beide Zertifikate angezeigt wurden und vertrauenswürdig aussehen

  2. Wenn ich schließlich eine Verbindung mit dem Authentifizierungsmodus als Zertifikat und der Transportsicherheit als Zeichen herstelle (unter Verwendung aller in Schritt 1 generierten Schlüssel und Zertifikate), stoße ich innerhalb von milo like auf eine ziemlich lustige Ausnahme

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)

Und ich sehe tatsächlich, dass diese Felder von Prosys leer kommen

Grundsätzlich stecke ich hier fest, wie Sie auf dem Bild sehen können, dass ich einen Endpunkt mit Sicherheitsmodus angefordert und als Antwort erhalten habe, ich weiß nicht was. Ich habe alle verfügbaren SecurityPolicy-Versionen von milo ausprobiert, bin aber in allen Fällen auf die gleiche Situation gestoßen.

Die erste Frage ist also, was in diesem securityAlgorithmUri angegeben werden muss und ob Prosys es trotzdem richtig ausfüllen soll.

Antworten

KevinHerron Sep 29 2020 at 10:45

Am besten kann ich sagen, dass dies ein Fehler im Prosys-Stack oder -Server ist.

Es scheint nicht aufzutreten, wenn der Standard-UA-TCP-Transport verwendet wird. Versuchen Sie es also anstelle von HTTPS.

user3423 Oct 29 2020 at 03:48

Zur Erinnerung: Das Problem mit prosys war wirklich auf die Verwendung des Protokolls opc over https zurückzuführen, um eine Verbindung zum Server herzustellen.

Nachdem ich über TCP zu opc gewechselt war, konnte ich Endpunkte ermitteln, die mithilfe von Zertifikaten Sicherheitszeichen und Verschlüsselung auf Benutzer- und Nachrichtenebene authentifizierten.

Übrigens: Wenn jemand nach einem Skript sucht, um ein Benutzerzertifikat mit opensssl zu generieren, ist hier eine Beispiel-Conf-Datei:

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

und Dateiinhalt:

[ 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 = [email protected]
                  name = user
               surname = user
             givenName = user
              initials = uu
           dnQualifier = some

[ my server exts ]
extendedKeyUsage = clientAuth, codeSigning
keyUsage = digitalSignature, keyAgreement, keyEncipherment, nonRepudiation, dataEncipherment, keyCertSign