Eclipse Milo Opcua Client-Verbindung zu Prosys Server-Problemen
Ich versuche, mit milo (0.4.2) eine Verbindung zum Prosys opcua-Simulationsserver herzustellen.
- Ich habe Zertifikate / Schlüssel für Benutzer mit openssl generiert
- 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.
- 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
Ich habe überprüft, ob in prosys ui beide Zertifikate angezeigt wurden und vertrauenswürdig aussehen
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
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.
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